:root { --bg: #0F2E2B; --surface: #15403A; --surface-raised: #1B4D45; --accent: #E0922E; --accent-strong: #F0A744; --text: #F3ECDD; --text-muted: #9FBDB6; --error: #C7402B; --border: rgba(243, 236, 221, 0.12); --font-display: 'Fraunces', serif; --font-body: 'Work Sans', sans-serif; --font-mono: 'JetBrains Mono', monospace; } * { box-sizing: border-box; } body { margin: 0; background: var(--bg); color: var(--text); font-family: var(--font-body); -webkit-font-smoothing: antialiased; } .app { max-width: 560px; margin: 0 auto; padding: 24px 20px calc(48px + env(safe-area-inset-bottom)); min-height: 100vh; } .app-header { margin-bottom: 28px; } .brand { display: flex; align-items: center; gap: 12px; } .brand-mark { color: var(--accent); flex-shrink: 0; } h1 { font-family: var(--font-display); font-size: 1.6rem; font-weight: 700; margin: 0; letter-spacing: -0.01em; } .tagline { margin: 2px 0 0; color: var(--text-muted); font-size: 0.85rem; } /* Tabs */ .tabs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; background: var(--surface); padding: 4px; border-radius: 12px; margin-bottom: 22px; } .tab { appearance: none; border: none; background: transparent; color: var(--text-muted); font-family: var(--font-body); font-weight: 500; font-size: 0.85rem; padding: 10px 4px; border-radius: 9px; cursor: pointer; transition: background 0.15s ease, color 0.15s ease; } .tab.is-active { background: var(--accent); color: #1A1206; } .tab:focus-visible { outline: 2px solid var(--accent-strong); outline-offset: 2px; } /* Panels */ .panel { display: none; } .panel.is-active { display: block; } .field-label { display: block; font-size: 0.8rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); margin-bottom: 8px; } .field-label--secondary { margin-top: 18px; } .field-hint { font-family: var(--font-mono); font-size: 0.75rem; color: var(--text-muted); margin: -4px 0 10px; } textarea, input[type="file"], input[type="number"] { width: 100%; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; color: var(--text); font-family: var(--font-body); font-size: 1rem; padding: 12px 14px; } textarea { resize: vertical; min-height: 110px; } textarea:focus, input:focus { outline: none; border-color: var(--accent); } .char-count { text-align: right; font-family: var(--font-mono); font-size: 0.75rem; color: var(--text-muted); margin: 6px 0 0; } /* Voice selector */ .voice-select { margin: 22px 0 18px; } .voice-options { display: flex; gap: 8px; } .voice-pill { position: relative; flex: 1; text-align: center; background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 10px; cursor: pointer; font-size: 0.9rem; font-weight: 500; transition: border-color 0.15s ease, background 0.15s ease; } .voice-pill input { position: absolute; opacity: 0; inset: 0; cursor: pointer; } .voice-pill:has(input:checked) { border-color: var(--accent); background: rgba(224, 146, 46, 0.14); } /* Submit */ .primary-btn { width: 100%; background: var(--accent); color: #1A1206; border: none; border-radius: 12px; padding: 15px; font-family: var(--font-body); font-weight: 600; font-size: 1rem; cursor: pointer; transition: background 0.15s ease, transform 0.05s ease; } .primary-btn:hover { background: var(--accent-strong); } .primary-btn:active { transform: scale(0.99); } .primary-btn:disabled { opacity: 0.5; cursor: not-allowed; } /* Status / waveform (signature element) */ .status { margin-top: 26px; text-align: center; } .waveform { display: flex; justify-content: center; align-items: center; gap: 5px; height: 36px; margin-bottom: 10px; } .waveform span { width: 4px; height: 100%; background: var(--accent); border-radius: 2px; animation: wave 1.1s ease-in-out infinite; } .waveform span:nth-child(2) { animation-delay: 0.1s; } .waveform span:nth-child(3) { animation-delay: 0.2s; } .waveform span:nth-child(4) { animation-delay: 0.3s; } .waveform span:nth-child(5) { animation-delay: 0.4s; } @keyframes wave { 0%, 100% { transform: scaleY(0.3); } 50% { transform: scaleY(1); } } @media (prefers-reduced-motion: reduce) { .waveform span { animation: none; transform: scaleY(0.7); } } #status-text { font-family: var(--font-mono); font-size: 0.85rem; color: var(--text-muted); margin: 0; } /* Result */ .result { margin-top: 26px; background: var(--surface); border-radius: 14px; padding: 18px; } .result-text { font-family: var(--font-display); font-size: 1.15rem; line-height: 1.5; margin: 0 0 16px; } audio { width: 100%; } .download-link { display: inline-block; margin-top: 12px; color: var(--accent-strong); font-family: var(--font-mono); font-size: 0.85rem; text-decoration: none; border-bottom: 1px solid currentColor; } /* Error */ .error { margin-top: 20px; background: rgba(199, 64, 43, 0.14); border: 1px solid var(--error); border-radius: 10px; padding: 14px 16px; font-size: 0.9rem; color: var(--text); } [hidden] { display: none !important; }