| :root { |
| color-scheme: light; |
| --ink: #17211c; |
| --muted: #64716b; |
| --line: #d8e0da; |
| --panel: #ffffff; |
| --paper: #f7f4ec; |
| --soft: #edf7f4; |
| --accent: #0f766e; |
| --accent-strong: #0a544f; |
| --accent-warm: #b7791f; |
| --warn: #a91f45; |
| --ok: #176a3a; |
| --shadow: 0 20px 60px rgba(23, 33, 28, 0.1); |
| font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; |
| } |
|
|
| * { |
| box-sizing: border-box; |
| } |
|
|
| html { |
| min-width: 320px; |
| } |
|
|
| body { |
| margin: 0; |
| min-height: 100vh; |
| background: |
| linear-gradient(135deg, rgba(15, 118, 110, 0.08), transparent 42%), |
| linear-gradient(180deg, #fbfcfb 0%, var(--paper) 100%); |
| color: var(--ink); |
| } |
|
|
| button, |
| input, |
| select, |
| audio { |
| font: inherit; |
| } |
|
|
| button, |
| .download-button { |
| min-height: 52px; |
| border: 0; |
| border-radius: 8px; |
| background: var(--accent); |
| color: #fff; |
| cursor: pointer; |
| display: inline-flex; |
| align-items: center; |
| justify-content: center; |
| gap: 10px; |
| font-weight: 850; |
| padding: 0 22px; |
| text-decoration: none; |
| white-space: nowrap; |
| box-shadow: 0 10px 22px rgba(15, 118, 110, 0.2); |
| } |
|
|
| button:hover, |
| .download-button:hover { |
| background: var(--accent-strong); |
| } |
|
|
| button:focus-visible, |
| .download-button:focus-visible, |
| input:focus-visible, |
| select:focus-visible, |
| .dropzone label:focus-within { |
| outline: 4px solid rgba(15, 118, 110, 0.22); |
| outline-offset: 3px; |
| } |
|
|
| button:disabled { |
| cursor: wait; |
| opacity: 0.74; |
| } |
|
|
| .app-shell { |
| width: min(1100px, calc(100% - 32px)); |
| margin: 0 auto; |
| padding: 36px 0; |
| } |
|
|
| .topbar { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 16px; |
| margin-bottom: 26px; |
| } |
|
|
| h1, |
| h2, |
| p { |
| margin: 0; |
| } |
|
|
| h1 { |
| font-size: clamp(2.2rem, 4vw, 4.4rem); |
| line-height: 1; |
| letter-spacing: 0; |
| } |
|
|
| h2 { |
| font-size: clamp(1.35rem, 2vw, 1.75rem); |
| line-height: 1.15; |
| letter-spacing: 0; |
| } |
|
|
| h3 { |
| margin: 0; |
| font-size: 1rem; |
| line-height: 1.2; |
| letter-spacing: 0; |
| } |
|
|
| .eyebrow { |
| color: var(--accent-strong); |
| font-size: 0.78rem; |
| font-weight: 850; |
| letter-spacing: 0.08em; |
| margin-bottom: 8px; |
| text-transform: uppercase; |
| } |
|
|
| .panel { |
| background: rgba(255, 255, 255, 0.96); |
| border: 1px solid var(--line); |
| border-radius: 8px; |
| box-shadow: var(--shadow); |
| padding: clamp(20px, 3vw, 30px); |
| } |
|
|
| .login-panel { |
| max-width: 620px; |
| } |
|
|
| .workspace { |
| display: grid; |
| grid-template-columns: minmax(0, 0.92fr) minmax(360px, 1.08fr); |
| gap: 22px; |
| align-items: start; |
| } |
|
|
| .panel-heading, |
| .status-header { |
| display: flex; |
| align-items: flex-start; |
| justify-content: space-between; |
| gap: 14px; |
| } |
|
|
| .panel-heading { |
| justify-content: flex-start; |
| } |
|
|
| .step-mark { |
| width: 42px; |
| height: 42px; |
| flex: 0 0 42px; |
| border-radius: 50%; |
| background: var(--accent); |
| color: #fff; |
| display: grid; |
| place-items: center; |
| font-weight: 900; |
| box-shadow: 0 10px 20px rgba(15, 118, 110, 0.18); |
| } |
|
|
| .stack { |
| display: grid; |
| gap: 10px; |
| margin-top: 22px; |
| } |
|
|
| .inline { |
| display: grid; |
| grid-template-columns: 1fr auto; |
| gap: 12px; |
| } |
|
|
| label { |
| color: var(--muted); |
| font-weight: 800; |
| } |
|
|
| input[type="password"], |
| select { |
| width: 100%; |
| min-height: 52px; |
| border: 1px solid var(--line); |
| border-radius: 8px; |
| padding: 0 14px; |
| background: #fff; |
| color: var(--ink); |
| } |
|
|
| .field-group { |
| display: grid; |
| gap: 8px; |
| } |
|
|
| .quiet-button { |
| min-width: 112px; |
| background: #ffffff; |
| border: 1px solid var(--line); |
| box-shadow: none; |
| color: var(--accent-strong); |
| } |
|
|
| .quiet-button:hover { |
| background: var(--soft); |
| color: var(--accent-strong); |
| } |
|
|
| .upload-panel, |
| .status-panel { |
| display: grid; |
| gap: 18px; |
| } |
|
|
| #jobMessage { |
| color: var(--muted); |
| font-size: 1.02rem; |
| line-height: 1.55; |
| } |
|
|
| .quality-hint { |
| border: 1px solid #ead08a; |
| border-radius: 8px; |
| background: #fff8df; |
| color: #654708; |
| font-weight: 800; |
| line-height: 1.45; |
| padding: 12px 14px; |
| } |
|
|
| .quality-hint.poor { |
| border-color: #efc4cf; |
| background: #fff2f5; |
| color: var(--warn); |
| } |
|
|
| .engine-notice { |
| border: 1px solid #b7ddd7; |
| border-radius: 8px; |
| background: var(--soft); |
| color: var(--accent-strong); |
| font-weight: 800; |
| line-height: 1.45; |
| padding: 13px 15px; |
| } |
|
|
| .engine-notice.warning { |
| border-color: #efc4cf; |
| background: #fff2f5; |
| color: var(--warn); |
| } |
|
|
| .dropzone { |
| display: grid; |
| gap: 14px; |
| } |
|
|
| .dropzone input { |
| inline-size: 1px; |
| block-size: 1px; |
| opacity: 0; |
| position: absolute; |
| } |
|
|
| .dropzone label { |
| min-height: 230px; |
| border: 2px dashed #b8c8be; |
| border-radius: 8px; |
| background: linear-gradient(180deg, #ffffff, #f8fbf9); |
| display: grid; |
| place-items: center; |
| align-content: center; |
| gap: 10px; |
| padding: 28px; |
| text-align: center; |
| cursor: pointer; |
| transition: border-color 150ms ease, background 150ms ease, transform 150ms ease; |
| } |
|
|
| .dropzone label:hover, |
| .dropzone.is-dragging label { |
| border-color: var(--accent); |
| background: var(--soft); |
| transform: translateY(-1px); |
| } |
|
|
| .file-icon { |
| width: 64px; |
| height: 74px; |
| border: 2px solid var(--accent); |
| border-radius: 8px; |
| color: var(--accent-strong); |
| display: grid; |
| place-items: center; |
| font-size: 0.9rem; |
| font-weight: 950; |
| background: #fff; |
| } |
|
|
| .drop-title { |
| color: var(--ink); |
| font-size: 1.35rem; |
| font-weight: 950; |
| } |
|
|
| #fileName { |
| color: var(--muted); |
| max-width: 100%; |
| overflow-wrap: anywhere; |
| } |
|
|
| .badge { |
| min-width: 76px; |
| background: #fff7db; |
| border: 1px solid #e9d08d; |
| border-radius: 999px; |
| color: #664309; |
| font-weight: 900; |
| padding: 8px 13px; |
| text-align: center; |
| } |
|
|
| .badge.complete { |
| background: #edf8ef; |
| border-color: #b8dec0; |
| color: var(--ok); |
| } |
|
|
| .badge.failed { |
| background: #fff2f5; |
| border-color: #efc4cf; |
| color: var(--warn); |
| } |
|
|
| .progress-summary { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| gap: 12px; |
| color: var(--accent-strong); |
| font-weight: 900; |
| } |
|
|
| #progressPercent { |
| min-width: 46px; |
| text-align: end; |
| color: var(--muted); |
| } |
|
|
| .meter { |
| width: 100%; |
| height: 14px; |
| overflow: hidden; |
| border-radius: 999px; |
| background: #e5ece6; |
| } |
|
|
| .meter span { |
| display: block; |
| width: 0%; |
| height: 100%; |
| background: linear-gradient(90deg, var(--accent), var(--accent-warm)); |
| transition: width 180ms ease; |
| } |
|
|
| .stage-detail { |
| border: 1px solid #cfe0d8; |
| border-radius: 8px; |
| background: #f8fbf9; |
| display: grid; |
| gap: 4px; |
| padding: 12px 14px; |
| } |
|
|
| .stage-detail span { |
| color: var(--accent-strong); |
| font-size: 0.72rem; |
| font-weight: 900; |
| letter-spacing: 0.08em; |
| text-transform: uppercase; |
| } |
|
|
| .stage-detail strong { |
| font-size: 1rem; |
| line-height: 1.2; |
| } |
|
|
| .stage-detail small { |
| color: var(--muted); |
| font-size: 0.95rem; |
| line-height: 1.35; |
| overflow-wrap: anywhere; |
| } |
|
|
| .stage-detail .stage-meta { |
| border-top: 1px solid #dce8e2; |
| color: #596760; |
| font-size: 0.82rem; |
| font-weight: 750; |
| margin-top: 4px; |
| padding-top: 8px; |
| } |
|
|
| .stage-item-progress { |
| display: grid; |
| gap: 8px; |
| padding-top: 4px; |
| } |
|
|
| .stage-item-progress > div:first-child { |
| align-items: baseline; |
| display: flex; |
| gap: 10px; |
| justify-content: space-between; |
| } |
|
|
| .stage-item-progress span { |
| letter-spacing: 0; |
| text-transform: none; |
| } |
|
|
| .stage-item-progress strong { |
| color: var(--accent-strong); |
| font-size: 0.92rem; |
| } |
|
|
| .stage-item-meter { |
| background: #e3ece7; |
| border-radius: 999px; |
| height: 8px; |
| overflow: hidden; |
| } |
|
|
| .stage-item-meter span { |
| background: var(--accent); |
| display: block; |
| height: 100%; |
| transition: width 180ms ease; |
| width: 0%; |
| } |
|
|
| .stage-list { |
| display: grid; |
| grid-template-columns: repeat(5, minmax(0, 1fr)); |
| gap: 8px; |
| list-style: none; |
| margin: -4px 0 0; |
| padding: 0; |
| } |
|
|
| .stage-list li { |
| min-width: 0; |
| color: var(--muted); |
| display: flex; |
| align-items: center; |
| gap: 7px; |
| font-size: 0.82rem; |
| font-weight: 850; |
| line-height: 1.2; |
| } |
|
|
| .stage-dot { |
| width: 10px; |
| height: 10px; |
| flex: 0 0 10px; |
| border-radius: 50%; |
| background: #d8e1dc; |
| } |
|
|
| .stage-list li.done { |
| color: var(--accent-strong); |
| } |
|
|
| .stage-list li.done .stage-dot { |
| background: var(--accent); |
| } |
|
|
| .stage-list li.active { |
| color: var(--ink); |
| } |
|
|
| .stage-list li.active .stage-dot { |
| background: var(--accent-warm); |
| box-shadow: 0 0 0 4px rgba(181, 128, 31, 0.16); |
| } |
|
|
| .stage-list li.failed { |
| color: var(--warn); |
| } |
|
|
| .stage-list li.failed .stage-dot { |
| background: var(--warn); |
| } |
|
|
| .stats { |
| display: grid; |
| grid-template-columns: repeat(6, minmax(0, 1fr)); |
| gap: 10px; |
| margin: 0; |
| } |
|
|
| .stats div { |
| border: 1px solid var(--line); |
| border-radius: 8px; |
| background: #fcfdfc; |
| padding: 12px; |
| min-width: 0; |
| } |
|
|
| dt { |
| color: var(--muted); |
| font-size: 0.78rem; |
| font-weight: 850; |
| } |
|
|
| dd { |
| margin: 6px 0 0; |
| font-size: clamp(1rem, 1.7vw, 1.32rem); |
| font-weight: 950; |
| overflow-wrap: anywhere; |
| } |
|
|
| .audio-panel { |
| display: grid; |
| gap: 12px; |
| } |
|
|
| audio { |
| width: 100%; |
| } |
|
|
| .browser-speech-panel { |
| background: #f3fbf8; |
| border: 1px solid #b8ddd2; |
| border-radius: 8px; |
| display: grid; |
| gap: 12px; |
| padding: 14px; |
| } |
|
|
| .browser-speech-panel p { |
| color: var(--accent-strong); |
| font-size: 0.93rem; |
| font-weight: 750; |
| line-height: 1.55; |
| margin: 0; |
| } |
|
|
| .browser-speech-actions { |
| display: flex; |
| flex-wrap: wrap; |
| gap: 10px; |
| } |
|
|
| .browser-speech-actions button { |
| flex: 1 1 150px; |
| } |
|
|
| .transcript-panel { |
| border: 1px solid var(--line); |
| border-radius: 8px; |
| display: grid; |
| gap: 12px; |
| padding: 14px; |
| } |
|
|
| .transcript-header { |
| align-items: start; |
| display: flex; |
| gap: 12px; |
| justify-content: space-between; |
| } |
|
|
| .transcript-header h3 { |
| font-size: 1rem; |
| margin: 4px 0 0; |
| } |
|
|
| .transcript-panel pre { |
| background: #fbfcfb; |
| border: 1px solid var(--line); |
| border-radius: 8px; |
| color: var(--ink); |
| font-family: Tahoma, "Segoe UI", Arial, sans-serif; |
| font-size: 1.05rem; |
| line-height: 1.9; |
| margin: 0; |
| max-height: 340px; |
| overflow: auto; |
| padding: 14px; |
| text-align: right; |
| white-space: pre-wrap; |
| word-break: normal; |
| } |
|
|
| .transcript-panel small { |
| color: var(--muted); |
| font-size: 0.84rem; |
| line-height: 1.45; |
| } |
|
|
| .comparison-panel { |
| border: 1px solid var(--line); |
| border-radius: 8px; |
| display: grid; |
| gap: 12px; |
| padding: 14px; |
| } |
|
|
| .comparison-header, |
| .comparison-group-heading { |
| align-items: start; |
| display: flex; |
| gap: 12px; |
| justify-content: space-between; |
| } |
|
|
| .comparison-header h3, |
| .comparison-group-heading h4 { |
| font-size: 1rem; |
| margin: 4px 0 0; |
| } |
|
|
| .comparison-panel p, |
| .comparison-group-heading span, |
| .comparison-sample span, |
| .comparison-sample small { |
| color: var(--muted); |
| font-size: 0.86rem; |
| line-height: 1.45; |
| margin: 0; |
| } |
|
|
| .comparison-meter { |
| background: var(--soft); |
| border-radius: 999px; |
| height: 10px; |
| overflow: hidden; |
| } |
|
|
| .comparison-meter span { |
| background: linear-gradient(90deg, var(--accent), #c78321); |
| display: block; |
| height: 100%; |
| width: 0; |
| } |
|
|
| .comparison-results { |
| display: grid; |
| gap: 14px; |
| } |
|
|
| .comparison-group { |
| border-top: 1px solid var(--line); |
| display: grid; |
| gap: 12px; |
| padding-top: 14px; |
| } |
|
|
| .comparison-group pre { |
| background: #fbfcfb; |
| border: 1px solid var(--line); |
| border-radius: 8px; |
| font-family: Tahoma, "Segoe UI", Arial, sans-serif; |
| font-size: 0.94rem; |
| line-height: 1.75; |
| margin: 0; |
| max-height: 170px; |
| overflow: auto; |
| padding: 12px; |
| text-align: right; |
| white-space: pre-wrap; |
| } |
|
|
| .comparison-samples { |
| display: grid; |
| gap: 10px; |
| grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); |
| } |
|
|
| .comparison-sample { |
| background: #fcfdfc; |
| border: 1px solid var(--line); |
| border-radius: 8px; |
| display: grid; |
| gap: 8px; |
| padding: 12px; |
| } |
|
|
| .comparison-sample.failed { |
| background: #fff8f8; |
| border-color: #f0c7cf; |
| } |
|
|
| .comparison-sample audio { |
| width: 100%; |
| } |
|
|
| .comparison-sample a { |
| color: var(--accent-strong); |
| font-weight: 850; |
| text-decoration: none; |
| } |
|
|
| .comparison-error { |
| color: var(--warn) !important; |
| font-weight: 750; |
| } |
|
|
| .history-panel { |
| border-top: 1px solid var(--line); |
| display: grid; |
| gap: 12px; |
| padding-top: 4px; |
| } |
|
|
| .history-panel ul { |
| display: grid; |
| gap: 8px; |
| list-style: none; |
| margin: 0; |
| padding: 0; |
| } |
|
|
| .history-panel li { |
| align-items: center; |
| background: #fcfdfc; |
| border: 1px solid var(--line); |
| border-radius: 8px; |
| display: grid; |
| gap: 10px; |
| grid-template-columns: minmax(0, 1fr) auto; |
| padding: 12px; |
| } |
|
|
| .history-panel strong, |
| .history-panel span { |
| display: block; |
| overflow-wrap: anywhere; |
| } |
|
|
| .history-panel strong { |
| font-size: 0.95rem; |
| } |
|
|
| .history-panel span { |
| color: var(--muted); |
| font-size: 0.84rem; |
| margin-top: 3px; |
| } |
|
|
| .history-panel a { |
| color: var(--accent-strong); |
| font-weight: 850; |
| text-decoration: none; |
| } |
|
|
| .history-panel a:hover { |
| text-decoration: underline; |
| } |
|
|
| .history-actions { |
| align-items: center; |
| display: flex; |
| flex-wrap: wrap; |
| gap: 8px; |
| justify-content: flex-end; |
| } |
|
|
| .link-button { |
| min-height: 40px; |
| border: 1px solid var(--line); |
| background: #ffffff; |
| box-shadow: none; |
| color: var(--accent-strong); |
| padding: 0 14px; |
| } |
|
|
| .link-button:hover { |
| background: var(--soft); |
| color: var(--accent-strong); |
| } |
|
|
| .error { |
| min-height: 1.4em; |
| color: var(--warn); |
| font-weight: 750; |
| line-height: 1.45; |
| } |
|
|
| .hidden { |
| display: none !important; |
| } |
|
|
| @media (max-width: 860px) { |
| .workspace, |
| .inline, |
| .stats { |
| grid-template-columns: 1fr; |
| } |
|
|
| .topbar, |
| .status-header { |
| align-items: flex-start; |
| } |
|
|
| .topbar { |
| flex-direction: column; |
| } |
|
|
| .quiet-button { |
| width: 100%; |
| } |
| } |
|
|
| @media (max-width: 520px) { |
| .app-shell { |
| width: min(100% - 22px, 1100px); |
| padding: 22px 0; |
| } |
|
|
| .panel { |
| padding: 18px; |
| } |
|
|
| .panel-heading { |
| align-items: center; |
| } |
|
|
| .dropzone label { |
| min-height: 200px; |
| } |
|
|
| button, |
| .download-button { |
| width: 100%; |
| } |
|
|
| .history-panel li { |
| grid-template-columns: 1fr; |
| } |
|
|
| .history-actions { |
| justify-content: stretch; |
| } |
|
|
| .history-actions > * { |
| flex: 1 1 100%; |
| } |
|
|
| .stage-list { |
| grid-template-columns: 1fr; |
| } |
|
|
| .stage-list li { |
| font-size: 0.9rem; |
| } |
| } |
|
|