| :root { |
| |
| --blue: #007AFF; |
| --blue-dark: #0051D5; |
| --gray-50: #F9FAFB; |
| --gray-100: #F3F4F6; |
| --gray-200: #E5E7EB; |
| --gray-300: #D1D5DB; |
| --gray-400: #9CA3AF; |
| --gray-500: #6B7280; |
| --gray-600: #4B5563; |
| --gray-700: #374151; |
| --gray-800: #1F2937; |
| --gray-900: #111827; |
| --green: #34D399; |
| --orange: #FB923C; |
| --red: #EF4444; |
| --purple: #A78BFA; |
| --white: #FFFFFF; |
| --black: #000000; |
| |
| Copied |
| --space-1: 0.25rem; |
| --space-2: 0.5rem; |
| --space-3: 0.75rem; |
| --space-4: 1rem; |
| --space-5: 1.25rem; |
| --space-6: 1.5rem; |
| --space-8: 2rem; |
| --space-10: 2.5rem; |
| --space-12: 3rem; |
| --space-16: 4rem; |
| --space-20: 5rem; |
| --space-24: 6rem; |
|
|
| |
| --radius-sm: 0.375rem; |
| --radius: 0.75rem; |
| --radius-lg: 1rem; |
| --radius-xl: 1.5rem; |
|
|
| |
| --text-xs: 0.75rem; |
| --text-sm: 0.875rem; |
| --text-base: 1rem; |
| --text-lg: 1.125rem; |
| --text-xl: 1.25rem; |
| --text-2xl: 1.5rem; |
| --text-3xl: 1.875rem; |
| --text-4xl: 2.25rem; |
|
|
| |
| --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); |
| --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); |
| --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); |
| --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); |
| --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25); } |
|
|
| { margin: 0; padding: 0; box-sizing: border-box;} |
|
|
| body { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", system-ui, sans-serif; background: var(--gray-50); color: var(--gray-900); line-height: 1.6; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;} |
| .header { background: rgba(255, 255, 255, 0.95); backdrop-filter: saturate(180%) blur(20px); -webkit-backdrop-filter: saturate(180%) blur(20px); border-bottom: 1px solid var(--gray-200); position: sticky; top: 0; z-index: 1000;} |
| .header-content { max-width: 1200px; margin: 0 auto; padding: var(--space-4) var(--space-6); display: flex; justify-content: space-between; align-items: center;} |
| .logo { display: flex; align-items: center; gap: var(--space-3); font-size: var(--text-2xl); font-weight: 600; color: var(--gray-900);} |
| .precision-indicator { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-4); background: var(--gray-100); border-radius: var(--radius-xl); font-size: var(--text-sm); font-weight: 500; color: var(--gray-600);} |
| .main-container { max-width: 1200px; margin: 0 auto; padding: var(--space-8) var(--space-6);} |
| .upload-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--space-6); margin-bottom: var(--space-12);} |
| .upload-card { background: var(--white); border-radius: var(--radius-xl); padding: var(--space-6); box-shadow: var(--shadow); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);} |
| .upload-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg);} |
| .section-title { font-size: var(--text-xl); font-weight: 600; margin-bottom: var(--space-4); display: flex; align-items: center; gap: var(--space-2);} |
| .precision-badge,.audio-badge { background: var(--blue); color: var(--white); padding: var(--space-1) var(--space-3); border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em;} |
| .audio-badge { background: var(--orange);} |
| .upload-zone { border: 2px dashed var(--gray-300); border-radius: var(--radius-lg); padding: var(--space-8) var(--space-6); text-align: center; cursor: pointer; transition: all 0.2s ease; background: var(--gray-50);} |
| .upload-zone:hover { border-color: var(--blue); background: rgba(0, 122, 255, 0.02);} |
| .upload-zone.dragover { border-color: var(--blue); background: rgba(0, 122, 255, 0.05); transform: scale(1.01);} |
| .upload-icon { font-size: var(--text-4xl); color: var(--gray-400); margin-bottom: var(--space-4);} |
| .file-list { margin-top: var(--space-4); max-height: 200px; overflow-y: auto;} |
| .file-item { display: flex; justify-content: space-between; align-items: center; padding: var(--space-3) var(--space-4); background: var(--gray-50); border-radius: var(--radius); margin-bottom: var(--space-2); transition: all 0.2s ease;} |
| .file-item:hover { background: var(--gray-100);} |
| .file-info { display: flex; align-items: center; gap: var(--space-3);} |
| .file-status { width: 6px; height: 6px; border-radius: 50%; background: var(--green);} |
| .file-remove { background: none; border: none; color: var(--gray-400); cursor: pointer; padding: var(--space-2); border-radius: var(--radius-sm); transition: all 0.2s ease;} |
| .file-remove:hover { color: var(--red); background: rgba(239, 68, 68, 0.1);} |
| .control-panel { background: var(--white); border-radius: var(--radius-xl); padding: var(--space-8); margin-bottom: var(--space-8); box-shadow: var(--shadow);} |
| .info-banner { background: linear-gradient(135deg, var(--gray-50), var(--gray-100)); border: 1px solid var(--gray-200); border-radius: var(--radius-lg); padding: var(--space-6); margin-bottom: var(--space-6);} |
| .info-banner h3 { color: var(--gray-900); margin-bottom: var(--space-2); font-weight: 600; display: flex; align-items: center; gap: var(--space-2);} |
| .info-banner p { color: var(--gray-600); font-size: var(--text-sm);} |
| .audience-selector { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-4); margin-bottom: var(--space-6);} |
| .audience-option { padding: var(--space-6); background: var(--gray-50); border: 2px solid transparent; border-radius: var(--radius-lg); cursor: pointer; transition: all 0.2s ease;} |
| .audience-option:hover { background: var(--gray-100); border-color: var(--gray-300);} |
| .audience-option.selected { background: rgba(0, 122, 255, 0.05); border-color: var(--blue);} |
| .audience-title { font-weight: 600; font-size: var(--text-lg); margin-bottom: var(--space-2); display: flex; align-items: center; gap: var(--space-2);} |
| .audience-desc { font-size: var(--text-sm); color: var(--gray-600);} |
| .analyze-btn { width: 100%; background: var(--blue); color: var(--white); border: none; padding: var(--space-4) var(--space-6); font-size: var(--text-lg); font-weight: 600; border-radius: var(--radius-lg); cursor: pointer; transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; gap: var(--space-2);} |
| .analyze-btn:hover:not(:disabled) { background: var(--blue-dark); transform: translateY(-1px); box-shadow: var(--shadow-lg);} |
| .analyze-btn:disabled { opacity: 0.6; cursor: not-allowed;} |
| .loading-section { display: none; text-align: center; padding: var(--space-12); background: var(--white); border-radius: var(--radius-xl); margin-bottom: var(--space-8); box-shadow: var(--shadow);} |
| .loading-section.active { display: block;} |
| .progress-bar { width: 100%; height: 4px; background: var(--gray-200); border-radius: var(--radius-sm); overflow: hidden; margin: var(--space-6) 0;} |
| .progress-fill { height: 100%; background: var(--blue); border-radius: var(--radius-sm); transition: width 0.3s ease;} |
| .analysis-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--space-4); margin-top: var(--space-6);} |
| .step-card { padding: var(--space-4); background: var(--gray-50); border-radius: var(--radius); border: 1px solid var(--gray-200); transition: all 0.2s ease; text-align: center;} |
| .step-card.active { border-color: var(--blue); background: rgba(0, 122, 255, 0.05);} |
| .step-card.completed { border-color: var(--green); background: rgba(52, 211, 153, 0.05);} |
| .results-section { display: none; background: var(--white); border-radius: var(--radius-xl); padding: var(--space-8); box-shadow: var(--shadow-xl); border: 1px solid var(--gray-200);} |
| .results-section.active { display: block; animation: slideIn 0.4s cubic-bezier(0.4, 0, 0.2, 1);} |
| @keyframes slideIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); }} |
| .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--space-4); margin: var(--space-6) 0;} |
| .stat-card { background: var(--gray-50); padding: var(--space-6); border-radius: var(--radius-lg); text-align: center; border: 1px solid var(--gray-200); transition: all 0.2s ease;} |
| .stat-card:hover { transform: translateY(-2px); box-shadow: var(--shadow);} |
| .stat-number { font-size: var(--text-3xl); font-weight: 700; color: var(--blue);} |
| .stat-label { font-size: var(--text-sm); color: var(--gray-600); margin-top: var(--space-2); text-transform: uppercase; letter-spacing: 0.05em;} |
| .timeline-container { background: var(--gray-50); border-radius: var(--radius-lg); padding: var(--space-6); margin: var(--space-6) 0; border: 1px solid var(--gray-200);} |
| .timeline-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-4);} |
| .timeline-ruler { height: 40px; background: linear-gradient(90deg, var(--gray-100), var(--gray-200)); border-radius: var(--radius); position: relative; margin-bottom: var(--space-6);} |
| .timeline-takes { position: relative; min-height: 100px;} |
| .timeline-take { position: absolute; height: 32px; background: var(--blue); border-radius: var(--radius-sm); display: flex; align-items: center; padding: 0 var(--space-3); color: var(--white); font-weight: 500; font-size: var(--text-xs); cursor: pointer; transition: all 0.2s ease;} |
| .timeline-take:hover { transform: scale(1.02); box-shadow: var(--shadow-md);} |
| .timeline-take.audio-track { background: var(--orange); height: 24px;} |
| .timeline-take.grouped { background: var(--purple); height: 40px;} |
| .timeline-take.missing { background: var(--red); opacity: 0.7;} |
| .blocks-container { margin-top: var(--space-8);} |
| .script-group { background: var(--white); border-radius: var(--radius-xl); margin-bottom: var(--space-6); overflow: hidden; border: 1px solid var(--gray-200); transition: all 0.2s ease;} |
| .script-group:hover { box-shadow: var(--shadow);} |
| .group-header { background: var(--gray-50); padding: var(--space-4) var(--space-6); border-bottom: 1px solid var(--gray-200); display: flex; justify-content: space-between; align-items: center;} |
| .group-info { display: flex; align-items: center; gap: var(--space-3);} |
| .group-badge { background: var(--purple); color: var(--white); padding: var(--space-2) var(--space-4); border-radius: var(--radius-sm); font-weight: 600; font-size: var(--text-sm);} |
| .group-single .group-badge { background: var(--green);} |
| .flow-score { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-4); background: var(--gray-100); border-radius: var(--radius-xl); font-weight: 500; color: var(--gray-700);} |
| .script-block { padding: var(--space-6); border-left: 3px solid var(--blue); transition: all 0.2s ease;} |
| .script-block:not(:last-child) { border-bottom: 1px solid var(--gray-100);} |
| .script-block:hover { background: var(--gray-50);} |
| .script-block.missing-take { border-left-color: var(--red); background: rgba(239, 68, 68, 0.02);} |
| .block-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: var(--space-4);} |
| .block-number { background: var(--blue); color: var(--white); padding: var(--space-1) var(--space-3); border-radius: var(--radius-sm); font-weight: 600; font-size: var(--text-sm);} |
| .script-block.missing-take .block-number { background: var(--red);} |
| .precision-score { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-1) var(--space-3); background: var(--gray-100); border-radius: var(--radius-sm); font-weight: 500; color: var(--green); font-size: var(--text-sm);} |
| .script-text { font-size: var(--text-base); line-height: 1.7; margin-bottom: var(--space-4); background: var(--gray-50); padding: var(--space-4); border-radius: var(--radius); border-left: 3px solid var(--blue);} |
| .script-block.missing-take .script-text { border-left-color: var(--red);} |
| .audio-waveform { background: var(--gray-900); border-radius: var(--radius); padding: var(--space-3); margin: var(--space-4) 0; height: 48px; position: relative; overflow: hidden;} |
| .waveform-bars { display: flex; align-items: flex-end; height: 100%; gap: 1px;} |
| .waveform-bar { flex: 1; background: var(--orange); border-radius: 1px 1px 0 0; transition: height 0.2s ease;} |
| .take-selection { display: grid; grid-template-columns: 1fr 2fr; gap: var(--space-6); margin-top: var(--space-6);} |
| .take-video-container { background: var(--gray-900); border-radius: var(--radius-lg); overflow: hidden; position: relative;} |
| .take-video { width: 100%; height: 180px; object-fit: cover;} |
| .take-overlay { position: absolute; top: var(--space-3); right: var(--space-3); background: var(--green); color: var(--white); padding: var(--space-1) var(--space-3); border-radius: var(--radius-sm); font-weight: 600; font-size: var(--text-xs);} |
| .take-details { background: var(--gray-50); border-radius: var(--radius-lg); padding: var(--space-6);} |
| .take-metrics { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-3); margin-top: var(--space-4);} |
| .metric-item { display: flex; justify-content: space-between; padding: var(--space-3); background: var(--white); border-radius: var(--radius); font-size: var(--text-sm);} |
| .metric-label { color: var(--gray-600);} |
| .metric-value { font-weight: 600; color: var(--blue);} |
| .export-section { margin-top: var(--space-8); padding: var(--space-6); background: var(--gray-50); border-radius: var(--radius-xl); border: 2px dashed var(--gray-300);} |
| .export-buttons { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: var(--space-3); margin-top: var(--space-4);} |
| .export-btn { background: var(--white); color: var(--gray-900); border: 1px solid var(--gray-300); padding: var(--space-3) var(--space-4); border-radius: var(--radius-lg); cursor: pointer; font-weight: 500; transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; gap: var(--space-2);} |
| .export-btn:hover { background: var(--gray-900); color: var(--white); border-color: var(--gray-900);} |
| .export-btn:disabled { opacity: 0.5; cursor: not-allowed;} |
| .precision-indicator-small { display: inline-flex; align-items: center; gap: var(--space-1); padding: var(--space-1) var(--space-2); background: var(--gray-100); border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: 500; color: var(--green);} |
| .audio-indicator-small { display: inline-flex; align-items: center; gap: var(--space-1); padding: var(--space-1) var(--space-2); background: var(--gray-100); border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: 500; color: var(--orange);} |
| .srt-preview { background: var(--gray-50); border: 1px solid var(--gray-200); border-radius: var(--radius-lg); padding: var(--space-4); margin-top: var(--space-4); max-height: 200px; overflow-y: auto; font-family: 'SF Mono', Monaco, Consolas, monospace; font-size: var(--text-sm);} |
| .srt-preview h4 { margin-bottom: var(--space-3); color: var(--gray-900); font-weight: 600; display: flex; align-items: center; gap: var(--space-2);} |
| .srt-block { margin-bottom: var(--space-2); padding: var(--space-3); background: var(--white); border-radius: var(--radius); border-left: 3px solid var(--blue);} |
| .whisper-status { background: linear-gradient(135deg, var(--gray-50), var(--gray-100)); border: 1px solid var(--gray-200); border-radius: var(--radius-lg); padding: var(--space-6); margin: var(--space-6) 0; text-align: center;} |
| .whisper-status h3 { color: var(--gray-900); margin-bottom: var(--space-4); font-weight: 600; display: flex; align-items: center; justify-content: center; gap: var(--space-2);} |
| .whisper-metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: var(--space-3); margin-top: var(--space-4);} |
| .whisper-metric { background: var(--white); padding: var(--space-4); border-radius: var(--radius); text-align: center;} |
| .whisper-metric-value { font-size: var(--text-2xl); font-weight: 700; color: var(--blue);} |
| .whisper-metric-label { font-size: var(--text-xs); color: var(--gray-600); margin-top: var(--space-2); text-transform: uppercase; letter-spacing: 0.05em;} |
| .video-preview-modal,.export-progress { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.8); z-index: 10000;} |
| .video-preview-modal.active,.export-progress.active { display: flex; align-items: center; justify-content: center;} |
| .preview-content { background: var(--white); border-radius: var(--radius-xl); padding: var(--space-6); max-width: 1000px; width: 90%; max-height: 90vh; overflow-y: auto;} |
| .preview-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-6);} |
| .preview-header button { background: none; border: none; color: var(--gray-600); font-size: var(--text-xl); cursor: pointer; padding: var(--space-2);} |
| .preview-video-container { background: var(--gray-900); border-radius: var(--radius-lg); overflow: hidden; margin-bottom: var(--space-6);} |
| .preview-video { width: 100%; max-height: 400px; object-fit: contain;} |
| .preview-controls { display: flex; gap: var(--space-3); justify-content: center; flex-wrap: wrap;} |
| .export-progress { padding: var(--space-6); background: var(--white); border-radius: var(--radius-xl); min-width: 300px;} |
| .flow-indicator { display: inline-flex; align-items: center; gap: var(--space-1); padding: var(--space-1) var(--space-2); background: var(--gray-100); border-radius: var(--radius-sm); font-size: var(--text-xs); font-weight: 500; color: var(--purple);} |
| .transcription-status { display: none; background: var(--gray-50); border: 1px solid var(--gray-200); border-radius: var(--radius-lg); padding: var(--space-4); margin: var(--space-4) 0; text-align: center;} |
| .transcription-status.active { display: block;} |
| .missing-take-warning { background: rgba(239, 68, 68, 0.05); border: 1px solid var(--red); border-radius: var(--radius-lg); padding: var(--space-4); margin-top: var(--space-4); color: var(--red);} |
| .audio-sync-indicator { display: inline-flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); background: var(--gray-100); border-radius: var(--radius-xl); font-weight: 500; color: var(--orange); font-size: var(--text-sm);} |
| .error-indicator { color: var(--red);} |
| .warning-indicator { color: var(--orange);} |
| @media (max-width: 1024px) { .upload-grid { grid-template-columns: repeat(2, 1fr); } |
| Copied .take-selection { |
| grid-template-columns: 1fr; |
| } } |
| @media (max-width: 768px) { .header-content { padding: var(--space-3) var(--space-4); } |
| Copied .main-container { |
| padding: var(--space-6) var(--space-4); |
| } |
|
|
| .upload-grid { |
| grid-template-columns: 1fr; |
| gap: var(--space-4); |
| } |
|
|
| .audience-selector { |
| grid-template-columns: 1fr; |
| } |
|
|
| .export-buttons { |
| grid-template-columns: 1fr; |
| } |
|
|
| .stats-grid { |
| grid-template-columns: repeat(2, 1fr); |
| } } |
| @media (max-width: 480px) { .logo { font-size: var(--text-lg); } |
| Copied .section-title { |
| font-size: var(--text-lg); |
| } |
|
|
| .stats-grid { |
| grid-template-columns: 1fr; |
| } |
|
|
| .take-metrics { |
| grid-template-columns: 1fr; |
| } } |