diff --git "a/index.html" "b/index.html" --- "a/index.html" +++ "b/index.html" @@ -11,7 +11,7 @@ body { font-family: 'Inter', sans-serif; - background-color: #f8fafc; + background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); } .waveform { @@ -21,14 +21,15 @@ align-items: center; justify-content: space-between; padding: 0 10px; - border-radius: 8px; + border-radius: 12px; position: relative; overflow: hidden; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); } .waveform-bar { width: 3px; - background-color: rgba(255, 255, 255, 0.7); + background-color: rgba(255, 255, 255, 0.8); border-radius: 3px; animation: equalize 1.5s infinite ease-in-out; animation-delay: calc(var(--delay) * 0.1s); @@ -36,7 +37,7 @@ @keyframes equalize { 0%, 100% { height: 10px; } - 50% { height: 30px; } + 50% { height: 35px; } } .document-container { @@ -46,65 +47,83 @@ } .document-container::-webkit-scrollbar { - width: 6px; + width: 8px; } .document-container::-webkit-scrollbar-track { - background: #f1f5f9; + background: #f8fafc; + border-radius: 10px; } .document-container::-webkit-scrollbar-thumb { - background-color: #cbd5e1; - border-radius: 20px; + background: linear-gradient(145deg, #cbd5e1, #94a3b8); + border-radius: 10px; } .highlight { - background-color: #fef08a; - transition: background-color 0.3s ease; + background: linear-gradient(90deg, #fef08a, #fde047); + transition: all 0.3s ease; + border-radius: 4px; + padding: 2px 4px; + margin: 0 2px; + } + + .voice-option { + transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); + border-radius: 12px; } .voice-option:hover { - transform: scale(1.03); - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + transform: translateY(-2px); + box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1); + } + + .voice-option.selected { + background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%); + border: 2px solid #3b82f6; } .progress-bar { - height: 4px; + height: 8px; background-color: #e2e8f0; - border-radius: 2px; + border-radius: 10px; overflow: hidden; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.06); } .progress-fill { height: 100%; - background-color: #3b82f6; + background: linear-gradient(90deg, #3b82f6, #8b5cf6); width: 0%; transition: width 0.1s linear; + border-radius: 10px; } .settings-panel { - transition: all 0.3s ease; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); max-height: 0; overflow: hidden; } .settings-panel.open { - max-height: 500px; + max-height: 600px; } .tab-active { - border-bottom: 2px solid #3b82f6; - color: #3b82f6; - font-weight: 500; + background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%); + color: white; + border-radius: 8px; + transform: scale(1.05); } .language-flag { - width: 24px; - height: 16px; + width: 28px; + height: 20px; display: inline-block; - margin-right: 8px; + margin-right: 10px; background-size: cover; - border-radius: 2px; + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } /* Language flags */ @@ -140,44 +159,157 @@ background-image: url('https://flagcdn.com/nz.svg'); } - .typing-cursor { - display: inline-block; - width: 2px; - height: 1em; - background-color: #3b82f6; - animation: blink 1s infinite; - vertical-align: middle; + .notification { + position: fixed; + top: 20px; + right: 20px; + background: rgba(255, 255, 255, 0.95); + backdrop-filter: blur(10px); + border-left: 4px solid #3b82f6; + padding: 16px 20px; + border-radius: 12px; + box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1); + transform: translateX(100%); + opacity: 0; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + z-index: 1000; + min-width: 300px; + } + + .notification.show { + transform: translateX(0); + opacity: 1; + } + + .notification.success { + border-left-color: #10b981; + } + + .notification.error { + border-left-color: #ef4444; + } + + .notification.warning { + border-left-color: #f59e0b; + } + + .glass-effect { + background: rgba(255, 255, 255, 0.9); + backdrop-filter: blur(20px); + border: 1px solid rgba(255, 255, 255, 0.2); + } + + .btn-primary { + background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%); + transition: all 0.2s ease; + border-radius: 8px; + } + + .btn-primary:hover { + transform: translateY(-1px); + box-shadow: 0 10px 25px -5px rgba(59, 130, 246, 0.4); } - @keyframes blink { - 0%, 100% { opacity: 1; } - 50% { opacity: 0; } + .btn-secondary { + background: rgba(107, 114, 128, 0.1); + backdrop-filter: blur(10px); + transition: all 0.2s ease; + border-radius: 8px; + } + + .btn-secondary:hover { + background: rgba(107, 114, 128, 0.2); + transform: translateY(-1px); + } + + #document-editor:empty::before { + content: attr(data-placeholder); + color: #9ca3af; + font-style: italic; } .document-toolbar { + background: rgba(255, 255, 255, 0.95); + backdrop-filter: blur(10px); + border-radius: 12px; + padding: 8px; transition: all 0.3s ease; } - .document-toolbar.hidden { - opacity: 0; - transform: translateY(-10px); - pointer-events: none; + .format-btn { + border-radius: 8px; + transition: all 0.2s ease; + } + + .format-btn:hover { + background: linear-gradient(135deg, #f3f4f6 0%, #e5e7eb 100%); + transform: scale(1.1); + } + + .card-hover { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + } + + .card-hover:hover { + transform: translateY(-2px); + box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.1); + } + + input[type="range"] { + -webkit-appearance: none; + appearance: none; + background: transparent; + cursor: pointer; + } + + input[type="range"]::-webkit-slider-track { + background: #e2e8f0; + height: 8px; + border-radius: 5px; + } + + input[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + height: 20px; + width: 20px; + border-radius: 50%; + background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%); + cursor: pointer; + border: 2px solid white; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + } + + input[type="range"]::-moz-range-track { + background: #e2e8f0; + height: 8px; + border-radius: 5px; + } + + input[type="range"]::-moz-range-thumb { + height: 20px; + width: 20px; + border-radius: 50%; + background: linear-gradient(135deg, #3b82f6 0%, #8b5cf6 100%); + cursor: pointer; + border: 2px solid white; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } - -
+ +
-

HD TTS Document Reader

-

Natural human voices with long context support using Google's free HD voices

-
- +

HD TTS Document Reader

+

Natural human voices with cloud storage powered by Val Town

+
+ HD Voices - + Val Town Storage - + Serverless
@@ -185,40 +317,40 @@
-
-
-
-

Document Reader

-
- -
-
-
- - - +
+
+ + +
-
+
- -
- - @@ -226,19 +358,19 @@
-
- -
- - - -
@@ -246,100 +378,101 @@