Spaces:
Running
Running
| /* Modern TTS UI - Lightweight & Beautiful */ | |
| :root { | |
| --primary: #6366f1; | |
| --primary-dark: #4f46e5; | |
| --secondary: #8b5cf6; | |
| --success: #10b981; | |
| --warning: #f59e0b; | |
| --danger: #ef4444; | |
| --bg: #0f172a; | |
| --bg-light: #1e293b; | |
| --surface: #334155; | |
| --text: #f1f5f9; | |
| --text-muted: #94a3b8; | |
| --border: #475569; | |
| --glass: rgba(255, 255, 255, 0.05); | |
| --shadow: 0 8px 32px rgba(0, 0, 0, 0.3); | |
| --radius: 16px; | |
| } | |
| /* Mode Toggle Buttons */ | |
| .mode-btn { | |
| padding: 12px 20px; | |
| background: rgba(255, 255, 255, 0.05); | |
| border: 2px solid rgba(255, 255, 255, 0.1); | |
| border-radius: 12px; | |
| color: var(--text-muted); | |
| font-size: 0.95rem; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: all 0.3s ease; | |
| } | |
| .mode-btn:hover { | |
| background: rgba(255, 255, 255, 0.08); | |
| border-color: rgba(255, 255, 255, 0.2); | |
| transform: translateY(-2px); | |
| } | |
| .mode-btn.active { | |
| background: linear-gradient(135deg, var(--primary), var(--secondary)); | |
| border-color: transparent; | |
| color: white; | |
| box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3); | |
| } | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| body { | |
| font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', sans-serif; | |
| background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); | |
| color: var(--text); | |
| line-height: 1.6; | |
| min-height: 100vh; | |
| padding: 20px; | |
| overflow-x: hidden; | |
| } | |
| /* Header */ | |
| h1 { | |
| font-size: clamp(1.5rem, 5vw, 2.5rem); | |
| font-weight: 700; | |
| background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); | |
| -webkit-background-clip: text; | |
| -webkit-text-fill-color: transparent; | |
| background-clip: text; | |
| margin-bottom: 8px; | |
| text-align: center; | |
| } | |
| .subtitle { | |
| text-align: center; | |
| color: var(--text-muted); | |
| margin-bottom: 32px; | |
| font-size: 0.95rem; | |
| } | |
| /* Layout */ | |
| .row { | |
| display: grid; | |
| grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); | |
| gap: 20px; | |
| margin-bottom: 20px; | |
| } | |
| .col { | |
| background: var(--glass); | |
| backdrop-filter: blur(10px); | |
| border: 1px solid var(--border); | |
| border-radius: var(--radius); | |
| padding: 24px; | |
| box-shadow: var(--shadow); | |
| transition: transform 0.2s, box-shadow 0.2s; | |
| } | |
| .col:hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4); | |
| } | |
| /* Fieldset */ | |
| fieldset { | |
| border: none; | |
| margin-bottom: 20px; | |
| padding: 0; | |
| } | |
| legend { | |
| font-size: 1.1rem; | |
| font-weight: 600; | |
| color: var(--primary); | |
| margin-bottom: 12px; | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| legend::before { | |
| content: "▶"; | |
| font-size: 0.8rem; | |
| color: var(--secondary); | |
| } | |
| /* Inputs */ | |
| label { | |
| display: block; | |
| margin: 12px 0 6px; | |
| color: var(--text); | |
| font-size: 0.9rem; | |
| font-weight: 500; | |
| } | |
| input[type="range"] { | |
| width: 100%; | |
| height: 6px; | |
| background: linear-gradient(90deg, var(--primary), var(--secondary)); | |
| border-radius: 10px; | |
| outline: none; | |
| opacity: 0.8; | |
| transition: opacity 0.2s; | |
| cursor: pointer; | |
| } | |
| input[type="range"]:hover { | |
| opacity: 1; | |
| } | |
| input[type="range"]::-webkit-slider-thumb { | |
| appearance: none; | |
| width: 18px; | |
| height: 18px; | |
| background: white; | |
| border-radius: 50%; | |
| cursor: pointer; | |
| box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); | |
| transition: transform 0.2s; | |
| } | |
| input[type="range"]::-webkit-slider-thumb:hover { | |
| transform: scale(1.2); | |
| } | |
| input[type="range"]::-moz-range-thumb { | |
| width: 18px; | |
| height: 18px; | |
| background: white; | |
| border-radius: 50%; | |
| cursor: pointer; | |
| border: none; | |
| box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); | |
| } | |
| input[type="text"], | |
| input[type="file"], | |
| select { | |
| width: 100%; | |
| padding: 10px 14px; | |
| background: var(--bg-light); | |
| border: 1px solid var(--border); | |
| border-radius: 10px; | |
| color: var(--text); | |
| font-size: 0.95rem; | |
| transition: all 0.2s; | |
| } | |
| input[type="text"]:focus, | |
| select:focus { | |
| outline: none; | |
| border-color: var(--primary); | |
| box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); | |
| } | |
| input[type="file"]::file-selector-button { | |
| padding: 8px 16px; | |
| background: var(--primary); | |
| color: white; | |
| border: none; | |
| border-radius: 8px; | |
| cursor: pointer; | |
| margin-right: 12px; | |
| transition: background 0.2s; | |
| } | |
| input[type="file"]::file-selector-button:hover { | |
| background: var(--primary-dark); | |
| } | |
| textarea { | |
| width: 100%; | |
| min-height: 120px; | |
| padding: 12px; | |
| background: var(--bg-light); | |
| border: 1px solid var(--border); | |
| border-radius: 10px; | |
| color: var(--text); | |
| font-family: inherit; | |
| font-size: 0.95rem; | |
| resize: vertical; | |
| transition: all 0.2s; | |
| } | |
| textarea:focus { | |
| outline: none; | |
| border-color: var(--primary); | |
| box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); | |
| } | |
| /* Checkboxes & Radio */ | |
| input[type="checkbox"], | |
| input[type="radio"] { | |
| width: 18px; | |
| height: 18px; | |
| margin-right: 8px; | |
| cursor: pointer; | |
| accent-color: var(--primary); | |
| } | |
| /* Buttons */ | |
| button { | |
| padding: 12px 24px; | |
| background: linear-gradient(135deg, var(--primary), var(--secondary)); | |
| color: white; | |
| border: none; | |
| border-radius: 10px; | |
| font-weight: 600; | |
| font-size: 0.95rem; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3); | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| button::before { | |
| content: ""; | |
| position: absolute; | |
| top: 0; | |
| left: -100%; | |
| width: 100%; | |
| height: 100%; | |
| background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); | |
| transition: left 0.5s; | |
| } | |
| button:hover::before { | |
| left: 100%; | |
| } | |
| button:hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 6px 20px rgba(99, 102, 241, 0.4); | |
| } | |
| button:active { | |
| transform: translateY(0); | |
| } | |
| button:disabled { | |
| opacity: 0.5; | |
| cursor: not-allowed; | |
| transform: none; | |
| } | |
| button.secondary { | |
| background: var(--surface); | |
| box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); | |
| } | |
| button.secondary:hover { | |
| box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3); | |
| } | |
| /* Chips */ | |
| .chip { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 6px; | |
| padding: 6px 14px; | |
| background: var(--surface); | |
| border: 1px solid var(--border); | |
| border-radius: 999px; | |
| font-size: 0.85rem; | |
| font-weight: 500; | |
| margin: 4px; | |
| transition: all 0.2s; | |
| } | |
| .chip.active { | |
| background: linear-gradient(135deg, var(--primary), var(--secondary)); | |
| border-color: transparent; | |
| color: white; | |
| } | |
| .chip::before { | |
| content: "●"; | |
| font-size: 0.6rem; | |
| } | |
| .chip.success::before { color: var(--success); } | |
| .chip.warning::before { color: var(--warning); } | |
| .chip.danger::before { color: var(--danger); } | |
| /* Audio Player */ | |
| audio { | |
| width: 100%; | |
| margin: 16px 0; | |
| border-radius: 10px; | |
| filter: hue-rotate(200deg); | |
| } | |
| /* Download Link */ | |
| a { | |
| display: inline-block; | |
| padding: 12px 24px; | |
| background: var(--success); | |
| color: white; | |
| text-decoration: none; | |
| border-radius: 10px; | |
| font-weight: 600; | |
| transition: all 0.2s; | |
| box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3); | |
| } | |
| a:hover { | |
| background: #059669; | |
| transform: translateY(-2px); | |
| box-shadow: 0 6px 20px rgba(16, 185, 129, 0.4); | |
| } | |
| /* Log Box */ | |
| .mono { | |
| font-family: 'SF Mono', 'Monaco', 'Consolas', monospace; | |
| font-size: 0.8rem; | |
| line-height: 1.6; | |
| color: var(--text-muted); | |
| } | |
| #log { | |
| background: var(--bg); | |
| border: 1px solid var(--border); | |
| border-radius: 10px; | |
| padding: 12px; | |
| max-height: 200px; | |
| overflow-y: auto; | |
| white-space: pre-wrap; | |
| word-wrap: break-word; | |
| } | |
| #log::-webkit-scrollbar { | |
| width: 8px; | |
| } | |
| #log::-webkit-scrollbar-track { | |
| background: var(--bg-light); | |
| border-radius: 10px; | |
| } | |
| #log::-webkit-scrollbar-thumb { | |
| background: var(--primary); | |
| border-radius: 10px; | |
| } | |
| /* Grid Layouts */ | |
| .grid { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 12px; | |
| } | |
| /* Utilities */ | |
| .hidden { display: none ; } | |
| .muted { color: var(--text-muted); } | |
| .text-center { text-align: center; } | |
| .mt-1 { margin-top: 8px; } | |
| .mt-2 { margin-top: 16px; } | |
| .mb-1 { margin-bottom: 8px; } | |
| .mb-2 { margin-bottom: 16px; } | |
| /* Responsive */ | |
| @media (max-width: 768px) { | |
| .row { | |
| grid-template-columns: 1fr; | |
| } | |
| .grid { | |
| grid-template-columns: 1fr; | |
| } | |
| .col { | |
| padding: 16px; | |
| } | |
| h1 { | |
| font-size: 1.75rem; | |
| } | |
| } | |
| /* Animations */ | |
| @keyframes fadeIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(10px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| .col { | |
| animation: fadeIn 0.5s ease-out; | |
| } | |
| .col:nth-child(1) { animation-delay: 0.1s; } | |
| .col:nth-child(2) { animation-delay: 0.2s; } | |
| .col:nth-child(3) { animation-delay: 0.3s; } | |
| /* Loading Spinner */ | |
| @keyframes spin { | |
| to { transform: rotate(360deg); } | |
| } | |
| .spinner { | |
| display: inline-block; | |
| width: 16px; | |
| height: 16px; | |
| border: 2px solid rgba(255, 255, 255, 0.3); | |
| border-top-color: white; | |
| border-radius: 50%; | |
| animation: spin 0.6s linear infinite; | |
| } | |
| /* Toast/Status Messages */ | |
| .status-message { | |
| padding: 12px 20px; | |
| border-radius: 10px; | |
| margin: 12px 0; | |
| font-weight: 500; | |
| animation: fadeIn 0.3s ease-out; | |
| } | |
| .status-message.success { | |
| background: rgba(16, 185, 129, 0.2); | |
| border: 1px solid var(--success); | |
| color: var(--success); | |
| } | |
| .status-message.error { | |
| background: rgba(239, 68, 68, 0.2); | |
| border: 1px solid var(--danger); | |
| color: var(--danger); | |
| } | |
| .status-message.info { | |
| background: rgba(99, 102, 241, 0.2); | |
| border: 1px solid var(--primary); | |
| color: var(--primary); | |
| } | |