Spaces:
Running
Running
| /* VoxDoc - Multi-Theme Voice Documentation UI */ | |
| /* Supports: Clinical Glass, Neon Cyber, Midnight Void, Clinical Light, Aurora Dusk */ | |
| /* ===================================================== | |
| CSS RESET & VARIABLES | |
| ===================================================== */ | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| :root { | |
| /* Dark Theme Colors (Clinical Glass — default) */ | |
| --bg-primary: #0f111a; | |
| --bg-secondary: #1a1d2e; | |
| --bg-card: #161926; | |
| --bg-sidebar: rgba(15, 17, 26, 0.95); | |
| /* Accent Colors */ | |
| --violet-500: #8b5cf6; | |
| --violet-600: #7c3aed; | |
| --violet-glow: rgba(139, 92, 246, 0.3); | |
| --indigo-500: #6366f1; | |
| --indigo-600: #4f46e5; | |
| --cyan-500: #06b6d4; | |
| --cyan-glow: rgba(6, 182, 212, 0.3); | |
| --rose-500: #f43f5e; | |
| --rose-glow: rgba(244, 63, 94, 0.3); | |
| --emerald-500: #10b981; | |
| --amber-500: #f59e0b; | |
| /* Text Colors */ | |
| --text-primary: #ffffff; | |
| --text-secondary: #94a3b8; | |
| --text-muted: #64748b; | |
| /* Border Colors */ | |
| --border-color: rgba(148, 163, 184, 0.1); | |
| --border-hover: rgba(139, 92, 246, 0.3); | |
| /* Transcript / Content Area Colors */ | |
| --transcript-bg: #ffffff; | |
| --transcript-header-bg: #f8fafc; | |
| --transcript-header-border: #e2e8f0; | |
| --transcript-content-bg: #fafbfc; | |
| --transcript-text: #1e293b; | |
| --transcript-muted: #94a3b8; | |
| --transcript-shadow: rgba(0, 0, 0, 0.2); | |
| /* Result Section Colors */ | |
| --result-bg: white; | |
| --result-border: #e2e8f0; | |
| --result-heading: #64748b; | |
| --result-text: #1e293b; | |
| --result-detail-text: #475569; | |
| --result-detail-border: #f1f5f9; | |
| --result-code-bg: #f8fafc; | |
| --result-soap-text: #334155; | |
| /* Action Button Colors */ | |
| --action-btn-bg: transparent; | |
| --action-btn-hover-bg: #f1f5f9; | |
| --action-btn-color: #94a3b8; | |
| --action-btn-hover-color: var(--indigo-600); | |
| /* Review Notice */ | |
| --notice-bg: linear-gradient(135deg, #fffbeb, #fef3c7); | |
| --notice-border: #fcd34d; | |
| --notice-strong: #92400e; | |
| --notice-text: #a16207; | |
| /* Footer */ | |
| --footer-bg: white; | |
| --footer-border: #e2e8f0; | |
| /* Live Transcript */ | |
| --live-text-bg: #f8fafc; | |
| /* Audio Section */ | |
| --audio-bg: linear-gradient(135deg, #f0fdf4, #dcfce7); | |
| --audio-border: rgba(16, 185, 129, 0.2); | |
| --audio-text: #166534; | |
| /* Text Input Indicator */ | |
| --text-ind-bg: linear-gradient(135deg, #eff6ff, #dbeafe); | |
| --text-ind-border: rgba(59, 130, 246, 0.2); | |
| --text-ind-text: #1e40af; | |
| /* Main Header */ | |
| --header-bg: rgba(15, 17, 26, 0.8); | |
| /* Spinner */ | |
| --spinner-border: #e2e8f0; | |
| --spinner-active: var(--indigo-600); | |
| --loading-text: #64748b; | |
| /* Logo */ | |
| --logo-gradient-start: #fff; | |
| --logo-gradient-end: #94a3b8; | |
| /* Empty State */ | |
| --empty-state-color: #94a3b8; | |
| /* Radius */ | |
| --radius-sm: 8px; | |
| --radius-md: 12px; | |
| --radius-lg: 16px; | |
| --radius-xl: 24px; | |
| --radius-2xl: 32px; | |
| --radius-full: 9999px; | |
| /* Transitions */ | |
| --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); | |
| --bounce: cubic-bezier(0.34, 1.56, 0.64, 1); | |
| } | |
| /* High Contrast Theme (WCAG 2.1 AAA) */ | |
| [data-theme="high-contrast"] { | |
| /* Pure Black & White Foundation */ | |
| --bg-primary: #000000; | |
| --bg-secondary: #000000; | |
| --bg-card: #000000; | |
| --bg-sidebar: #000000; | |
| /* High Visibility Accents (Yellow/Cyan) */ | |
| --violet-500: #ffff00; | |
| /* Yellow */ | |
| --violet-600: #ffff00; | |
| --violet-glow: transparent; | |
| --indigo-500: #00ffff; | |
| /* Cyan */ | |
| --indigo-600: #00ffff; | |
| --cyan-500: #00ffff; | |
| --cyan-glow: transparent; | |
| --rose-500: #ff00ff; | |
| /* Magenta */ | |
| --rose-glow: transparent; | |
| --emerald-500: #00ff00; | |
| /* Bright Green */ | |
| --amber-500: #ffff00; | |
| /* Max Contrast Text */ | |
| --text-primary: #ffffff; | |
| --text-secondary: #ffffff; | |
| --text-muted: #e0e0e0; | |
| /* Crisp Borders */ | |
| --border-color: #ffffff; | |
| --border-hover: #ffff00; | |
| /* Transcript / Content Area Colors */ | |
| --transcript-bg: #000000; | |
| --transcript-header-bg: #000000; | |
| --transcript-header-border: #ffffff; | |
| --transcript-content-bg: #000000; | |
| --transcript-text: #ffffff; | |
| --transcript-muted: #e0e0e0; | |
| --transcript-shadow: none; | |
| /* Result Section Colors */ | |
| --result-bg: #000000; | |
| --result-border: #ffffff; | |
| --result-heading: #ffffff; | |
| --result-text: #ffffff; | |
| --result-detail-text: #ffffff; | |
| --result-detail-border: #ffffff; | |
| --result-code-bg: #000000; | |
| --result-soap-text: #ffffff; | |
| /* Action Button Colors */ | |
| --action-btn-bg: transparent; | |
| --action-btn-hover-bg: #ffff00; | |
| --action-btn-color: #ffffff; | |
| --action-btn-hover-color: #000000; | |
| /* Review Notice */ | |
| --notice-bg: #000000; | |
| --notice-border: #ffff00; | |
| --notice-strong: #ffff00; | |
| --notice-text: #ffffff; | |
| /* Main Header */ | |
| --header-bg: #000000; | |
| /* Disable Shadows for clarity */ | |
| box-shadow: none ; | |
| } | |
| /* Utilities */ | |
| .hidden { | |
| display: none ; | |
| } | |
| /* ===================================================== | |
| BASE STYLES | |
| ===================================================== */ | |
| html, | |
| body { | |
| height: 100%; | |
| margin: 0; | |
| font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; | |
| background: var(--bg-primary); | |
| color: var(--text-secondary); | |
| line-height: 1.6; | |
| -webkit-font-smoothing: antialiased; | |
| } | |
| /* Global Focus Indicator for Accessibility */ | |
| :focus-visible { | |
| outline: 3px solid var(--violet-500) ; | |
| outline-offset: 2px ; | |
| transition: outline-color 0.2s ease; | |
| } | |
| [data-theme="high-contrast"] :focus-visible { | |
| outline: 4px solid var(--violet-500) ; | |
| outline-offset: 4px ; | |
| } | |
| /* Smooth theme transitions */ | |
| body, | |
| body .sidebar, | |
| body .main-header, | |
| body .voice-card, | |
| body .text-input-card, | |
| body .transcript-card, | |
| body .transcript-header, | |
| body .transcript-content, | |
| body .transcript-footer, | |
| body .settings-view, | |
| body .settings-card, | |
| body .result-section, | |
| body .soap-section-card, | |
| body .soap-card-header, | |
| body .soap-card-actions, | |
| body .action-card { | |
| transition: background-color 0.4s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease; | |
| } | |
| .app-container { | |
| display: flex; | |
| height: 100vh; | |
| overflow: hidden; | |
| } | |
| /* ===================================================== | |
| SIDEBAR | |
| ===================================================== */ | |
| .sidebar-overlay { | |
| position: fixed; | |
| inset: 0; | |
| background: rgba(0, 0, 0, 0.6); | |
| z-index: 40; | |
| opacity: 0; | |
| pointer-events: none; | |
| transition: opacity 0.3s; | |
| } | |
| .sidebar-overlay.active { | |
| opacity: 1; | |
| pointer-events: auto; | |
| } | |
| .sidebar { | |
| position: fixed; | |
| left: 0; | |
| top: 0; | |
| bottom: 0; | |
| width: 280px; | |
| background: var(--bg-sidebar); | |
| backdrop-filter: blur(20px); | |
| border-right: 1px solid var(--border-color); | |
| z-index: 50; | |
| display: flex; | |
| flex-direction: column; | |
| transform: translateX(-100%); | |
| transition: transform 0.3s ease; | |
| } | |
| .sidebar.open { | |
| transform: translateX(0); | |
| } | |
| @media (min-width: 1024px) { | |
| .sidebar { | |
| position: static; | |
| transform: translateX(0); | |
| } | |
| .sidebar-overlay { | |
| display: none; | |
| } | |
| } | |
| .sidebar-header { | |
| padding: 24px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| } | |
| .logo { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| } | |
| .logo-icon { | |
| width: 40px; | |
| height: 40px; | |
| border-radius: var(--radius-lg); | |
| background: linear-gradient(135deg, var(--violet-600), var(--indigo-600)); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| box-shadow: 0 8px 24px var(--violet-glow); | |
| } | |
| .logo-icon svg { | |
| width: 22px; | |
| height: 22px; | |
| color: white; | |
| } | |
| .logo-text { | |
| font-size: 1.25rem; | |
| font-weight: 700; | |
| background: linear-gradient(135deg, var(--logo-gradient-start), var(--logo-gradient-end)); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| background-clip: text; | |
| } | |
| .close-sidebar-btn { | |
| display: flex; | |
| padding: 8px; | |
| background: transparent; | |
| border: none; | |
| color: var(--text-muted); | |
| cursor: pointer; | |
| border-radius: var(--radius-sm); | |
| transition: var(--transition); | |
| } | |
| .close-sidebar-btn:hover { | |
| color: var(--text-primary); | |
| background: rgba(255, 255, 255, 0.05); | |
| } | |
| @media (min-width: 1024px) { | |
| .close-sidebar-btn { | |
| display: none; | |
| } | |
| } | |
| /* Sidebar Navigation */ | |
| .sidebar-nav { | |
| flex: 1; | |
| padding: 0 16px; | |
| overflow-y: auto; | |
| } | |
| .nav-label { | |
| font-size: 0.7rem; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.1em; | |
| color: var(--text-muted); | |
| padding: 0 16px; | |
| margin-bottom: 12px; | |
| } | |
| .nav-item { | |
| width: 100%; | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| padding: 12px 16px; | |
| background: transparent; | |
| border: 1px solid transparent; | |
| border-radius: var(--radius-lg); | |
| color: var(--text-muted); | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| margin-bottom: 4px; | |
| text-align: left; | |
| } | |
| .nav-item svg { | |
| width: 20px; | |
| height: 20px; | |
| flex-shrink: 0; | |
| } | |
| .nav-item:hover { | |
| background: rgba(255, 255, 255, 0.03); | |
| color: var(--text-primary); | |
| } | |
| .nav-item.active { | |
| background: rgba(139, 92, 246, 0.1); | |
| border-color: rgba(139, 92, 246, 0.2); | |
| color: var(--violet-500); | |
| } | |
| .nav-item.active svg { | |
| stroke-width: 2.5; | |
| } | |
| .nav-indicator { | |
| display: none; | |
| width: 6px; | |
| height: 6px; | |
| border-radius: 50%; | |
| background: var(--violet-500); | |
| margin-left: auto; | |
| box-shadow: 0 0 8px var(--violet-glow); | |
| } | |
| .nav-item.active .nav-indicator { | |
| display: block; | |
| } | |
| /* Recent Documents */ | |
| .recent-docs { | |
| margin-top: 8px; | |
| } | |
| .recent-doc-item { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| padding: 10px 12px; | |
| border-radius: var(--radius-md); | |
| cursor: pointer; | |
| transition: var(--transition); | |
| } | |
| .recent-doc-item:hover { | |
| background: rgba(255, 255, 255, 0.03); | |
| } | |
| .doc-icon { | |
| width: 32px; | |
| height: 32px; | |
| border-radius: var(--radius-sm); | |
| background: var(--bg-secondary); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| color: var(--text-muted); | |
| transition: var(--transition); | |
| } | |
| .recent-doc-item:hover .doc-icon { | |
| color: var(--indigo-500); | |
| } | |
| .doc-icon svg { | |
| width: 14px; | |
| height: 14px; | |
| } | |
| .doc-info { | |
| flex: 1; | |
| overflow: hidden; | |
| } | |
| .doc-title { | |
| font-size: 0.85rem; | |
| font-weight: 500; | |
| color: var(--text-secondary); | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| } | |
| .doc-date { | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| } | |
| /* Sidebar Footer */ | |
| .sidebar-footer { | |
| padding: 16px; | |
| border-top: 1px solid var(--border-color); | |
| } | |
| .user-card { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| padding: 12px; | |
| background: rgba(255, 255, 255, 0.02); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-lg); | |
| } | |
| .user-avatar { | |
| width: 40px; | |
| height: 40px; | |
| border-radius: 50%; | |
| background: linear-gradient(135deg, var(--rose-500), #ec4899); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| color: white; | |
| font-weight: 700; | |
| font-size: 0.9rem; | |
| } | |
| .user-info { | |
| flex: 1; | |
| } | |
| .user-name { | |
| font-size: 0.9rem; | |
| font-weight: 600; | |
| color: var(--text-primary); | |
| } | |
| .user-plan { | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| } | |
| /* ===================================================== | |
| MAIN CONTENT | |
| ===================================================== */ | |
| .main-content { | |
| flex: 1; | |
| min-width: 0; | |
| overflow-y: auto; | |
| -webkit-overflow-scrolling: touch; | |
| } | |
| /* View containers just hold content, parent scrolls */ | |
| .view-container { | |
| } | |
| /* Header — sticky so it stays visible while scrolling */ | |
| .main-header { | |
| position: sticky; | |
| top: 0; | |
| z-index: 30; | |
| height: 72px; | |
| padding: 0 24px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| border-bottom: 1px solid var(--border-color); | |
| background: var(--header-bg); | |
| backdrop-filter: blur(12px); | |
| } | |
| .header-left { | |
| display: flex; | |
| align-items: center; | |
| gap: 16px; | |
| } | |
| .menu-btn { | |
| display: flex; | |
| padding: 10px; | |
| background: transparent; | |
| border: none; | |
| color: var(--text-muted); | |
| cursor: pointer; | |
| border-radius: var(--radius-sm); | |
| transition: var(--transition); | |
| } | |
| .menu-btn:hover { | |
| background: rgba(255, 255, 255, 0.05); | |
| color: var(--text-primary); | |
| } | |
| .menu-btn svg { | |
| width: 24px; | |
| height: 24px; | |
| } | |
| @media (min-width: 1024px) { | |
| .menu-btn { | |
| display: none; | |
| } | |
| } | |
| .header-title h1 { | |
| font-size: 1.25rem; | |
| font-weight: 600; | |
| color: var(--text-primary); | |
| } | |
| .header-title p { | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| } | |
| .header-right { | |
| display: flex; | |
| align-items: center; | |
| gap: 16px; | |
| } | |
| .compliance-badge { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 8px 16px; | |
| background: rgba(245, 158, 11, 0.1); | |
| border: 1px solid rgba(245, 158, 11, 0.2); | |
| border-radius: var(--radius-full); | |
| color: var(--amber-500); | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| } | |
| .compliance-badge svg { | |
| width: 16px; | |
| height: 16px; | |
| } | |
| /* ===================================================== | |
| CONTENT GRID | |
| ===================================================== */ | |
| .content-grid { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 24px; | |
| padding: 24px; | |
| } | |
| @media (min-width: 1024px) { | |
| .content-grid { | |
| grid-template-columns: 1.2fr 1fr; | |
| padding: 32px; | |
| } | |
| } | |
| .voice-column { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 20px; | |
| } | |
| .transcript-column { | |
| min-height: 500px; | |
| } | |
| @media (min-width: 1024px) { | |
| .transcript-column { | |
| min-height: auto; | |
| } | |
| } | |
| /* ===================================================== | |
| VOICE CARD | |
| ===================================================== */ | |
| .voice-card { | |
| position: relative; | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-2xl); | |
| overflow: hidden; | |
| min-height: 380px; | |
| } | |
| .voice-card-glow { | |
| position: absolute; | |
| border-radius: 50%; | |
| filter: blur(80px); | |
| pointer-events: none; | |
| } | |
| .voice-card-glow.glow-1 { | |
| top: -50px; | |
| right: -50px; | |
| width: 300px; | |
| height: 300px; | |
| background: var(--violet-glow); | |
| } | |
| .voice-card-glow.glow-2 { | |
| bottom: -50px; | |
| left: -50px; | |
| width: 200px; | |
| height: 200px; | |
| background: var(--indigo-glow); | |
| } | |
| .voice-card-content { | |
| position: relative; | |
| padding: 40px; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| min-height: 380px; | |
| } | |
| .voice-card-header { | |
| text-align: center; | |
| margin-bottom: 32px; | |
| } | |
| .voice-card-header h2 { | |
| font-size: 1.75rem; | |
| font-weight: 700; | |
| color: var(--text-primary); | |
| margin-bottom: 8px; | |
| } | |
| .voice-card-header p { | |
| color: var(--text-muted); | |
| font-size: 0.95rem; | |
| } | |
| /* Waveform Visualizer */ | |
| .waveform-container { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 4px; | |
| height: 80px; | |
| width: 100%; | |
| max-width: 300px; | |
| margin-bottom: 32px; | |
| } | |
| .waveform-bar { | |
| width: 6px; | |
| height: 6px; | |
| background: linear-gradient(to top, var(--violet-500), var(--indigo-500)); | |
| border-radius: var(--radius-full); | |
| transition: height 0.15s ease; | |
| opacity: 0.3; | |
| } | |
| .waveform-container.recording .waveform-bar { | |
| opacity: 1; | |
| animation: waveform 0.8s ease-in-out infinite; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(1) { | |
| animation-delay: 0.0s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(2) { | |
| animation-delay: 0.05s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(3) { | |
| animation-delay: 0.1s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(4) { | |
| animation-delay: 0.15s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(5) { | |
| animation-delay: 0.2s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(6) { | |
| animation-delay: 0.25s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(7) { | |
| animation-delay: 0.3s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(8) { | |
| animation-delay: 0.35s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(9) { | |
| animation-delay: 0.4s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(10) { | |
| animation-delay: 0.45s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(11) { | |
| animation-delay: 0.5s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(12) { | |
| animation-delay: 0.55s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(13) { | |
| animation-delay: 0.6s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(14) { | |
| animation-delay: 0.65s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(15) { | |
| animation-delay: 0.7s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(16) { | |
| animation-delay: 0.75s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(17) { | |
| animation-delay: 0.8s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(18) { | |
| animation-delay: 0.85s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(19) { | |
| animation-delay: 0.9s; | |
| } | |
| .waveform-container.recording .waveform-bar:nth-child(20) { | |
| animation-delay: 0.95s; | |
| } | |
| @keyframes waveform { | |
| 0%, | |
| 100% { | |
| height: 8px; | |
| } | |
| 50% { | |
| height: 48px; | |
| } | |
| } | |
| /* Record Button */ | |
| .record-btn-wrapper { | |
| position: relative; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .record-ripple { | |
| position: absolute; | |
| width: 96px; | |
| height: 96px; | |
| border-radius: 50%; | |
| background: var(--violet-glow); | |
| opacity: 0; | |
| pointer-events: none; | |
| } | |
| .record-ripple.active { | |
| animation: ripple 1.5s ease-out infinite; | |
| } | |
| @keyframes ripple { | |
| 0% { | |
| transform: scale(1); | |
| opacity: 0.5; | |
| } | |
| 100% { | |
| transform: scale(1.8); | |
| opacity: 0; | |
| } | |
| } | |
| .record-btn { | |
| position: relative; | |
| z-index: 1; | |
| width: 88px; | |
| height: 88px; | |
| border-radius: 50%; | |
| border: none; | |
| background: linear-gradient(135deg, var(--violet-600), var(--indigo-600)); | |
| color: white; | |
| cursor: pointer; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| box-shadow: 0 8px 32px var(--violet-glow); | |
| transition: all 0.3s var(--bounce); | |
| } | |
| .record-btn:hover { | |
| transform: scale(1.05); | |
| box-shadow: 0 12px 40px var(--violet-glow); | |
| } | |
| .record-btn:active { | |
| transform: scale(0.98); | |
| } | |
| .record-btn.recording { | |
| background: linear-gradient(135deg, var(--rose-500), #e11d48); | |
| box-shadow: 0 8px 32px var(--rose-glow); | |
| animation: pulse-glow 2s ease-in-out infinite; | |
| } | |
| @keyframes pulse-glow { | |
| 0%, | |
| 100% { | |
| box-shadow: 0 8px 32px var(--rose-glow); | |
| } | |
| 50% { | |
| box-shadow: 0 8px 48px rgba(244, 63, 94, 0.5); | |
| } | |
| } | |
| .record-btn svg { | |
| width: 32px; | |
| height: 32px; | |
| } | |
| .mic-icon, | |
| .stop-icon { | |
| transition: opacity 0.2s, transform 0.2s; | |
| } | |
| .hidden { | |
| display: none ; | |
| } | |
| /* Duration Display */ | |
| .duration-display { | |
| margin-top: 24px; | |
| padding: 8px 20px; | |
| background: rgba(255, 255, 255, 0.05); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-full); | |
| } | |
| .duration-display span { | |
| font-family: 'SF Mono', 'Fira Code', monospace; | |
| font-size: 1rem; | |
| font-weight: 500; | |
| color: var(--violet-500); | |
| } | |
| /* ===================================================== | |
| TEXT INPUT CARD | |
| ===================================================== */ | |
| .text-input-card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-xl); | |
| padding: 24px; | |
| } | |
| .divider-line { | |
| display: flex; | |
| align-items: center; | |
| margin-bottom: 16px; | |
| } | |
| .divider-line::before, | |
| .divider-line::after { | |
| content: ''; | |
| flex: 1; | |
| height: 1px; | |
| background: var(--border-color); | |
| } | |
| .divider-line span { | |
| padding: 0 16px; | |
| font-size: 0.7rem; | |
| font-weight: 600; | |
| letter-spacing: 0.1em; | |
| color: var(--text-muted); | |
| } | |
| .text-input { | |
| width: 100%; | |
| padding: 16px; | |
| background: var(--bg-secondary); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-md); | |
| color: var(--text-primary); | |
| font-family: inherit; | |
| font-size: 0.95rem; | |
| resize: vertical; | |
| transition: var(--transition); | |
| } | |
| .text-input:focus { | |
| outline: none; | |
| border-color: var(--violet-500); | |
| box-shadow: 0 0 0 3px var(--violet-glow); | |
| } | |
| .text-input::placeholder { | |
| color: var(--text-muted); | |
| } | |
| /* ===================================================== | |
| IMAGE UPLOAD CARD | |
| ===================================================== */ | |
| .image-upload-card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-xl); | |
| padding: 24px; | |
| } | |
| .image-drop-zone { | |
| width: 100%; | |
| min-height: 140px; | |
| border: 2px dashed var(--border-color); | |
| border-radius: var(--radius-md); | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 24px; | |
| background: rgba(255, 255, 255, 0.02); | |
| cursor: pointer; | |
| transition: var(--transition); | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .image-drop-zone:hover, | |
| .image-drop-zone.drag-over { | |
| border-color: var(--violet-500); | |
| background: rgba(139, 92, 246, 0.05); | |
| } | |
| .drop-zone-content { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| text-align: center; | |
| gap: 12px; | |
| } | |
| .drop-zone-content svg { | |
| width: 32px; | |
| height: 32px; | |
| color: var(--text-muted); | |
| } | |
| .image-drop-zone:hover .drop-zone-content svg { | |
| color: var(--violet-500); | |
| } | |
| .drop-zone-content p { | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| color: var(--text-primary); | |
| } | |
| .drop-zone-content p span { | |
| font-size: 0.8rem; | |
| font-weight: 400; | |
| color: var(--text-muted); | |
| } | |
| .file-input-hidden { | |
| position: absolute; | |
| width: 100%; | |
| height: 100%; | |
| top: 0; | |
| left: 0; | |
| opacity: 0; | |
| cursor: pointer; | |
| } | |
| /* Image Preview */ | |
| .image-preview { | |
| width: 100%; | |
| display: flex; | |
| align-items: center; | |
| gap: 16px; | |
| padding: 12px; | |
| background: var(--bg-secondary); | |
| border-radius: var(--radius-md); | |
| border: 1px solid var(--border-color); | |
| position: relative; | |
| z-index: 2; | |
| /* Above file input */ | |
| } | |
| .preview-wrapper { | |
| position: relative; | |
| width: 64px; | |
| height: 64px; | |
| border-radius: var(--radius-sm); | |
| overflow: hidden; | |
| flex-shrink: 0; | |
| border: 1px solid rgba(255, 255, 255, 0.1); | |
| } | |
| #imagePreview { | |
| width: 100%; | |
| height: 100%; | |
| object-fit: cover; | |
| } | |
| .remove-image-btn { | |
| position: absolute; | |
| top: -6px; | |
| right: -6px; | |
| width: 24px; | |
| height: 24px; | |
| border-radius: 50%; | |
| background: var(--rose-500); | |
| color: white; | |
| border: 2px solid var(--bg-secondary); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| cursor: pointer; | |
| opacity: 0; | |
| transition: var(--transition); | |
| transform: scale(0.8); | |
| } | |
| .preview-wrapper:hover .remove-image-btn { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| .remove-image-btn svg { | |
| width: 14px; | |
| height: 14px; | |
| } | |
| .image-details { | |
| flex: 1; | |
| overflow: hidden; | |
| } | |
| .image-details .filename { | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| color: var(--text-primary); | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| margin-bottom: 4px; | |
| } | |
| .image-details .filesize { | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| } | |
| /* Analyzing State */ | |
| .image-analyzing { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 12px; | |
| padding: 16px; | |
| } | |
| .spinner.small { | |
| width: 24px; | |
| height: 24px; | |
| border-width: 3px; | |
| } | |
| .image-analyzing p { | |
| font-size: 0.85rem; | |
| color: var(--violet-500); | |
| font-weight: 500; | |
| animation: pulse 1.5s infinite; | |
| } | |
| /* Visual Findings Results Card */ | |
| .soap-label-vi { | |
| background: rgba(16, 185, 129, 0.1); | |
| color: var(--emerald-500); | |
| border: 1px solid rgba(16, 185, 129, 0.2); | |
| } | |
| .image-findings-thumbnail-container { | |
| margin: 0 20px 20px; | |
| padding: 12px; | |
| background: var(--result-code-bg); | |
| border: 1px solid var(--result-border); | |
| border-radius: var(--radius-md); | |
| display: none; | |
| } | |
| .image-findings-thumbnail-container.active { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 16px; | |
| } | |
| .findings-thumbnail { | |
| width: 80px; | |
| height: 80px; | |
| border-radius: var(--radius-sm); | |
| object-fit: cover; | |
| border: 2px solid white; | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); | |
| flex-shrink: 0; | |
| } | |
| .findings-meta { | |
| flex: 1; | |
| font-size: 0.85rem; | |
| } | |
| .findings-meta strong { | |
| color: var(--result-text); | |
| display: block; | |
| margin-bottom: 4px; | |
| } | |
| .findings-meta span { | |
| color: var(--result-detail-text); | |
| } | |
| /* ===================================================== | |
| ACTION CARDS | |
| ===================================================== */ | |
| .action-cards { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 16px; | |
| } | |
| .action-card { | |
| background: rgba(255, 255, 255, 0.02); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-xl); | |
| padding: 20px; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| } | |
| .action-card:hover { | |
| border-color: var(--border-hover); | |
| background: rgba(255, 255, 255, 0.03); | |
| } | |
| .action-icon { | |
| width: 44px; | |
| height: 44px; | |
| border-radius: var(--radius-lg); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| margin-bottom: 12px; | |
| transition: transform 0.3s var(--bounce); | |
| } | |
| .action-card:hover .action-icon { | |
| transform: scale(1.1); | |
| } | |
| .action-icon.violet { | |
| background: rgba(139, 92, 246, 0.1); | |
| color: var(--violet-500); | |
| } | |
| .action-icon.cyan { | |
| background: rgba(6, 182, 212, 0.1); | |
| color: var(--cyan-500); | |
| } | |
| .action-icon svg { | |
| width: 22px; | |
| height: 22px; | |
| } | |
| .action-text h3 { | |
| font-size: 0.9rem; | |
| font-weight: 600; | |
| color: var(--text-primary); | |
| margin-bottom: 4px; | |
| } | |
| .action-text p { | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| } | |
| /* ===================================================== | |
| SUBMIT BUTTON | |
| ===================================================== */ | |
| .submit-btn { | |
| width: 100%; | |
| padding: 18px 32px; | |
| background: linear-gradient(135deg, var(--violet-600), var(--indigo-600)); | |
| border: none; | |
| border-radius: var(--radius-xl); | |
| color: white; | |
| font-size: 1rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 12px; | |
| box-shadow: 0 8px 24px var(--violet-glow); | |
| transition: all 0.3s var(--bounce); | |
| } | |
| .submit-btn:hover:not(:disabled) { | |
| transform: translateY(-2px); | |
| box-shadow: 0 12px 32px var(--violet-glow); | |
| } | |
| .submit-btn:disabled { | |
| opacity: 0.5; | |
| cursor: not-allowed; | |
| filter: grayscale(50%); | |
| } | |
| .submit-btn svg { | |
| width: 20px; | |
| height: 20px; | |
| } | |
| /* ===================================================== | |
| TRANSCRIPT CARD | |
| ===================================================== */ | |
| .transcript-card { | |
| height: 100%; | |
| display: flex; | |
| flex-direction: column; | |
| background: var(--transcript-bg); | |
| border-radius: var(--radius-2xl); | |
| overflow: hidden; | |
| box-shadow: 0 24px 48px var(--transcript-shadow); | |
| } | |
| .transcript-header { | |
| padding: 20px 24px; | |
| background: var(--transcript-header-bg); | |
| border-bottom: 1px solid var(--transcript-header-border); | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| } | |
| .transcript-status { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| } | |
| .live-indicator { | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background: var(--emerald-500); | |
| animation: pulse-indicator 2s ease-in-out infinite; | |
| } | |
| @keyframes pulse-indicator { | |
| 0%, | |
| 100% { | |
| opacity: 1; | |
| } | |
| 50% { | |
| opacity: 0.4; | |
| } | |
| } | |
| .transcript-status h3 { | |
| font-size: 1rem; | |
| font-weight: 600; | |
| color: var(--transcript-text); | |
| } | |
| .transcript-actions { | |
| display: flex; | |
| gap: 8px; | |
| } | |
| .action-btn { | |
| padding: 8px; | |
| background: var(--action-btn-bg); | |
| border: none; | |
| border-radius: var(--radius-sm); | |
| color: var(--action-btn-color); | |
| cursor: pointer; | |
| transition: var(--transition); | |
| } | |
| .action-btn:hover { | |
| background: var(--action-btn-hover-bg); | |
| color: var(--action-btn-hover-color); | |
| } | |
| .action-btn svg { | |
| width: 18px; | |
| height: 18px; | |
| } | |
| /* Transcript Content */ | |
| .transcript-content { | |
| flex: 1; | |
| padding: 24px; | |
| overflow-y: auto; | |
| background: var(--transcript-content-bg); | |
| } | |
| /* Empty State */ | |
| .empty-state { | |
| height: 100%; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| color: var(--empty-state-color); | |
| text-align: center; | |
| } | |
| .empty-state svg { | |
| width: 64px; | |
| height: 64px; | |
| margin-bottom: 16px; | |
| opacity: 0.3; | |
| } | |
| .empty-state p { | |
| font-size: 0.95rem; | |
| } | |
| /* Loading State */ | |
| /* Follow-up Questions */ | |
| .followup-state { | |
| padding: 24px; | |
| } | |
| .followup-header { | |
| text-align: center; | |
| margin-bottom: 20px; | |
| } | |
| .followup-header svg { | |
| color: var(--violet-500); | |
| margin-bottom: 8px; | |
| } | |
| .followup-header h4 { | |
| color: var(--text-primary); | |
| font-size: 1.1rem; | |
| margin-bottom: 4px; | |
| } | |
| .followup-subtitle { | |
| color: var(--text-muted); | |
| font-size: 0.85rem; | |
| } | |
| .followup-questions { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| margin-bottom: 20px; | |
| } | |
| .followup-question-item { | |
| background: var(--bg-secondary); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-xl, 12px); | |
| padding: 16px; | |
| } | |
| .followup-question-item label { | |
| display: block; | |
| color: var(--text-primary); | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| margin-bottom: 8px; | |
| } | |
| .followup-question-item textarea { | |
| width: 100%; | |
| min-height: 60px; | |
| padding: 10px 12px; | |
| background: var(--bg-card); | |
| color: var(--text-primary); | |
| border: 1px solid var(--border-color); | |
| border-radius: 8px; | |
| font-family: inherit; | |
| font-size: 0.85rem; | |
| resize: vertical; | |
| } | |
| .followup-question-item textarea:focus { | |
| outline: none; | |
| border-color: var(--violet-500); | |
| } | |
| .followup-actions { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 10px; | |
| } | |
| .followup-skip-btn { | |
| padding: 12px; | |
| background: transparent; | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-xl, 12px); | |
| color: var(--text-muted); | |
| font-size: 0.85rem; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| } | |
| .followup-skip-btn:hover { | |
| border-color: var(--text-secondary); | |
| color: var(--text-secondary); | |
| } | |
| .loading-state { | |
| height: 100%; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| color: var(--loading-text); | |
| } | |
| /* Queue Banner */ | |
| .queue-banner { | |
| margin-top: 16px; | |
| padding: 12px 20px; | |
| background: var(--bg-secondary, #1a1d2e); | |
| border: 1px solid var(--accent-primary, #6c63ff); | |
| border-radius: 10px; | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| animation: queuePulse 2s ease-in-out infinite; | |
| } | |
| .queue-banner.hidden { | |
| display: none; | |
| } | |
| .queue-icon { | |
| color: var(--accent-primary, #6c63ff); | |
| flex-shrink: 0; | |
| } | |
| .queue-info { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 2px; | |
| font-size: 0.85rem; | |
| } | |
| .queue-info #queuePosition { | |
| font-weight: 600; | |
| color: var(--text-primary, #e2e8f0); | |
| } | |
| .queue-info #queueWait { | |
| color: var(--text-secondary, #94a3b8); | |
| font-size: 0.8rem; | |
| } | |
| @keyframes queuePulse { | |
| 0%, 100% { border-color: var(--accent-primary, #6c63ff); } | |
| 50% { border-color: var(--accent-secondary, #a78bfa); } | |
| } | |
| /* Rate Limit Toast */ | |
| .rate-limit-toast { | |
| position: fixed; | |
| top: 20px; | |
| right: 20px; | |
| padding: 14px 20px; | |
| background: #dc2626; | |
| color: white; | |
| border-radius: 10px; | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| z-index: 9999; | |
| animation: slideInRight 0.3s ease-out; | |
| max-width: 400px; | |
| } | |
| @keyframes slideInRight { | |
| from { transform: translateX(100%); opacity: 0; } | |
| to { transform: translateX(0); opacity: 1; } | |
| } | |
| /* ===================================================== | |
| MONITORING DASHBOARD | |
| ===================================================== */ | |
| .monitoring-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 20px; | |
| } | |
| .monitoring-header .section-title { | |
| font-size: 1.3rem; | |
| font-weight: 700; | |
| color: var(--text-primary, #e2e8f0); | |
| } | |
| .monitoring-actions { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| } | |
| .uptime-badge { | |
| font-size: 0.8rem; | |
| padding: 4px 12px; | |
| background: var(--bg-secondary, #1a1d2e); | |
| border: 1px solid var(--border-color, #2a2d3e); | |
| border-radius: 20px; | |
| color: var(--text-secondary, #94a3b8); | |
| } | |
| .btn-icon { | |
| background: none; | |
| border: 1px solid var(--border-color, #2a2d3e); | |
| border-radius: 8px; | |
| padding: 6px; | |
| cursor: pointer; | |
| color: var(--text-secondary, #94a3b8); | |
| transition: color 0.2s, border-color 0.2s; | |
| } | |
| .btn-icon:hover { | |
| color: var(--accent-primary, #6c63ff); | |
| border-color: var(--accent-primary, #6c63ff); | |
| } | |
| .monitoring-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); | |
| gap: 14px; | |
| } | |
| .monitor-card { | |
| background: var(--bg-card, #161926); | |
| border: 1px solid var(--border-color, #2a2d3e); | |
| border-radius: 12px; | |
| padding: 16px; | |
| transition: border-color 0.2s; | |
| } | |
| .monitor-card.wide { | |
| grid-column: span 2; | |
| } | |
| .monitor-card.alert-warning { | |
| border-color: #f59e0b; | |
| } | |
| .monitor-card.alert-critical { | |
| border-color: #ef4444; | |
| } | |
| .monitor-card-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 12px; | |
| } | |
| .monitor-model-name { | |
| font-weight: 600; | |
| font-size: 0.95rem; | |
| color: var(--text-primary, #e2e8f0); | |
| } | |
| .monitor-status-dot { | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 50%; | |
| background: #6b7280; | |
| } | |
| .monitor-status-dot.ready { background: #22c55e; } | |
| .monitor-status-dot.not-ready { background: #ef4444; } | |
| .monitor-stats { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| .stat-row { | |
| display: flex; | |
| justify-content: space-between; | |
| font-size: 0.83rem; | |
| } | |
| .stat-row span:first-child { | |
| color: var(--text-secondary, #94a3b8); | |
| } | |
| .stat-row span:last-child { | |
| color: var(--text-primary, #e2e8f0); | |
| font-weight: 500; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| /* Alerts Banner */ | |
| .alerts-banner { | |
| margin-bottom: 16px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| .alerts-banner.hidden { display: none; } | |
| .alert-item { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| padding: 10px 14px; | |
| border-radius: 8px; | |
| font-size: 0.85rem; | |
| font-weight: 500; | |
| } | |
| .alert-item.warning { | |
| background: rgba(245, 158, 11, 0.12); | |
| border: 1px solid rgba(245, 158, 11, 0.4); | |
| color: #fbbf24; | |
| } | |
| .alert-item.critical { | |
| background: rgba(239, 68, 68, 0.12); | |
| border: 1px solid rgba(239, 68, 68, 0.4); | |
| color: #f87171; | |
| } | |
| .alert-severity { | |
| font-size: 0.7rem; | |
| text-transform: uppercase; | |
| font-weight: 700; | |
| padding: 2px 6px; | |
| border-radius: 4px; | |
| } | |
| .alert-item.warning .alert-severity { background: rgba(245, 158, 11, 0.25); } | |
| .alert-item.critical .alert-severity { background: rgba(239, 68, 68, 0.25); } | |
| @media (max-width: 768px) { | |
| .monitoring-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .monitor-card.wide { | |
| grid-column: span 1; | |
| } | |
| } | |
| .spinner { | |
| width: 48px; | |
| height: 48px; | |
| border: 3px solid var(--spinner-border); | |
| border-top-color: var(--spinner-active); | |
| border-radius: 50%; | |
| animation: spin 1s linear infinite; | |
| margin-bottom: 16px; | |
| } | |
| @keyframes spin { | |
| to { | |
| transform: rotate(360deg); | |
| } | |
| } | |
| /* ===================================================== | |
| LIVE TRANSCRIPT STATE (Streaming) | |
| ===================================================== */ | |
| .live-transcript-state { | |
| padding: 8px 0; | |
| min-height: 200px; | |
| } | |
| .live-badge { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| padding: 4px 12px; | |
| background: rgba(239, 68, 68, 0.1); | |
| border: 1px solid rgba(239, 68, 68, 0.3); | |
| border-radius: var(--radius-full); | |
| font-size: 0.7rem; | |
| font-weight: 700; | |
| color: #ef4444; | |
| letter-spacing: 0.1em; | |
| margin-bottom: 16px; | |
| } | |
| .live-dot { | |
| width: 8px; | |
| height: 8px; | |
| background: #ef4444; | |
| border-radius: 50%; | |
| animation: live-pulse 1.5s ease-in-out infinite; | |
| } | |
| @keyframes live-pulse { | |
| 0%, | |
| 100% { | |
| opacity: 1; | |
| box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.7); | |
| } | |
| 50% { | |
| opacity: 0.7; | |
| box-shadow: 0 0 0 6px rgba(239, 68, 68, 0); | |
| } | |
| } | |
| .live-transcript-text { | |
| font-size: 1.05rem; | |
| line-height: 1.8; | |
| color: var(--transcript-text); | |
| padding: 16px; | |
| background: var(--live-text-bg); | |
| border-radius: var(--radius-md); | |
| border-left: 3px solid #ef4444; | |
| min-height: 120px; | |
| position: relative; | |
| word-wrap: break-word; | |
| } | |
| .live-transcript-text .live-placeholder { | |
| color: var(--transcript-muted); | |
| font-style: italic; | |
| } | |
| .live-transcript-text .live-word { | |
| animation: wordFadeIn 0.3s ease-out forwards; | |
| opacity: 0; | |
| } | |
| @keyframes wordFadeIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(4px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| .live-cursor { | |
| display: inline-block; | |
| width: 2px; | |
| height: 1.1em; | |
| background: #ef4444; | |
| margin-left: 2px; | |
| vertical-align: text-bottom; | |
| animation: cursorBlink 1s step-end infinite; | |
| } | |
| @keyframes cursorBlink { | |
| 0%, | |
| 100% { | |
| opacity: 1; | |
| } | |
| 50% { | |
| opacity: 0; | |
| } | |
| } | |
| /* Results Container */ | |
| .results-container { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 20px; | |
| } | |
| /* Review Notice */ | |
| .review-notice { | |
| display: flex; | |
| gap: 12px; | |
| padding: 16px; | |
| background: var(--notice-bg); | |
| border: 1px solid var(--notice-border); | |
| border-radius: var(--radius-md); | |
| } | |
| .review-notice svg { | |
| width: 20px; | |
| height: 20px; | |
| color: var(--amber-500); | |
| flex-shrink: 0; | |
| margin-top: 2px; | |
| } | |
| .review-notice strong { | |
| display: block; | |
| color: var(--notice-strong); | |
| font-weight: 600; | |
| margin-bottom: 4px; | |
| } | |
| .review-notice p { | |
| font-size: 0.85rem; | |
| color: var(--notice-text); | |
| } | |
| .compliance-meta-notice { | |
| margin-top: 8px; | |
| font-size: 0.78rem; | |
| line-height: 1.45; | |
| opacity: 0.9; | |
| } | |
| .reliability-legend { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 6px; | |
| margin-top: 10px; | |
| } | |
| /* Result Sections */ | |
| .result-section { | |
| padding: 16px; | |
| background: var(--result-bg); | |
| border: 1px solid var(--result-border); | |
| border-radius: var(--radius-md); | |
| } | |
| .result-section h4 { | |
| font-size: 0.85rem; | |
| font-weight: 600; | |
| color: var(--result-heading); | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| margin-bottom: 8px; | |
| } | |
| .transcription-text { | |
| font-size: 1rem; | |
| line-height: 1.7; | |
| color: var(--result-text); | |
| padding: 16px; | |
| background: var(--result-code-bg); | |
| border-radius: var(--radius-sm); | |
| border-left: 3px solid var(--cyan-500); | |
| } | |
| .chief-complaint { | |
| font-size: 1.1rem; | |
| font-weight: 600; | |
| color: var(--result-text); | |
| } | |
| .symptom-details ul { | |
| list-style: none; | |
| padding: 0; | |
| } | |
| .symptom-details li { | |
| padding: 8px 0; | |
| border-bottom: 1px solid var(--result-detail-border); | |
| color: var(--result-detail-text); | |
| } | |
| .symptom-details li:last-child { | |
| border-bottom: none; | |
| } | |
| .symptom-details strong { | |
| color: var(--result-text); | |
| } | |
| .confidence-list { | |
| list-style: none; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| .confidence-row { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: flex-start; | |
| gap: 12px; | |
| padding: 10px 0; | |
| border-bottom: 1px solid var(--result-detail-border); | |
| } | |
| .confidence-row:last-child { | |
| border-bottom: none; | |
| } | |
| .confidence-field { | |
| flex: 1; | |
| color: var(--result-detail-text); | |
| line-height: 1.45; | |
| } | |
| .confidence-field strong { | |
| color: var(--result-text); | |
| } | |
| .confidence-pill { | |
| display: inline-flex; | |
| align-items: center; | |
| white-space: nowrap; | |
| border-radius: var(--radius-full); | |
| padding: 4px 10px; | |
| font-size: 0.68rem; | |
| font-weight: 700; | |
| letter-spacing: 0.02em; | |
| border: 1px solid transparent; | |
| } | |
| .confidence-green { | |
| background: rgba(16, 185, 129, 0.18); | |
| color: #10b981; | |
| border-color: rgba(16, 185, 129, 0.32); | |
| } | |
| .confidence-yellow { | |
| background: rgba(245, 158, 11, 0.18); | |
| color: #f59e0b; | |
| border-color: rgba(245, 158, 11, 0.32); | |
| } | |
| .confidence-red { | |
| background: rgba(239, 68, 68, 0.18); | |
| color: #ef4444; | |
| border-color: rgba(239, 68, 68, 0.32); | |
| } | |
| .soap-note { | |
| padding: 16px; | |
| background: var(--result-code-bg); | |
| border-radius: var(--radius-sm); | |
| border-left: 3px solid var(--emerald-500); | |
| white-space: pre-wrap; | |
| line-height: 1.8; | |
| color: var(--result-soap-text); | |
| } | |
| /* Audio Playback */ | |
| .audio-playback-section { | |
| margin-top: 16px; | |
| padding: 16px; | |
| background: var(--audio-bg); | |
| border-radius: var(--radius-md); | |
| border: 1px solid var(--audio-border); | |
| } | |
| .audio-playback-header { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| margin-bottom: 12px; | |
| color: var(--audio-text); | |
| font-weight: 600; | |
| font-size: 0.9rem; | |
| } | |
| .audio-playback-header svg { | |
| width: 18px; | |
| height: 18px; | |
| } | |
| .audio-player { | |
| width: 100%; | |
| height: 40px; | |
| border-radius: var(--radius-sm); | |
| } | |
| /* Text Input Indicator */ | |
| .text-input-indicator { | |
| margin-top: 16px; | |
| padding: 12px 16px; | |
| background: var(--text-ind-bg); | |
| border-radius: var(--radius-md); | |
| border: 1px solid var(--text-ind-border); | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| color: var(--text-ind-text); | |
| font-weight: 500; | |
| font-size: 0.9rem; | |
| } | |
| .text-input-indicator svg { | |
| width: 18px; | |
| height: 18px; | |
| } | |
| /* Badges */ | |
| .badge { | |
| padding: 4px 10px; | |
| border-radius: var(--radius-full); | |
| font-size: 0.65rem; | |
| font-weight: 700; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| margin-left: auto; | |
| } | |
| .badge.success { | |
| background: var(--emerald-500); | |
| color: white; | |
| } | |
| .badge.info { | |
| background: #3b82f6; | |
| color: white; | |
| } | |
| /* Transcript Footer */ | |
| .transcript-footer { | |
| padding: 16px 24px; | |
| background: var(--footer-bg); | |
| border-top: 1px solid var(--footer-border); | |
| } | |
| .disclaimer { | |
| font-size: 0.75rem; | |
| color: var(--transcript-muted); | |
| text-align: center; | |
| } | |
| /* ===================================================== | |
| RESPONSIVE | |
| ===================================================== */ | |
| @media (max-width: 640px) { | |
| .content-grid { | |
| padding: 16px; | |
| } | |
| .voice-card-content { | |
| padding: 24px; | |
| } | |
| .voice-card-header h2 { | |
| font-size: 1.5rem; | |
| } | |
| .action-cards { | |
| grid-template-columns: 1fr; | |
| } | |
| .compliance-badge span { | |
| display: none; | |
| } | |
| } | |
| /* ===================================================== | |
| SETTINGS DASHBOARD ("NEURAL CONFIG") | |
| ===================================================== */ | |
| .settings-view { | |
| padding: 32px; | |
| height: 100%; | |
| overflow-y: auto; | |
| background: var(--bg-primary); | |
| } | |
| .settings-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| margin-bottom: 32px; | |
| } | |
| .settings-header h2 { | |
| font-size: 1.75rem; | |
| font-weight: 700; | |
| color: var(--text-primary); | |
| } | |
| .neural-badge { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 6px 16px; | |
| background: rgba(16, 185, 129, 0.1); | |
| border: 1px solid rgba(16, 185, 129, 0.2); | |
| border-radius: var(--radius-full); | |
| color: var(--emerald-500); | |
| font-size: 0.75rem; | |
| font-weight: 700; | |
| letter-spacing: 0.1em; | |
| } | |
| .pulse-dot { | |
| width: 8px; | |
| height: 8px; | |
| background: var(--emerald-500); | |
| border-radius: 50%; | |
| box-shadow: 0 0 12px var(--emerald-500); | |
| animation: pulse-dot 2s infinite; | |
| } | |
| @keyframes pulse-dot { | |
| 0% { | |
| transform: scale(0.95); | |
| opacity: 0.7; | |
| } | |
| 50% { | |
| transform: scale(1.2); | |
| opacity: 1; | |
| box-shadow: 0 0 20px var(--emerald-500); | |
| } | |
| 100% { | |
| transform: scale(0.95); | |
| opacity: 0.7; | |
| } | |
| } | |
| /* Settings Grid */ | |
| .settings-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); | |
| gap: 24px; | |
| } | |
| .settings-card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-xl); | |
| padding: 24px; | |
| transition: var(--transition); | |
| } | |
| .settings-card:hover { | |
| border-color: var(--violet-500); | |
| box-shadow: 0 0 32px rgba(139, 92, 246, 0.05); | |
| } | |
| .settings-card.full-width { | |
| grid-column: 1 / -1; | |
| } | |
| .settings-card h3 { | |
| font-size: 1rem; | |
| font-weight: 600; | |
| color: var(--text-secondary); | |
| margin-bottom: 20px; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .auth-status-text { | |
| margin-bottom: 16px; | |
| font-size: 0.85rem; | |
| color: var(--text-muted); | |
| } | |
| .auth-login-form { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); | |
| gap: 12px; | |
| align-items: end; | |
| } | |
| .auth-field { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 6px; | |
| } | |
| .auth-field label { | |
| font-size: 0.75rem; | |
| letter-spacing: 0.04em; | |
| text-transform: uppercase; | |
| color: var(--text-muted); | |
| } | |
| .auth-field input { | |
| width: 100%; | |
| padding: 10px 12px; | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-md); | |
| background: var(--bg-secondary); | |
| color: var(--text-primary); | |
| font-size: 0.9rem; | |
| } | |
| .auth-field input:focus { | |
| outline: none; | |
| border-color: var(--violet-500); | |
| box-shadow: 0 0 0 3px rgba(139, 92, 246, 0.18); | |
| } | |
| .auth-actions { | |
| display: flex; | |
| gap: 8px; | |
| flex-wrap: wrap; | |
| } | |
| .auth-btn { | |
| padding: 10px 14px; | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-md); | |
| background: var(--bg-secondary); | |
| color: var(--text-primary); | |
| font-size: 0.85rem; | |
| font-weight: 600; | |
| } | |
| .auth-btn.primary { | |
| background: var(--violet-500); | |
| border-color: var(--violet-500); | |
| color: #fff; | |
| } | |
| .auth-btn:hover { | |
| opacity: 0.92; | |
| } | |
| .auth-role-hint { | |
| margin-top: 12px; | |
| font-size: 0.78rem; | |
| color: var(--text-muted); | |
| } | |
| @media (max-width: 640px) { | |
| .auth-login-form { | |
| grid-template-columns: 1fr; | |
| } | |
| } | |
| /* Theme Matrix */ | |
| .theme-options { | |
| display: flex; | |
| gap: 20px; | |
| flex-wrap: wrap; | |
| } | |
| .theme-card { | |
| flex: 1; | |
| min-width: 140px; | |
| background: rgba(255, 255, 255, 0.03); | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-lg); | |
| padding: 16px; | |
| cursor: pointer; | |
| text-align: center; | |
| transition: var(--transition); | |
| } | |
| .theme-card:hover { | |
| background: rgba(255, 255, 255, 0.05); | |
| transform: translateY(-2px); | |
| } | |
| .theme-card.active { | |
| border-color: var(--violet-500); | |
| background: rgba(139, 92, 246, 0.1); | |
| } | |
| .theme-preview { | |
| height: 60px; | |
| border-radius: var(--radius-md); | |
| margin-bottom: 12px; | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); | |
| } | |
| .theme-preview.glass { | |
| background: linear-gradient(135deg, #1a1d2e 0%, #0f111a 100%); | |
| border: 1px solid rgba(139, 92, 246, 0.3); | |
| } | |
| .theme-preview.neon { | |
| background: #000; | |
| border: 1px solid #ff00ff; | |
| box-shadow: 0 0 12px rgba(255, 0, 255, 0.4); | |
| } | |
| .theme-preview.midnight { | |
| background: #000; | |
| border: 1px solid #333; | |
| } | |
| .theme-preview.light { | |
| background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%); | |
| border: 1px solid rgba(99, 102, 241, 0.3); | |
| } | |
| .theme-preview.aurora { | |
| background: linear-gradient(135deg, #1a1525 0%, #2d1b3d 50%, #1a1525 100%); | |
| border: 1px solid rgba(251, 146, 60, 0.4); | |
| box-shadow: 0 0 12px rgba(251, 146, 60, 0.2); | |
| } | |
| .theme-card span { | |
| font-size: 0.85rem; | |
| font-weight: 500; | |
| color: var(--text-primary); | |
| } | |
| /* Sliders */ | |
| .slider-group { | |
| margin-bottom: 24px; | |
| } | |
| .slider-group:last-child { | |
| margin-bottom: 0; | |
| } | |
| .slider-group label { | |
| display: flex; | |
| justify-content: space-between; | |
| margin-bottom: 12px; | |
| font-size: 0.9rem; | |
| color: var(--text-secondary); | |
| } | |
| .value-display { | |
| color: var(--violet-500); | |
| font-family: monospace; | |
| font-weight: 600; | |
| } | |
| .neural-slider { | |
| -webkit-appearance: none; | |
| appearance: none; | |
| width: 100%; | |
| height: 6px; | |
| background: rgba(255, 255, 255, 0.1); | |
| border-radius: var(--radius-full); | |
| outline: none; | |
| } | |
| .neural-slider::-webkit-slider-thumb { | |
| -webkit-appearance: none; | |
| width: 20px; | |
| height: 20px; | |
| background: var(--violet-500); | |
| border-radius: 50%; | |
| cursor: pointer; | |
| box-shadow: 0 0 16px var(--violet-500); | |
| transition: transform 0.2s; | |
| } | |
| .neural-slider::-webkit-slider-thumb:hover { | |
| transform: scale(1.2); | |
| } | |
| /* Neural Graph */ | |
| .neural-graph-container { | |
| height: 140px; | |
| background: rgba(0, 0, 0, 0.2); | |
| border-radius: var(--radius-lg); | |
| border: 1px solid var(--border-color); | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| #neuralGraph { | |
| width: 100%; | |
| height: 100%; | |
| } | |
| .graph-overlay { | |
| position: absolute; | |
| top: 12px; | |
| right: 12px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 4px; | |
| align-items: flex-end; | |
| } | |
| .stat-item { | |
| font-size: 0.7rem; | |
| font-family: monospace; | |
| color: var(--text-muted); | |
| } | |
| .stat-item .val { | |
| color: var(--emerald-500); | |
| font-weight: 600; | |
| margin-left: 8px; | |
| } | |
| /* Toggles Row */ | |
| .toggles-row { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 32px; | |
| } | |
| .toggle-item { | |
| flex: 1; | |
| min-width: 240px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| } | |
| .toggle-info { | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .toggle-label { | |
| font-size: 0.95rem; | |
| color: var(--text-primary); | |
| font-weight: 500; | |
| } | |
| .toggle-desc { | |
| font-size: 0.8rem; | |
| color: var(--text-muted); | |
| } | |
| /* Switch Toggle */ | |
| .switch { | |
| position: relative; | |
| display: inline-block; | |
| width: 50px; | |
| height: 28px; | |
| } | |
| .switch input { | |
| opacity: 0; | |
| width: 0; | |
| height: 0; | |
| } | |
| .slider { | |
| position: absolute; | |
| cursor: pointer; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background-color: rgba(255, 255, 255, 0.1); | |
| transition: .4s; | |
| border-radius: 34px; | |
| } | |
| .slider:before { | |
| position: absolute; | |
| content: ""; | |
| height: 20px; | |
| width: 20px; | |
| left: 4px; | |
| bottom: 4px; | |
| background-color: white; | |
| transition: .4s; | |
| border-radius: 50%; | |
| } | |
| input:checked+.slider { | |
| background-color: var(--violet-500); | |
| box-shadow: 0 0 16px var(--violet-glow); | |
| } | |
| input:checked+.slider:before { | |
| transform: translateX(22px); | |
| } | |
| /* ===================================================== | |
| THEME VARIANTS | |
| ===================================================== */ | |
| /* Neon Cyber Theme */ | |
| body.theme-neon { | |
| --bg-primary: #050505; | |
| --bg-secondary: #0a0a0a; | |
| --bg-card: #0f0f0f; | |
| --bg-sidebar: rgba(5, 5, 5, 0.95); | |
| --violet-500: #d946ef; | |
| --violet-600: #c026d3; | |
| --violet-glow: rgba(217, 70, 239, 0.4); | |
| --indigo-500: #06b6d4; | |
| --indigo-600: #0891b2; | |
| --indigo-glow: rgba(6, 182, 212, 0.4); | |
| --text-primary: #ffffff; | |
| --text-muted: #71717a; | |
| --border-color: rgba(217, 70, 239, 0.2); | |
| /* Content area — dark neon */ | |
| --transcript-bg: #0a0a0a; | |
| --transcript-header-bg: #0f0f0f; | |
| --transcript-header-border: rgba(217, 70, 239, 0.15); | |
| --transcript-content-bg: #080808; | |
| --transcript-text: #f0f0f0; | |
| --transcript-muted: #71717a; | |
| --transcript-shadow: rgba(217, 70, 239, 0.15); | |
| --result-bg: #0f0f0f; | |
| --result-border: rgba(217, 70, 239, 0.15); | |
| --result-heading: #a78bfa; | |
| --result-text: #e4e4e7; | |
| --result-detail-text: #a1a1aa; | |
| --result-detail-border: rgba(217, 70, 239, 0.08); | |
| --result-code-bg: #0a0a0a; | |
| --result-soap-text: #d4d4d8; | |
| --action-btn-hover-bg: rgba(217, 70, 239, 0.1); | |
| --action-btn-color: #71717a; | |
| --action-btn-hover-color: #d946ef; | |
| --notice-bg: linear-gradient(135deg, rgba(217, 70, 239, 0.08), rgba(6, 182, 212, 0.05)); | |
| --notice-border: rgba(217, 70, 239, 0.25); | |
| --notice-strong: #d946ef; | |
| --notice-text: #a78bfa; | |
| --footer-bg: #0a0a0a; | |
| --footer-border: rgba(217, 70, 239, 0.15); | |
| --live-text-bg: #0f0f0f; | |
| --audio-bg: linear-gradient(135deg, rgba(6, 182, 212, 0.08), rgba(6, 182, 212, 0.04)); | |
| --audio-border: rgba(6, 182, 212, 0.2); | |
| --audio-text: #22d3ee; | |
| --text-ind-bg: linear-gradient(135deg, rgba(217, 70, 239, 0.08), rgba(217, 70, 239, 0.04)); | |
| --text-ind-border: rgba(217, 70, 239, 0.2); | |
| --text-ind-text: #d946ef; | |
| --header-bg: rgba(5, 5, 5, 0.9); | |
| --spinner-border: rgba(217, 70, 239, 0.15); | |
| --spinner-active: #d946ef; | |
| --loading-text: #71717a; | |
| --logo-gradient-start: #d946ef; | |
| --logo-gradient-end: #06b6d4; | |
| --empty-state-color: #52525b; | |
| } | |
| body.theme-neon .neural-slider::-webkit-slider-thumb { | |
| background: #d946ef; | |
| box-shadow: 0 0 20px #d946ef; | |
| } | |
| /* Midnight Void Theme */ | |
| body.theme-midnight { | |
| --bg-primary: #000000; | |
| --bg-secondary: #080808; | |
| --bg-card: #0a0a0a; | |
| --bg-sidebar: #000000; | |
| --violet-500: #ffffff; | |
| --violet-600: #e5e5e5; | |
| --violet-glow: rgba(255, 255, 255, 0.2); | |
| --indigo-500: #a3a3a3; | |
| --indigo-600: #737373; | |
| --text-primary: #ffffff; | |
| --text-muted: #525252; | |
| --border-color: #262626; | |
| /* Content area — pure dark */ | |
| --transcript-bg: #0a0a0a; | |
| --transcript-header-bg: #0f0f0f; | |
| --transcript-header-border: #1a1a1a; | |
| --transcript-content-bg: #050505; | |
| --transcript-text: #e5e5e5; | |
| --transcript-muted: #525252; | |
| --transcript-shadow: rgba(0, 0, 0, 0.5); | |
| --result-bg: #0a0a0a; | |
| --result-border: #1a1a1a; | |
| --result-heading: #a3a3a3; | |
| --result-text: #e5e5e5; | |
| --result-detail-text: #a3a3a3; | |
| --result-detail-border: #1a1a1a; | |
| --result-code-bg: #0f0f0f; | |
| --result-soap-text: #d4d4d4; | |
| --action-btn-hover-bg: rgba(255, 255, 255, 0.05); | |
| --action-btn-color: #525252; | |
| --action-btn-hover-color: #ffffff; | |
| --notice-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.02)); | |
| --notice-border: #333; | |
| --notice-strong: #e5e5e5; | |
| --notice-text: #a3a3a3; | |
| --footer-bg: #0a0a0a; | |
| --footer-border: #1a1a1a; | |
| --live-text-bg: #0f0f0f; | |
| --audio-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.03), rgba(255, 255, 255, 0.01)); | |
| --audio-border: #262626; | |
| --audio-text: #e5e5e5; | |
| --text-ind-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.02)); | |
| --text-ind-border: #262626; | |
| --text-ind-text: #e5e5e5; | |
| --header-bg: rgba(0, 0, 0, 0.95); | |
| --spinner-border: #262626; | |
| --spinner-active: #ffffff; | |
| --loading-text: #525252; | |
| --logo-gradient-start: #fff; | |
| --logo-gradient-end: #525252; | |
| --empty-state-color: #3f3f46; | |
| } | |
| body.theme-midnight .voice-card-glow { | |
| opacity: 0.3; | |
| background: #ffffff; | |
| } | |
| /* ── Clinical Light Theme ── */ | |
| body.theme-light { | |
| --bg-primary: #f0f4f8; | |
| --bg-secondary: #e2e8f0; | |
| --bg-card: #ffffff; | |
| --bg-sidebar: rgba(255, 255, 255, 0.95); | |
| --violet-500: #6d28d9; | |
| --violet-600: #5b21b6; | |
| --violet-glow: rgba(109, 40, 217, 0.15); | |
| --indigo-500: #4f46e5; | |
| --indigo-600: #4338ca; | |
| --text-primary: #1e293b; | |
| --text-secondary: #475569; | |
| --text-muted: #94a3b8; | |
| --border-color: rgba(148, 163, 184, 0.25); | |
| --border-hover: rgba(109, 40, 217, 0.3); | |
| /* Content area — bright */ | |
| --transcript-bg: #ffffff; | |
| --transcript-header-bg: #f8fafc; | |
| --transcript-header-border: #e2e8f0; | |
| --transcript-content-bg: #fafbfc; | |
| --transcript-text: #1e293b; | |
| --transcript-muted: #94a3b8; | |
| --transcript-shadow: rgba(0, 0, 0, 0.08); | |
| --result-bg: #ffffff; | |
| --result-border: #e2e8f0; | |
| --result-heading: #64748b; | |
| --result-text: #1e293b; | |
| --result-detail-text: #475569; | |
| --result-detail-border: #f1f5f9; | |
| --result-code-bg: #f8fafc; | |
| --result-soap-text: #334155; | |
| --action-btn-hover-bg: #f1f5f9; | |
| --action-btn-color: #94a3b8; | |
| --action-btn-hover-color: var(--indigo-600); | |
| --notice-bg: linear-gradient(135deg, #fffbeb, #fef3c7); | |
| --notice-border: #fcd34d; | |
| --notice-strong: #92400e; | |
| --notice-text: #a16207; | |
| --footer-bg: #ffffff; | |
| --footer-border: #e2e8f0; | |
| --live-text-bg: #f8fafc; | |
| --audio-bg: linear-gradient(135deg, #f0fdf4, #dcfce7); | |
| --audio-border: rgba(16, 185, 129, 0.2); | |
| --audio-text: #166534; | |
| --text-ind-bg: linear-gradient(135deg, #eff6ff, #dbeafe); | |
| --text-ind-border: rgba(59, 130, 246, 0.2); | |
| --text-ind-text: #1e40af; | |
| --header-bg: rgba(255, 255, 255, 0.85); | |
| --spinner-border: #e2e8f0; | |
| --spinner-active: var(--indigo-600); | |
| --loading-text: #64748b; | |
| --logo-gradient-start: #1e293b; | |
| --logo-gradient-end: #6d28d9; | |
| --empty-state-color: #94a3b8; | |
| } | |
| body.theme-light .sidebar { | |
| border-right-color: rgba(148, 163, 184, 0.2); | |
| } | |
| body.theme-light .nav-item.active { | |
| background: rgba(109, 40, 217, 0.08); | |
| border-color: rgba(109, 40, 217, 0.15); | |
| color: var(--violet-500); | |
| } | |
| body.theme-light .nav-item:hover { | |
| background: rgba(0, 0, 0, 0.03); | |
| } | |
| body.theme-light .user-card { | |
| background: rgba(0, 0, 0, 0.02); | |
| border-color: rgba(148, 163, 184, 0.2); | |
| } | |
| body.theme-light .voice-card-glow { | |
| opacity: 0.15; | |
| } | |
| body.theme-light .action-card { | |
| background: rgba(0, 0, 0, 0.01); | |
| } | |
| body.theme-light .action-card:hover { | |
| background: rgba(0, 0, 0, 0.03); | |
| } | |
| body.theme-light .duration-display { | |
| background: rgba(0, 0, 0, 0.04); | |
| } | |
| body.theme-light .settings-card { | |
| background: #ffffff; | |
| } | |
| body.theme-light .theme-card { | |
| background: rgba(0, 0, 0, 0.02); | |
| } | |
| body.theme-light .theme-card:hover { | |
| background: rgba(0, 0, 0, 0.04); | |
| } | |
| body.theme-light .theme-card.active { | |
| background: rgba(109, 40, 217, 0.06); | |
| } | |
| body.theme-light .neural-slider { | |
| background: rgba(0, 0, 0, 0.08); | |
| } | |
| body.theme-light .neural-graph-container { | |
| background: rgba(0, 0, 0, 0.04); | |
| } | |
| body.theme-light .slider:not(:checked) { | |
| background-color: rgba(0, 0, 0, 0.12); | |
| } | |
| body.theme-light .soap-section-card { | |
| background: #ffffff; | |
| border-color: #e2e8f0; | |
| } | |
| body.theme-light .soap-card-header { | |
| background: rgba(0, 0, 0, 0.02); | |
| border-bottom-color: #e2e8f0; | |
| } | |
| body.theme-light .soap-card-actions { | |
| background: rgba(0, 0, 0, 0.01); | |
| border-top-color: #e2e8f0; | |
| } | |
| body.theme-light .soap-history-panel { | |
| background: rgba(0, 0, 0, 0.02); | |
| } | |
| /* ── Aurora Dusk Theme ── */ | |
| body.theme-aurora { | |
| --bg-primary: #141020; | |
| --bg-secondary: #1c1630; | |
| --bg-card: #1a1428; | |
| --bg-sidebar: rgba(20, 16, 32, 0.96); | |
| --violet-500: #f97316; | |
| --violet-600: #ea580c; | |
| --violet-glow: rgba(249, 115, 22, 0.25); | |
| --indigo-500: #fb923c; | |
| --indigo-600: #f97316; | |
| --rose-500: #fb7185; | |
| --rose-glow: rgba(251, 113, 133, 0.3); | |
| --cyan-500: #fbbf24; | |
| --text-primary: #fef3c7; | |
| --text-secondary: #c4b5a0; | |
| --text-muted: #78716c; | |
| --border-color: rgba(251, 146, 60, 0.12); | |
| --border-hover: rgba(249, 115, 22, 0.3); | |
| /* Content area — warm dark */ | |
| --transcript-bg: #1a1428; | |
| --transcript-header-bg: #1c1630; | |
| --transcript-header-border: rgba(251, 146, 60, 0.1); | |
| --transcript-content-bg: #160f24; | |
| --transcript-text: #fef3c7; | |
| --transcript-muted: #78716c; | |
| --transcript-shadow: rgba(249, 115, 22, 0.1); | |
| --result-bg: #1a1428; | |
| --result-border: rgba(251, 146, 60, 0.1); | |
| --result-heading: #fb923c; | |
| --result-text: #fef3c7; | |
| --result-detail-text: #c4b5a0; | |
| --result-detail-border: rgba(251, 146, 60, 0.06); | |
| --result-code-bg: #1c1630; | |
| --result-soap-text: #d6d3d1; | |
| --action-btn-hover-bg: rgba(249, 115, 22, 0.1); | |
| --action-btn-color: #78716c; | |
| --action-btn-hover-color: #f97316; | |
| --notice-bg: linear-gradient(135deg, rgba(249, 115, 22, 0.08), rgba(251, 146, 60, 0.04)); | |
| --notice-border: rgba(249, 115, 22, 0.25); | |
| --notice-strong: #fb923c; | |
| --notice-text: #c4b5a0; | |
| --footer-bg: #1a1428; | |
| --footer-border: rgba(251, 146, 60, 0.1); | |
| --live-text-bg: #1c1630; | |
| --audio-bg: linear-gradient(135deg, rgba(251, 191, 36, 0.06), rgba(251, 191, 36, 0.03)); | |
| --audio-border: rgba(251, 191, 36, 0.15); | |
| --audio-text: #fbbf24; | |
| --text-ind-bg: linear-gradient(135deg, rgba(249, 115, 22, 0.08), rgba(249, 115, 22, 0.04)); | |
| --text-ind-border: rgba(249, 115, 22, 0.2); | |
| --text-ind-text: #fb923c; | |
| --header-bg: rgba(20, 16, 32, 0.9); | |
| --spinner-border: rgba(251, 146, 60, 0.12); | |
| --spinner-active: #f97316; | |
| --loading-text: #78716c; | |
| --logo-gradient-start: #fbbf24; | |
| --logo-gradient-end: #f97316; | |
| --empty-state-color: #57534e; | |
| } | |
| body.theme-aurora .neural-slider::-webkit-slider-thumb { | |
| background: #f97316; | |
| box-shadow: 0 0 16px rgba(249, 115, 22, 0.5); | |
| } | |
| body.theme-aurora .voice-card-glow.glow-1 { | |
| background: rgba(249, 115, 22, 0.2); | |
| } | |
| body.theme-aurora .voice-card-glow.glow-2 { | |
| background: rgba(251, 191, 36, 0.15); | |
| } | |
| body.theme-aurora .record-btn { | |
| background: linear-gradient(135deg, #ea580c, #f97316); | |
| box-shadow: 0 8px 32px rgba(249, 115, 22, 0.3); | |
| } | |
| /* ── Theme Toggle Button ── */ | |
| .theme-toggle-btn { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 40px; | |
| height: 40px; | |
| border: 1px solid var(--border-color); | |
| border-radius: var(--radius-full); | |
| background: transparent; | |
| color: var(--text-muted); | |
| cursor: pointer; | |
| transition: var(--transition); | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .theme-toggle-btn:hover { | |
| color: var(--text-primary); | |
| border-color: var(--violet-500); | |
| background: rgba(139, 92, 246, 0.1); | |
| transform: rotate(15deg); | |
| } | |
| .theme-toggle-btn svg { | |
| width: 20px; | |
| height: 20px; | |
| transition: transform 0.4s ease, opacity 0.3s ease; | |
| } | |
| .theme-toggle-btn .theme-icon-sun, | |
| .theme-toggle-btn .theme-icon-moon { | |
| position: absolute; | |
| } | |
| .theme-toggle-btn .theme-icon-sun { | |
| opacity: 0; | |
| transform: rotate(-90deg) scale(0.5); | |
| } | |
| .theme-toggle-btn .theme-icon-moon { | |
| opacity: 1; | |
| transform: rotate(0deg) scale(1); | |
| } | |
| /* When a light theme is active, show sun */ | |
| body.theme-light .theme-toggle-btn .theme-icon-sun { | |
| opacity: 1; | |
| transform: rotate(0deg) scale(1); | |
| } | |
| body.theme-light .theme-toggle-btn .theme-icon-moon { | |
| opacity: 0; | |
| transform: rotate(90deg) scale(0.5); | |
| } | |
| /* ===================================================== | |
| SOAP SECTION CARDS | |
| ===================================================== */ | |
| .soap-sections-container { | |
| margin-top: 8px; | |
| } | |
| .soap-sections-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| margin-bottom: 12px; | |
| padding: 0 4px; | |
| } | |
| .soap-sections-header h4 { | |
| font-size: 1rem; | |
| color: var(--text-primary); | |
| margin: 0; | |
| } | |
| .soap-section-card { | |
| background: var(--bg-secondary); | |
| border: 1px solid var(--border-color); | |
| border-radius: 10px; | |
| margin-bottom: 10px; | |
| overflow: hidden; | |
| transition: border-color 0.3s ease, box-shadow 0.3s ease; | |
| } | |
| .soap-section-card:hover { | |
| border-color: var(--violet-500); | |
| box-shadow: 0 0 12px rgba(139, 92, 246, 0.08); | |
| } | |
| .soap-section-card.approved { | |
| border-color: #10b981; | |
| box-shadow: 0 0 8px rgba(16, 185, 129, 0.12); | |
| } | |
| .soap-section-card.editing { | |
| border-color: #3b82f6; | |
| box-shadow: 0 0 12px rgba(59, 130, 246, 0.15); | |
| } | |
| /* Card Header */ | |
| .soap-card-header { | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| padding: 10px 14px; | |
| border-bottom: 1px solid var(--border-color); | |
| background: rgba(0, 0, 0, 0.1); | |
| } | |
| .soap-card-header h5 { | |
| margin: 0; | |
| font-size: 0.88rem; | |
| font-weight: 600; | |
| color: var(--text-primary); | |
| flex: 1; | |
| } | |
| /* SOAP Letter Labels */ | |
| .soap-label { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 26px; | |
| height: 26px; | |
| border-radius: 6px; | |
| font-weight: 700; | |
| font-size: 0.82rem; | |
| flex-shrink: 0; | |
| letter-spacing: 0; | |
| } | |
| .soap-label-s { | |
| background: rgba(59, 130, 246, 0.2); | |
| color: #60a5fa; | |
| border: 1px solid rgba(59, 130, 246, 0.3); | |
| } | |
| .soap-label-o { | |
| background: rgba(16, 185, 129, 0.2); | |
| color: #34d399; | |
| border: 1px solid rgba(16, 185, 129, 0.3); | |
| } | |
| .soap-label-a { | |
| background: rgba(245, 158, 11, 0.2); | |
| color: #fbbf24; | |
| border: 1px solid rgba(245, 158, 11, 0.3); | |
| } | |
| .soap-label-p { | |
| background: rgba(139, 92, 246, 0.2); | |
| color: #a78bfa; | |
| border: 1px solid rgba(139, 92, 246, 0.3); | |
| } | |
| .soap-label-cc { | |
| background: rgba(236, 72, 153, 0.2); | |
| color: #f472b6; | |
| border: 1px solid rgba(236, 72, 153, 0.3); | |
| } | |
| .soap-label-cd { | |
| background: rgba(20, 184, 166, 0.2); | |
| color: #2dd4bf; | |
| border: 1px solid rgba(20, 184, 166, 0.3); | |
| } | |
| .soap-history-restore-btn { | |
| margin-left: auto; | |
| background: transparent; | |
| border: 1px solid rgba(139, 92, 246, 0.3); | |
| color: #a78bfa; | |
| font-size: 0.65rem; | |
| padding: 2px 6px; | |
| border-radius: 4px; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| } | |
| .soap-history-restore-btn:hover { | |
| background: rgba(139, 92, 246, 0.1); | |
| border-color: #a78bfa; | |
| } | |
| /* Status Badges */ | |
| .soap-status { | |
| font-size: 0.7rem; | |
| padding: 2px 8px; | |
| border-radius: 4px; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| white-space: nowrap; | |
| } | |
| .soap-status.badge.warning { | |
| background: rgba(245, 158, 11, 0.15); | |
| color: #f59e0b; | |
| border: 1px solid rgba(245, 158, 11, 0.25); | |
| } | |
| .soap-status.badge.success { | |
| background: rgba(16, 185, 129, 0.15); | |
| color: #10b981; | |
| border: 1px solid rgba(16, 185, 129, 0.25); | |
| } | |
| .soap-status.badge.info { | |
| background: rgba(59, 130, 246, 0.15); | |
| color: #3b82f6; | |
| border: 1px solid rgba(59, 130, 246, 0.25); | |
| } | |
| /* Card Body (editable content) */ | |
| .soap-card-body { | |
| padding: 12px 14px; | |
| font-size: 0.88rem; | |
| line-height: 1.6; | |
| color: var(--text-primary); | |
| min-height: 36px; | |
| transition: background 0.2s ease, outline 0.2s ease; | |
| outline: 2px solid transparent; | |
| border-radius: 0; | |
| } | |
| .soap-card-body[contenteditable="true"] { | |
| background: rgba(59, 130, 246, 0.05); | |
| outline: 2px solid rgba(59, 130, 246, 0.3); | |
| cursor: text; | |
| } | |
| .soap-card-body:empty::before { | |
| content: "Pending..."; | |
| color: var(--text-muted); | |
| opacity: 0.6; | |
| } | |
| /* Card Actions */ | |
| .soap-card-actions { | |
| display: flex; | |
| gap: 6px; | |
| padding: 8px 14px; | |
| border-top: 1px solid var(--border-color); | |
| background: rgba(0, 0, 0, 0.05); | |
| } | |
| .soap-edit-btn, | |
| .soap-approve-btn { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 5px; | |
| padding: 5px 12px; | |
| border: 1px solid var(--border-color); | |
| border-radius: 6px; | |
| background: transparent; | |
| color: var(--text-muted); | |
| font-size: 0.78rem; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| } | |
| .soap-edit-btn:hover { | |
| background: rgba(59, 130, 246, 0.1); | |
| color: #60a5fa; | |
| border-color: rgba(59, 130, 246, 0.3); | |
| } | |
| .soap-approve-btn:hover { | |
| background: rgba(16, 185, 129, 0.1); | |
| color: #34d399; | |
| border-color: rgba(16, 185, 129, 0.3); | |
| } | |
| .soap-edit-btn.saving { | |
| background: rgba(59, 130, 246, 0.15); | |
| color: #60a5fa; | |
| border-color: #3b82f6; | |
| } | |
| .soap-approve-btn.approved { | |
| background: rgba(16, 185, 129, 0.15); | |
| color: #10b981; | |
| border-color: #10b981; | |
| pointer-events: none; | |
| } | |
| .soap-approve-btn:disabled, | |
| .soap-edit-btn:disabled { | |
| opacity: 0.4; | |
| pointer-events: none; | |
| } | |
| /* AI Suggestion Notice */ | |
| .soap-ai-notice { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 8px; | |
| padding: 10px 14px; | |
| margin-top: 8px; | |
| border-radius: 8px; | |
| background: rgba(245, 158, 11, 0.06); | |
| border: 1px solid rgba(245, 158, 11, 0.15); | |
| color: var(--text-muted); | |
| font-size: 0.78rem; | |
| line-height: 1.5; | |
| } | |
| .soap-ai-notice svg { | |
| color: #f59e0b; | |
| flex-shrink: 0; | |
| margin-top: 1px; | |
| } | |
| /* Approval Flash Animation */ | |
| @keyframes approvalFlash { | |
| 0% { | |
| background: rgba(16, 185, 129, 0.2); | |
| } | |
| 100% { | |
| background: transparent; | |
| } | |
| } | |
| .soap-section-card.just-approved { | |
| animation: approvalFlash 0.8s ease-out; | |
| } | |
| /* Reject Button */ | |
| .soap-reject-btn { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 5px; | |
| padding: 5px 12px; | |
| border: 1px solid var(--border-color); | |
| border-radius: 6px; | |
| background: transparent; | |
| color: var(--text-muted); | |
| font-size: 0.78rem; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| } | |
| .soap-reject-btn:hover { | |
| background: rgba(239, 68, 68, 0.1); | |
| color: #f87171; | |
| border-color: rgba(239, 68, 68, 0.3); | |
| } | |
| .soap-reject-btn.rejected { | |
| background: rgba(239, 68, 68, 0.15); | |
| color: #ef4444; | |
| border-color: #ef4444; | |
| pointer-events: none; | |
| } | |
| .soap-reject-btn:disabled { | |
| opacity: 0.4; | |
| pointer-events: none; | |
| } | |
| /* Rejected Card State */ | |
| .soap-section-card.rejected { | |
| border-color: #ef4444; | |
| box-shadow: 0 0 8px rgba(239, 68, 68, 0.12); | |
| opacity: 0.85; | |
| } | |
| .soap-section-card.rejected .soap-card-body { | |
| text-decoration: line-through; | |
| opacity: 0.6; | |
| } | |
| .soap-status.badge.danger { | |
| background: rgba(239, 68, 68, 0.15); | |
| color: #ef4444; | |
| border: 1px solid rgba(239, 68, 68, 0.25); | |
| } | |
| @keyframes rejectionFlash { | |
| 0% { | |
| background: rgba(239, 68, 68, 0.2); | |
| } | |
| 100% { | |
| background: transparent; | |
| } | |
| } | |
| .soap-section-card.just-rejected { | |
| animation: rejectionFlash 0.8s ease-out; | |
| } | |
| /* History Toggle Button */ | |
| .soap-history-toggle { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 5px; | |
| padding: 5px 12px; | |
| border: 1px solid var(--border-color); | |
| border-radius: 6px; | |
| background: transparent; | |
| color: var(--text-muted); | |
| font-size: 0.78rem; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| margin-left: auto; | |
| } | |
| .soap-history-toggle:hover { | |
| background: rgba(139, 92, 246, 0.1); | |
| color: #a78bfa; | |
| border-color: rgba(139, 92, 246, 0.3); | |
| } | |
| .soap-history-toggle.active { | |
| background: rgba(139, 92, 246, 0.12); | |
| color: #a78bfa; | |
| border-color: rgba(139, 92, 246, 0.3); | |
| } | |
| /* History Panel */ | |
| .soap-history-panel { | |
| padding: 12px 14px; | |
| border-top: 1px solid var(--border-color); | |
| background: rgba(0, 0, 0, 0.08); | |
| max-height: 250px; | |
| overflow-y: auto; | |
| } | |
| .soap-history-panel.hidden { | |
| display: none; | |
| } | |
| .soap-history-original { | |
| padding: 8px 10px; | |
| margin-bottom: 10px; | |
| background: rgba(139, 92, 246, 0.06); | |
| border: 1px solid rgba(139, 92, 246, 0.12); | |
| border-radius: 6px; | |
| font-size: 0.8rem; | |
| color: var(--text-muted); | |
| line-height: 1.5; | |
| } | |
| .soap-history-original-label { | |
| font-size: 0.7rem; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.5px; | |
| color: #a78bfa; | |
| margin-bottom: 4px; | |
| } | |
| .soap-history-timeline { | |
| list-style: none; | |
| padding: 0; | |
| margin: 0; | |
| } | |
| .soap-history-entry { | |
| display: flex; | |
| align-items: flex-start; | |
| gap: 8px; | |
| padding: 6px 0; | |
| border-bottom: 1px solid rgba(255, 255, 255, 0.04); | |
| font-size: 0.78rem; | |
| line-height: 1.4; | |
| } | |
| .soap-history-entry:last-child { | |
| border-bottom: none; | |
| } | |
| .soap-history-dot { | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| flex-shrink: 0; | |
| margin-top: 4px; | |
| } | |
| .soap-history-dot.edited { | |
| background: #3b82f6; | |
| } | |
| .soap-history-dot.approved { | |
| background: #10b981; | |
| } | |
| .soap-history-dot.rejected { | |
| background: #ef4444; | |
| } | |
| .soap-history-dot.generated { | |
| background: #a78bfa; | |
| } | |
| .soap-history-time { | |
| color: var(--text-muted); | |
| font-size: 0.7rem; | |
| white-space: nowrap; | |
| min-width: 56px; | |
| } | |
| .soap-history-action { | |
| color: var(--text-primary); | |
| flex: 1; | |
| } | |
| .soap-history-empty { | |
| color: var(--text-muted); | |
| font-size: 0.78rem; | |
| font-style: italic; | |
| padding: 8px 0; | |
| } | |
| /* ===================================================== | |
| PDF PRINT TEMPLATE (Hidden from UI) | |
| ===================================================== */ | |
| .pdf-template { | |
| width: 800px; | |
| padding: 40px; | |
| font-family: 'Helvetica', 'Arial', sans-serif; | |
| color: #1a1a1a; | |
| background: white; | |
| box-sizing: border-box; | |
| } | |
| .pdf-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: flex-start; | |
| margin-bottom: 20px; | |
| } | |
| .pdf-logo { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| } | |
| .pdf-logo svg { | |
| color: #4f46e5; | |
| } | |
| .pdf-logo h2 { | |
| font-size: 24px; | |
| margin: 0; | |
| color: #1e293b; | |
| font-weight: 700; | |
| } | |
| .pdf-meta p { | |
| margin: 4px 0; | |
| font-size: 14px; | |
| color: #475569; | |
| } | |
| .pdf-divider { | |
| border: none; | |
| border-top: 2px solid #e2e8f0; | |
| margin: 20px 0; | |
| } | |
| .pdf-patient-info { | |
| background: #f8fafc; | |
| padding: 16px; | |
| border-radius: 8px; | |
| margin-bottom: 30px; | |
| } | |
| .pdf-info-row { | |
| display: flex; | |
| justify-content: space-between; | |
| } | |
| .pdf-info-row span { | |
| font-size: 14px; | |
| color: #334155; | |
| } | |
| .pdf-content { | |
| margin-bottom: 40px; | |
| } | |
| .pdf-section-title { | |
| font-size: 16px; | |
| color: #1e293b; | |
| border-bottom: 1px solid #cbd5e1; | |
| padding-bottom: 8px; | |
| margin-top: 24px; | |
| margin-bottom: 12px; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .pdf-content p { | |
| font-size: 14px; | |
| line-height: 1.6; | |
| margin: 0 0 16px 0; | |
| color: #334155; | |
| white-space: pre-wrap; | |
| } | |
| #pdfClinicalDetails ul { | |
| margin: 0 0 16px 20px; | |
| font-size: 14px; | |
| color: #334155; | |
| } | |
| #pdfClinicalDetails li { | |
| margin-bottom: 8px; | |
| } | |
| .pdf-soap-section { | |
| margin-bottom: 20px; | |
| } | |
| .pdf-soap-section h4 { | |
| font-size: 14px; | |
| margin: 0 0 8px 0; | |
| color: #4f46e5; | |
| } | |
| .pdf-soap-section p { | |
| margin: 0; | |
| } | |
| .pdf-footer { | |
| display: flex; | |
| justify-content: space-between; | |
| margin-top: 60px; | |
| } | |
| .pdf-signature { | |
| width: 45%; | |
| } | |
| .sig-line { | |
| border-bottom: 1px solid #000; | |
| margin-bottom: 8px; | |
| } | |
| .pdf-signature p { | |
| margin: 0; | |
| font-size: 12px; | |
| color: #64748b; | |
| } | |
| .pdf-signature p.sig-name { | |
| font-weight: 600; | |
| color: #1e293b; | |
| margin-top: 4px; | |
| } | |
| .pdf-page-number { | |
| text-align: center; | |
| font-size: 10px; | |
| color: #94a3b8; | |
| margin-top: 40px; | |
| border-top: 1px solid #f1f5f9; | |
| padding-top: 16px; | |
| } | |
| .html2pdf__page-break { | |
| page-break-before: always; | |
| } | |
| /* ===================================================== | |
| HISTORY VIEW STYLES | |
| ===================================================== */ | |
| .history-grid { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); | |
| gap: 20px; | |
| padding: 10px; | |
| } | |
| .history-card { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border-color); | |
| border-radius: 12px; | |
| padding: 16px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 12px; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| } | |
| .history-card:hover { | |
| border-color: var(--violet-500); | |
| transform: translateY(-2px); | |
| box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2), 0 0 15px var(--violet-glow); | |
| } | |
| .history-card:focus { | |
| outline: 2px solid var(--violet-500); | |
| } | |
| .history-card-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: flex-start; | |
| border-bottom: 1px solid var(--border-color); | |
| padding-bottom: 10px; | |
| } | |
| .history-card-header h4 { | |
| margin: 0 0 4px 0; | |
| color: var(--text-primary); | |
| font-size: 1rem; | |
| font-weight: 600; | |
| } | |
| .history-date { | |
| display: block; | |
| color: var(--text-muted); | |
| font-size: 0.8rem; | |
| } | |
| .history-card-body { | |
| flex: 1; | |
| } | |
| .history-card-body p { | |
| margin: 0 0 6px 0; | |
| font-size: 0.85rem; | |
| color: var(--text-secondary); | |
| line-height: 1.4; | |
| } | |
| .history-card-body strong { | |
| color: var(--text-primary); | |
| } | |
| .history-card-footer { | |
| display: flex; | |
| justify-content: flex-end; | |
| padding-top: 10px; | |
| border-top: 1px solid var(--border-color); | |
| } | |
| .load-session-btn { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| background: transparent; | |
| border: none; | |
| color: var(--violet-500); | |
| font-size: 0.85rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| padding: 4px 8px; | |
| border-radius: 6px; | |
| transition: background 0.2s; | |
| } | |
| .history-card:hover .load-session-btn { | |
| background: rgba(139, 92, 246, 0.1); | |
| } | |
| .history-empty { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| padding: 60px 20px; | |
| text-align: center; | |
| color: var(--text-muted); | |
| } | |
| .history-empty svg { | |
| width: 64px; | |
| height: 64px; | |
| color: var(--empty-state-color, #334155); | |
| margin-bottom: 20px; | |
| } | |
| .history-empty h3 { | |
| margin: 0 0 8px 0; | |
| color: var(--text-primary); | |
| font-size: 1.2rem; | |
| } | |
| .history-empty p { | |
| margin: 0; | |
| font-size: 0.95rem; | |
| } | |
| /* ===================================================== | |
| PWA & OFFLINE STYLES | |
| ===================================================== */ | |
| .offline-badge { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 8px 16px; | |
| background: rgba(239, 68, 68, 0.1); | |
| border: 1px solid rgba(239, 68, 68, 0.2); | |
| border-radius: var(--radius-full); | |
| color: var(--rose-500); | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| } | |
| [data-theme="" high-contrast""] .offline-badge { | |
| background: #000; | |
| border: 1px solid #ff00ff; | |
| color: #ff00ff; | |
| } | |
| .offline-badge svg { | |
| width: 16px; | |
| height: 16px; | |
| } | |
| .install-app-btn { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| padding: 8px 16px; | |
| background: linear-gradient(135deg, var(--violet-600), var(--indigo-600)); | |
| color: white; | |
| border: none; | |
| border-radius: var(--radius-full); | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: var(--transition); | |
| box-shadow: 0 4px 12px var(--violet-glow); | |
| } | |
| .install-app-btn:hover { | |
| transform: translateY(-1px); | |
| box-shadow: 0 6px 16px var(--violet-glow); | |
| } | |
| [data-theme="" high-contrast""] .install-app-btn { | |
| background: #ffff00; | |
| color: #000; | |
| border: 2px solid #ffff00; | |
| box-shadow: none; | |
| } | |
| [data-theme="" high-contrast""] .install-app-btn:hover { | |
| background: #000; | |
| color: #ffff00; | |
| } | |
| .install-app-btn svg { | |
| width: 16px; | |
| height: 16px; | |
| } | |
| /* ===================================================== | |
| MEDICAL NER ENTITY STYLES | |
| ===================================================== */ | |
| .soap-label-ner { | |
| background: linear-gradient(135deg, #06b6d4, #8b5cf6) ; | |
| } | |
| .ner-entities-body { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| padding: 16px 0; | |
| } | |
| .ner-category-label { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| color: var(--text-secondary); | |
| margin-bottom: 8px; | |
| } | |
| .ner-category-label svg { | |
| color: var(--violet-500); | |
| } | |
| .ner-badges { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: 8px; | |
| } | |
| .entity-badge { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| padding: 6px 12px; | |
| border-radius: var(--radius-full); | |
| font-size: 0.78rem; | |
| font-weight: 500; | |
| transition: var(--transition); | |
| cursor: default; | |
| } | |
| .entity-badge:hover { | |
| transform: translateY(-1px); | |
| } | |
| .entity-badge .entity-name { | |
| font-weight: 600; | |
| } | |
| .entity-badge .entity-code { | |
| font-size: 0.7rem; | |
| opacity: 0.7; | |
| font-family: monospace; | |
| } | |
| /* Condition badges (warm red/orange tones) */ | |
| .entity-condition { | |
| background: rgba(239, 68, 68, 0.1); | |
| color: var(--rose-500); | |
| border: 1px solid rgba(239, 68, 68, 0.2); | |
| } | |
| [data-theme="" high-contrast""] .entity-condition { | |
| background: #000; | |
| color: #ff00ff; | |
| border: 1px solid #ff00ff; | |
| } | |
| /* Medication badges (cool blue/purple tones) */ | |
| .entity-medication { | |
| background: rgba(124, 58, 237, 0.1); | |
| color: var(--violet-500); | |
| border: 1px solid rgba(124, 58, 237, 0.2); | |
| } | |
| [data-theme="" high-contrast""] .entity-medication { | |
| background: #000; | |
| color: #00ffff; | |
| border: 1px solid #00ffff; | |
| } | |
| .ner-empty-state { | |
| color: var(--text-muted); | |
| font-style: italic; | |
| font-size: 0.8rem; | |
| } | |
| /* ===================================================== | |
| FHIR / EHR EXPORT STYLES | |
| ===================================================== */ | |
| /* EHR Modal */ | |
| .ehr-modal { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| z-index: 1000; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .ehr-modal.hidden { | |
| display: none; | |
| } | |
| .ehr-modal-backdrop { | |
| position: absolute; | |
| inset: 0; | |
| background: rgba(0, 0, 0, 0.6); | |
| backdrop-filter: blur(4px); | |
| } | |
| .ehr-modal-content { | |
| position: relative; | |
| background: var(--bg-primary); | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-lg); | |
| width: 90%; | |
| max-width: 480px; | |
| box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5); | |
| animation: modalSlideIn 0.25s ease-out; | |
| } | |
| @keyframes modalSlideIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(-20px) scale(0.97); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0) scale(1); | |
| } | |
| } | |
| .ehr-modal-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| padding: 16px 20px; | |
| border-bottom: 1px solid var(--border); | |
| } | |
| .ehr-modal-header h4 { | |
| margin: 0; | |
| font-size: 1rem; | |
| color: var(--text-primary); | |
| } | |
| .ehr-modal-close { | |
| background: none; | |
| border: none; | |
| color: var(--text-secondary); | |
| font-size: 1.4rem; | |
| cursor: pointer; | |
| padding: 4px 8px; | |
| border-radius: var(--radius-sm); | |
| transition: var(--transition); | |
| } | |
| .ehr-modal-close:hover { | |
| color: var(--text-primary); | |
| background: var(--bg-hover); | |
| } | |
| .ehr-modal-body { | |
| padding: 20px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| } | |
| .ehr-field label { | |
| display: block; | |
| font-size: 0.8rem; | |
| font-weight: 600; | |
| color: var(--text-secondary); | |
| margin-bottom: 6px; | |
| } | |
| .ehr-field input { | |
| width: 100%; | |
| padding: 10px 12px; | |
| font-size: 0.85rem; | |
| background: var(--bg-secondary); | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius-sm); | |
| color: var(--text-primary); | |
| transition: var(--transition); | |
| box-sizing: border-box; | |
| } | |
| .ehr-field input:focus { | |
| outline: none; | |
| border-color: var(--violet-500); | |
| box-shadow: 0 0 0 2px rgba(124, 58, 237, 0.2); | |
| } | |
| .ehr-presets { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| flex-wrap: wrap; | |
| } | |
| .ehr-presets-label { | |
| font-size: 0.75rem; | |
| color: var(--text-muted); | |
| font-weight: 600; | |
| } | |
| .ehr-preset-btn { | |
| padding: 4px 10px; | |
| font-size: 0.72rem; | |
| border-radius: var(--radius-full); | |
| border: 1px solid var(--border); | |
| background: var(--bg-secondary); | |
| color: var(--text-secondary); | |
| cursor: pointer; | |
| transition: var(--transition); | |
| } | |
| .ehr-preset-btn:hover { | |
| background: var(--violet-500); | |
| color: white; | |
| border-color: var(--violet-500); | |
| } | |
| .ehr-modal-footer { | |
| display: flex; | |
| justify-content: flex-end; | |
| gap: 8px; | |
| padding: 12px 20px; | |
| border-top: 1px solid var(--border); | |
| } | |
| /* ===================================================== | |
| HIPAA COMPLIANCE DASHBOARD | |
| ===================================================== */ | |
| .hipaa-actions { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| } | |
| .hipaa-purge-btn { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| padding: 8px 16px; | |
| background: rgba(239, 68, 68, 0.1); | |
| border: 1px solid rgba(239, 68, 68, 0.3); | |
| color: #ef4444; | |
| border-radius: 6px; | |
| cursor: pointer; | |
| font-size: 0.85rem; | |
| font-weight: 500; | |
| transition: all 0.2s; | |
| } | |
| .hipaa-purge-btn:hover { | |
| background: rgba(239, 68, 68, 0.2); | |
| border-color: rgba(239, 68, 68, 0.5); | |
| } | |
| .hipaa-purge-result { | |
| font-size: 0.85rem; | |
| color: var(--text-secondary); | |
| } | |
| .hipaa-export-logs { | |
| background: var(--bg-card); | |
| border: 1px solid var(--border); | |
| border-radius: 8px; | |
| overflow: hidden; | |
| max-height: 300px; | |
| overflow-y: auto; | |
| } | |
| .hipaa-export-logs .text-muted { | |
| padding: 16px; | |
| color: var(--text-secondary); | |
| text-align: center; | |
| font-size: 0.85rem; | |
| } | |
| .hipaa-export-row { | |
| display: grid; | |
| grid-template-columns: 1fr 80px 100px 120px 80px; | |
| gap: 8px; | |
| padding: 10px 16px; | |
| border-bottom: 1px solid var(--border); | |
| font-size: 0.82rem; | |
| align-items: center; | |
| } | |
| .hipaa-export-row:last-child { | |
| border-bottom: none; | |
| } | |
| .hipaa-export-row.header { | |
| background: var(--bg-secondary); | |
| font-weight: 600; | |
| color: var(--text-secondary); | |
| text-transform: uppercase; | |
| font-size: 0.72rem; | |
| letter-spacing: 0.05em; | |
| position: sticky; | |
| top: 0; | |
| } | |
| .hipaa-export-status { | |
| display: inline-block; | |
| padding: 2px 8px; | |
| border-radius: 4px; | |
| font-size: 0.75rem; | |
| font-weight: 500; | |
| } | |
| .hipaa-export-status.success { | |
| background: rgba(34, 197, 94, 0.15); | |
| color: #22c55e; | |
| } | |
| .hipaa-export-status.failed { | |
| background: rgba(239, 68, 68, 0.15); | |
| color: #ef4444; | |
| } | |