@tailwind base; @tailwind components; @tailwind utilities; :root { color-scheme: light; font-family: Inter, ui-sans-serif, system-ui, sans-serif; --bg: #f6f7f9; --surface: #ffffff; --surface-muted: #eef2f6; --surface-strong: #e2e8f0; --text: #111827; --text-muted: #64748b; --text-soft: #94a3b8; --border: #d9e2ec; --border-strong: #b7c4d4; --primary: #0f766e; --primary-strong: #115e59; --primary-soft: #ccfbf1; --accent: #d97706; --accent-soft: #fef3c7; --danger: #be123c; --danger-soft: #ffe4e6; --shadow: 0 18px 40px rgb(15 23 42 / 0.08); --radius: 8px; } :root[data-theme="dark"] { color-scheme: dark; --bg: #09111f; --surface: #111827; --surface-muted: #172033; --surface-strong: #243044; --text: #f8fafc; --text-muted: #a8b3c7; --text-soft: #748198; --border: #28364d; --border-strong: #3b4d67; --primary: #2dd4bf; --primary-strong: #5eead4; --primary-soft: #133b3b; --accent: #fbbf24; --accent-soft: #3d2e12; --danger: #fb7185; --danger-soft: #3d1723; --shadow: 0 20px 44px rgb(0 0 0 / 0.26); } * { box-sizing: border-box; } body { margin: 0; background: var(--bg); color: var(--text); } button, input, select, textarea { font: inherit; } button, select { cursor: pointer; } button:disabled { cursor: not-allowed; } .app-shell { min-height: 100vh; background: linear-gradient(180deg, color-mix(in srgb, var(--surface-muted) 60%, transparent), transparent 360px), var(--bg); color: var(--text); } .app-header { position: sticky; top: 0; z-index: 20; display: flex; min-height: 76px; align-items: center; justify-content: space-between; gap: 20px; border-bottom: 1px solid var(--border); background: color-mix(in srgb, var(--surface) 92%, transparent); padding: 14px clamp(16px, 4vw, 44px); backdrop-filter: blur(18px); } .brand-block, .header-actions, .clip-actions, .metric-row, .editor-topbar, .panel-heading, .toolbar-select, .mode-pill, .status-pill, .icon-button, .ghost-button, .primary-button, .inspector-actions a, .inspector-actions button { display: flex; align-items: center; } .brand-block { min-width: 0; gap: 12px; } .brand-mark { display: grid; width: 44px; height: 44px; flex: 0 0 auto; place-items: center; border-radius: var(--radius); background: #020617; color: white; } .brand-block h1, .panel-heading h2, .editor-topbar h2, .mini-transcript h3 { margin: 0; color: var(--text); letter-spacing: 0; } .brand-block h1 { font-size: 1.2rem; font-weight: 800; } .brand-block p, .panel-heading p, .helper-text, .file-name { margin: 2px 0 0; color: var(--text-muted); font-size: 0.86rem; line-height: 1.5; } .header-actions { flex-wrap: wrap; justify-content: flex-end; gap: 8px; } .mode-pill, .status-pill { min-height: 34px; border-radius: 999px; border: 1px solid var(--border); padding: 0 10px; color: var(--text-muted); font-size: 0.76rem; font-weight: 800; text-transform: uppercase; } .mode-pill.prod, .status-pill.completed { border-color: color-mix(in srgb, var(--primary) 50%, var(--border)); background: var(--primary-soft); color: var(--primary-strong); } .mode-pill.demo, .status-pill.running, .status-pill.queued { border-color: color-mix(in srgb, #0ea5e9 45%, var(--border)); background: color-mix(in srgb, #e0f2fe 70%, var(--surface)); color: #0369a1; } :root[data-theme="dark"] .mode-pill.demo, :root[data-theme="dark"] .status-pill.running, :root[data-theme="dark"] .status-pill.queued { background: #102a3d; color: #7dd3fc; } .status-pill.failed { border-color: color-mix(in srgb, var(--danger) 50%, var(--border)); background: var(--danger-soft); color: var(--danger); } .toolbar-select, .icon-button, .ghost-button, .clip-actions button, .download-button, .inspector-actions a, .inspector-actions button { min-height: 36px; justify-content: center; gap: 8px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface); color: var(--text); text-decoration: none; } .toolbar-select { padding: 0 8px; background: var(--surface); } .toolbar-select select { min-width: 52px; border: 0; background: var(--surface); color: var(--text); -webkit-text-fill-color: var(--text); outline: none; } .toolbar-select select option, .text-input option { background: #ffffff; color: #111827; } :root[data-theme="dark"] .toolbar-select select option, :root[data-theme="dark"] .text-input option { background: #111827; color: #f8fafc; } .icon-button { width: 36px; padding: 0; } .workspace-grid { display: grid; grid-template-columns: minmax(320px, 420px) minmax(0, 1fr); gap: 14px; align-items: start; padding: 18px clamp(16px, 3vw, 40px) 36px; } .center-column, .results-column, .form-stack { display: grid; align-content: start; gap: 16px; } .panel { border: 1px solid var(--border); border-radius: var(--radius); background: color-mix(in srgb, var(--surface) 96%, transparent); box-shadow: var(--shadow); } .input-panel, .progress-panel, .transcript-panel, .clips-panel, .editor-main, .inspector-panel { padding: 18px; } .input-panel { position: static; overflow: visible; } .results-column { grid-column: 1 / -1; } .panel-heading { justify-content: space-between; gap: 12px; } .panel-heading.compact { margin-bottom: 12px; } .panel-heading h2, .editor-topbar h2, .mini-transcript h3 { font-size: 0.92rem; font-weight: 850; text-transform: uppercase; } .divider { height: 1px; background: var(--border); } .form-grid-two { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; } .field-block { display: grid; gap: 6px; } .field-label { color: var(--text); font-size: 0.82rem; font-weight: 750; } .text-input, .file-input, textarea, .timeline input { width: 100%; border: 1px solid var(--border-strong); border-radius: 7px; background: var(--surface); color: var(--text); outline: none; } .text-input, .file-input { min-height: 42px; padding: 9px 11px; } textarea { resize: vertical; padding: 10px 11px; line-height: 1.5; } .text-input:focus, .file-input:focus, textarea:focus, .timeline input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 18%, transparent); } .segmented { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; border-radius: var(--radius); background: var(--surface-muted); padding: 4px; } .segmented button { display: flex; min-height: 40px; align-items: center; justify-content: center; gap: 8px; border: 0; border-radius: 6px; background: transparent; color: var(--text-muted); } .segmented button.active { background: var(--surface); color: var(--text); box-shadow: 0 1px 2px rgb(15 23 42 / 0.10); } .primary-button { min-height: 44px; justify-content: center; gap: 10px; border: 1px solid var(--primary-strong); border-radius: 7px; background: var(--primary-strong); color: white; font-weight: 850; } :root[data-theme="dark"] .primary-button { color: #042f2e; } .primary-button:disabled { opacity: 0.55; } .progress-percent { color: var(--text); font-size: 2rem; font-variant-numeric: tabular-nums; } .progress-track { height: 12px; overflow: hidden; border-radius: 999px; background: var(--surface-strong); margin-top: 16px; } .progress-bar { height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--primary), var(--accent)); transition: width 260ms ease; } .step-list { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 8px; margin-top: 16px; } .step-item { display: grid; gap: 6px; min-width: 0; color: var(--text-soft); font-size: 0.75rem; font-weight: 750; } .step-item span { display: grid; width: 28px; height: 28px; place-items: center; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); font-variant-numeric: tabular-nums; } .step-item p { margin: 0; overflow-wrap: anywhere; } .step-item.done, .step-item.active { color: var(--text); } .step-item.done span, .step-item.active span { border-color: var(--primary); background: var(--primary-soft); color: var(--primary-strong); } .timing-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; margin-top: 16px; } .timing-grid div { border: 1px solid var(--border); border-radius: 7px; background: var(--surface-muted); padding: 10px; } .timing-grid span, .inspector-list dt, .cue-row span, .transcript-row span, .mini-transcript span { color: var(--text-muted); font-size: 0.76rem; font-weight: 750; } .timing-grid strong { display: block; margin-top: 4px; color: var(--text); font-size: 1.02rem; font-variant-numeric: tabular-nums; } .transcript-list { display: grid; max-height: 420px; overflow: auto; gap: 8px; padding-right: 6px; } .transcript-row { display: grid; grid-template-columns: 112px 1fr; gap: 12px; border-bottom: 1px solid var(--border); padding-bottom: 8px; } .transcript-row p, .mini-transcript p { margin: 0; color: var(--text); font-size: 0.9rem; line-height: 1.55; } .empty-state { display: grid; min-height: 280px; place-items: center; align-content: center; gap: 10px; border: 1px dashed var(--border-strong); border-radius: var(--radius); background: var(--surface-muted); color: var(--text-muted); text-align: center; } .empty-state h3 { margin: 0; color: var(--text); font-size: 1rem; } .empty-state p { max-width: 270px; margin: 0; line-height: 1.5; } .clip-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; align-items: start; } .clip-card { overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface-muted); min-width: 0; } .clip-video { display: grid; aspect-ratio: 9 / 16; max-height: 300px; place-items: center; background: #050b16; color: white; } .clip-video video { width: 100%; height: 100%; object-fit: contain; } .clip-body { display: grid; gap: 12px; padding: 13px; } .clip-title-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; } .clip-title-row h3 { margin: 0; color: var(--text); font-size: 0.96rem; font-weight: 850; line-height: 1.35; } .clip-title-row p { margin: 5px 0 0; color: var(--text-muted); font-size: 0.82rem; line-height: 1.45; } .score { display: inline-flex; min-width: 52px; min-height: 34px; flex: 0 0 auto; align-items: center; justify-content: center; gap: 5px; border-radius: 7px; background: var(--accent-soft); color: var(--accent); font-weight: 900; } .metric-row { justify-content: space-between; gap: 8px; color: var(--text-muted); font-size: 0.8rem; font-weight: 750; } .metric-row span { display: inline-flex; align-items: center; gap: 5px; } .clip-actions { display: grid; grid-template-columns: minmax(0, 1fr) auto auto auto auto; gap: 8px; } .clip-actions button, .download-button { min-width: 38px; padding: 0 10px; white-space: nowrap; } .clip-actions button:not(.action-primary):not(.action-approve), .download-button { width: 38px; padding: 0; } .clip-actions .action-approve { min-width: 92px; } .subtitle-snippet { display: -webkit-box; min-height: 54px; margin: 0; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3; border: 1px solid var(--border); border-radius: 7px; background: var(--surface); color: var(--text); font-size: 0.84rem; line-height: 1.45; padding: 10px; } .download-button { margin-left: auto; border-color: var(--primary); background: var(--primary); color: white; } :root[data-theme="dark"] .download-button { color: #042f2e; } .editor-shell { display: grid; gap: 14px; padding: 18px clamp(16px, 3vw, 40px) 32px; } .editor-topbar { justify-content: space-between; gap: 18px; } .editor-topbar > div { flex: 1; } .editor-topbar p { margin: 4px 0 0; color: var(--text-muted); } .ghost-button { padding: 0 12px; } .editor-grid { display: grid; grid-template-columns: 74px minmax(0, 1fr) minmax(330px, 420px); gap: 14px; align-items: start; } .tool-rail { position: sticky; top: 96px; display: grid; gap: 8px; border: 1px solid var(--border); border-radius: var(--radius); background: color-mix(in srgb, var(--surface) 96%, transparent); padding: 8px; box-shadow: var(--shadow); } .tool-rail button { display: grid; min-height: 58px; place-items: center; gap: 4px; border: 1px solid transparent; border-radius: 7px; background: transparent; color: var(--text-muted); font-size: 0.68rem; font-weight: 800; } .tool-rail button.active, .tool-rail button:hover { border-color: color-mix(in srgb, var(--primary) 45%, var(--border)); background: var(--primary-soft); color: var(--primary-strong); } .editor-main, .inspector-panel { display: grid; gap: 16px; } .editor-preview { display: grid; position: relative; min-height: 520px; max-height: 68vh; overflow: hidden; place-items: center; border-radius: var(--radius); background: #050b16; color: white; } .editor-preview video { width: 100%; height: 100%; max-height: 68vh; object-fit: contain; } .caption-preview { position: absolute; left: 50%; width: min(82%, 760px); transform: translateX(-50%); color: white; font-weight: 900; letter-spacing: 0; line-height: 1.08; text-align: center; text-transform: none; pointer-events: none; } .caption-preview .lit { color: var(--accent); } .caption-preview.pop { animation: caption-pop 900ms ease-in-out infinite alternate; } .caption-preview.bounce { animation: caption-bounce 760ms ease-in-out infinite alternate; } @keyframes caption-pop { from { transform: translateX(-50%) scale(0.98); } to { transform: translateX(-50%) scale(1.04); } } @keyframes caption-bounce { from { transform: translateX(-50%) translateY(0); } to { transform: translateX(-50%) translateY(-8px); } } .range-editor, .subtitle-editor, .timeline-workbench, .caption-style-panel { display: grid; gap: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface-muted); padding: 14px; } .timeline-visual { position: relative; height: 54px; overflow: hidden; border-radius: 7px; background: var(--surface); border: 1px solid var(--border); } .timeline-fill { position: absolute; inset: 21px 14px; border-radius: 999px; background: var(--surface-strong); } .timeline-window { position: absolute; top: 14px; height: 26px; border: 2px solid var(--primary); border-radius: 999px; background: color-mix(in srgb, var(--primary) 24%, transparent); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--primary) 35%, transparent); } .timeline-window::before, .timeline-window::after { position: absolute; top: 4px; width: 2px; height: 14px; border-radius: 999px; background: var(--primary-strong); content: ""; } .timeline-window::before { left: 8px; } .timeline-window::after { right: 8px; } .timeline-visual span { position: absolute; top: 18px; width: 1px; height: 18px; background: var(--border-strong); } .timeline { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 82px; align-items: end; gap: 10px; } .editor-toolbox { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; } .editor-toolbox span { margin-right: 2px; color: var(--text); font-size: 0.82rem; font-weight: 850; } .editor-toolbox button { min-height: 34px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface); color: var(--text); padding: 0 10px; font-size: 0.82rem; font-weight: 750; } .editor-toolbox button:hover { border-color: var(--primary); } .range-sliders { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; } .range-sliders label { display: grid; gap: 6px; color: var(--text-muted); font-size: 0.76rem; font-weight: 800; } .range-sliders input[type="range"] { width: 100%; accent-color: var(--primary); } .timeline label { display: grid; gap: 5px; color: var(--text-muted); font-size: 0.76rem; font-weight: 800; } .timeline input { min-height: 38px; padding: 7px 9px; } .timeline strong { min-height: 38px; border-radius: 7px; background: var(--surface-strong); padding: 9px 8px; color: var(--text); text-align: center; font-variant-numeric: tabular-nums; } .track-stack { display: grid; gap: 8px; } .track-row { display: grid; grid-template-columns: 92px minmax(0, 1fr); gap: 10px; align-items: center; } .track-row > span { color: var(--text-muted); font-size: 0.75rem; font-weight: 850; } .track-lane { position: relative; min-height: 42px; overflow: hidden; border: 1px solid var(--border); border-radius: 7px; background: repeating-linear-gradient( 90deg, transparent 0, transparent 11.8%, color-mix(in srgb, var(--border) 70%, transparent) 12%, transparent 12.2% ), var(--surface); } .track-clip { position: absolute; top: 7px; bottom: 7px; display: flex; min-width: 54px; align-items: center; overflow: hidden; border-radius: 6px; color: #042f2e; font-size: 0.72rem; font-weight: 850; padding: 0 8px; text-overflow: ellipsis; white-space: nowrap; } .track-clip.video { background: linear-gradient(90deg, #5eead4, #22c55e); } .track-clip.subtitle { background: #fde68a; color: #422006; } .waveform { position: absolute; inset: 8px 10px; display: flex; align-items: center; gap: 4px; } .waveform span { width: 4px; border-radius: 999px; background: color-mix(in srgb, var(--primary) 70%, var(--text-soft)); } .cue-list { display: grid; gap: 10px; } .cue-row { display: grid; grid-template-columns: 112px minmax(0, 1fr); gap: 10px; align-items: start; } .inspector-list { display: grid; gap: 12px; margin: 0; } .inspector-list div { border-bottom: 1px solid var(--border); padding-bottom: 10px; } .inspector-list dd { margin: 4px 0 0; color: var(--text); line-height: 1.45; } .inspector-actions { display: grid; gap: 8px; } .inspector-actions a, .inspector-actions button { min-height: 40px; padding: 0 12px; } .inspector-actions .danger { border-color: color-mix(in srgb, var(--danger) 45%, var(--border)); background: var(--danger-soft); color: var(--danger); } .caption-style-panel { background: color-mix(in srgb, var(--surface-muted) 92%, var(--surface)); } .preset-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .preset-row button { min-height: 36px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface); color: var(--text); font-weight: 800; } .style-grid, .color-grid { display: grid; gap: 10px; } .color-grid { grid-template-columns: 1fr 1fr; } .color-field, .range-control { display: grid; gap: 7px; } .color-field span, .range-control span { display: flex; justify-content: space-between; color: var(--text-muted); font-size: 0.76rem; font-weight: 800; } .range-control strong { color: var(--text); font-variant-numeric: tabular-nums; } .color-field input { width: 100%; height: 38px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface); padding: 4px; } .range-control input { width: 100%; accent-color: var(--primary); } .mini-transcript { display: grid; gap: 10px; border-top: 1px solid var(--border); padding-top: 14px; } .mini-transcript div { display: grid; gap: 4px; } .error-box { border: 1px solid color-mix(in srgb, var(--danger) 45%, var(--border)); border-radius: 7px; background: var(--danger-soft); padding: 10px; color: var(--danger); font-size: 0.9rem; line-height: 1.45; } .spin { animation: spin 0.9s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } @media (max-width: 1260px) { .workspace-grid { grid-template-columns: minmax(290px, 340px) minmax(0, 1fr); } .editor-grid { grid-template-columns: 64px minmax(0, 1fr); } .inspector-panel { grid-column: 1 / -1; } .results-column { grid-column: 1 / -1; } .clip-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 900px) { .app-header, .editor-topbar { align-items: flex-start; flex-direction: column; } .workspace-grid, .editor-grid { grid-template-columns: 1fr; } .tool-rail { position: static; display: flex; overflow-x: auto; } .tool-rail button { min-width: 72px; } .input-panel { position: static; max-height: none; } .clip-grid { grid-template-columns: 1fr; } .step-list { grid-template-columns: repeat(3, minmax(0, 1fr)); } .editor-preview { min-height: 420px; } } @media (max-width: 620px) { .form-grid-two, .range-sliders, .timeline, .cue-row, .track-row, .transcript-row { grid-template-columns: 1fr; } .color-grid, .preset-row { grid-template-columns: 1fr; } .progress-percent { font-size: 1.5rem; } .step-list { grid-template-columns: repeat(2, minmax(0, 1fr)); } }