Spaces:
Running
Running
Add Voice Builder CTA
Browse files- index.html +1 -17
- script.js +0 -26
- styles.css +26 -127
index.html
CHANGED
|
@@ -69,7 +69,7 @@
|
|
| 69 |
<span class="speaker-item" data-voice="F3">Jessica</span><span class="speaker-separator">, </span>
|
| 70 |
<span class="speaker-item" data-voice="F4">Olivia</span><span class="speaker-separator">, </span>
|
| 71 |
<span class="speaker-item" data-voice="F5">Emily</span>
|
| 72 |
-
<
|
| 73 |
</div>
|
| 74 |
</div>
|
| 75 |
<div class="language-info">
|
|
@@ -145,22 +145,6 @@
|
|
| 145 |
</div>
|
| 146 |
|
| 147 |
<div class="demo-output-section">
|
| 148 |
-
<!-- Coming Soon Modal -->
|
| 149 |
-
<div id="comingSoonModal" class="coming-soon-modal">
|
| 150 |
-
<div class="coming-soon-modal-overlay"></div>
|
| 151 |
-
<div class="coming-soon-modal-content">
|
| 152 |
-
<div class="coming-soon-modal-header">
|
| 153 |
-
<h3>Coming Soon</h3>
|
| 154 |
-
</div>
|
| 155 |
-
<div class="coming-soon-modal-body">
|
| 156 |
-
<p>Custom voice creation feature will be available soon.</p>
|
| 157 |
-
</div>
|
| 158 |
-
<div class="coming-soon-modal-footer">
|
| 159 |
-
<button class="coming-soon-modal-btn" id="comingSoonCloseBtn">OK</button>
|
| 160 |
-
</div>
|
| 161 |
-
</div>
|
| 162 |
-
</div>
|
| 163 |
-
|
| 164 |
<!-- Parameters in horizontal layout -->
|
| 165 |
<div class="demo-params-row">
|
| 166 |
<div class="demo-param">
|
|
|
|
| 69 |
<span class="speaker-item" data-voice="F3">Jessica</span><span class="speaker-separator">, </span>
|
| 70 |
<span class="speaker-item" data-voice="F4">Olivia</span><span class="speaker-separator">, </span>
|
| 71 |
<span class="speaker-item" data-voice="F5">Emily</span>
|
| 72 |
+
<a class="speaker-clone-link" id="createVoiceBtn" href="https://supertonic.supertone.ai/voice-builder" target="_blank" rel="noopener noreferrer">Clone your own voice ↗</a>
|
| 73 |
</div>
|
| 74 |
</div>
|
| 75 |
<div class="language-info">
|
|
|
|
| 145 |
</div>
|
| 146 |
|
| 147 |
<div class="demo-output-section">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
<!-- Parameters in horizontal layout -->
|
| 149 |
<div class="demo-params-row">
|
| 150 |
<div class="demo-param">
|
script.js
CHANGED
|
@@ -2701,9 +2701,6 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
| 2701 |
// Speaker list handler (replaces voice select dropdown)
|
| 2702 |
const speakerList = document.getElementById('speakerList');
|
| 2703 |
const speakerItems = speakerList ? speakerList.querySelectorAll('.speaker-item[data-voice]') : [];
|
| 2704 |
-
const createVoiceBtn = document.getElementById('createVoiceBtn');
|
| 2705 |
-
const comingSoonModal = document.getElementById('comingSoonModal');
|
| 2706 |
-
const comingSoonCloseBtn = document.getElementById('comingSoonCloseBtn');
|
| 2707 |
let voiceSelectDisabled = false;
|
| 2708 |
|
| 2709 |
// Update active speaker item (global function for use in switchVoice)
|
|
@@ -2963,29 +2960,6 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
| 2963 |
}
|
| 2964 |
}
|
| 2965 |
|
| 2966 |
-
// Handle "Create your own voice" button
|
| 2967 |
-
if (createVoiceBtn && comingSoonModal) {
|
| 2968 |
-
createVoiceBtn.addEventListener('click', () => {
|
| 2969 |
-
comingSoonModal.classList.add('show');
|
| 2970 |
-
});
|
| 2971 |
-
}
|
| 2972 |
-
|
| 2973 |
-
// Close modal handlers
|
| 2974 |
-
if (comingSoonCloseBtn && comingSoonModal) {
|
| 2975 |
-
comingSoonCloseBtn.addEventListener('click', () => {
|
| 2976 |
-
comingSoonModal.classList.remove('show');
|
| 2977 |
-
});
|
| 2978 |
-
}
|
| 2979 |
-
|
| 2980 |
-
if (comingSoonModal) {
|
| 2981 |
-
const overlay = comingSoonModal.querySelector('.coming-soon-modal-overlay');
|
| 2982 |
-
if (overlay) {
|
| 2983 |
-
overlay.addEventListener('click', () => {
|
| 2984 |
-
comingSoonModal.classList.remove('show');
|
| 2985 |
-
});
|
| 2986 |
-
}
|
| 2987 |
-
}
|
| 2988 |
-
|
| 2989 |
// Language selection handler
|
| 2990 |
const languageList = document.getElementById('languageList');
|
| 2991 |
const languageItems = languageList ? languageList.querySelectorAll('.speaker-item[data-language]') : [];
|
|
|
|
| 2701 |
// Speaker list handler (replaces voice select dropdown)
|
| 2702 |
const speakerList = document.getElementById('speakerList');
|
| 2703 |
const speakerItems = speakerList ? speakerList.querySelectorAll('.speaker-item[data-voice]') : [];
|
|
|
|
|
|
|
|
|
|
| 2704 |
let voiceSelectDisabled = false;
|
| 2705 |
|
| 2706 |
// Update active speaker item (global function for use in switchVoice)
|
|
|
|
| 2960 |
}
|
| 2961 |
}
|
| 2962 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2963 |
// Language selection handler
|
| 2964 |
const languageList = document.getElementById('languageList');
|
| 2965 |
const languageItems = languageList ? languageList.querySelectorAll('.speaker-item[data-language]') : [];
|
styles.css
CHANGED
|
@@ -957,17 +957,34 @@ body {
|
|
| 957 |
margin-right: 0;
|
| 958 |
}
|
| 959 |
|
| 960 |
-
.speaker-
|
| 961 |
-
|
| 962 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 963 |
}
|
| 964 |
|
| 965 |
-
.speaker-
|
| 966 |
-
|
| 967 |
-
|
| 968 |
-
|
| 969 |
-
|
| 970 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 971 |
}
|
| 972 |
|
| 973 |
/* Speaker Tooltip */
|
|
@@ -986,103 +1003,6 @@ body {
|
|
| 986 |
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
| 987 |
}
|
| 988 |
|
| 989 |
-
/* Coming Soon Modal */
|
| 990 |
-
.coming-soon-modal {
|
| 991 |
-
display: none;
|
| 992 |
-
position: fixed;
|
| 993 |
-
top: 0;
|
| 994 |
-
left: 0;
|
| 995 |
-
right: 0;
|
| 996 |
-
bottom: 0;
|
| 997 |
-
z-index: 10000;
|
| 998 |
-
align-items: center;
|
| 999 |
-
justify-content: center;
|
| 1000 |
-
padding: 1rem;
|
| 1001 |
-
}
|
| 1002 |
-
|
| 1003 |
-
.coming-soon-modal.show {
|
| 1004 |
-
display: flex;
|
| 1005 |
-
animation: modalFadeIn 0.2s ease-out;
|
| 1006 |
-
}
|
| 1007 |
-
|
| 1008 |
-
.coming-soon-modal-overlay {
|
| 1009 |
-
position: absolute;
|
| 1010 |
-
top: 0;
|
| 1011 |
-
left: 0;
|
| 1012 |
-
right: 0;
|
| 1013 |
-
bottom: 0;
|
| 1014 |
-
background: rgba(0, 0, 0, 0.5);
|
| 1015 |
-
backdrop-filter: blur(4px);
|
| 1016 |
-
}
|
| 1017 |
-
|
| 1018 |
-
.coming-soon-modal-content {
|
| 1019 |
-
position: relative;
|
| 1020 |
-
background: white;
|
| 1021 |
-
border-radius: 0.75rem;
|
| 1022 |
-
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
|
| 1023 |
-
max-width: 400px;
|
| 1024 |
-
width: 100%;
|
| 1025 |
-
overflow: hidden;
|
| 1026 |
-
animation: modalSlideUp 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
| 1027 |
-
}
|
| 1028 |
-
|
| 1029 |
-
.coming-soon-modal-header {
|
| 1030 |
-
padding: 1.5rem 1.5rem 1rem;
|
| 1031 |
-
text-align: center;
|
| 1032 |
-
border-bottom: 1px solid var(--light-darker);
|
| 1033 |
-
}
|
| 1034 |
-
|
| 1035 |
-
.coming-soon-modal-header h3 {
|
| 1036 |
-
font-family: var(--font-display);
|
| 1037 |
-
font-size: 1.25rem;
|
| 1038 |
-
font-weight: 500;
|
| 1039 |
-
color: var(--text);
|
| 1040 |
-
margin: 0;
|
| 1041 |
-
}
|
| 1042 |
-
|
| 1043 |
-
.coming-soon-modal-body {
|
| 1044 |
-
padding: 1.5rem;
|
| 1045 |
-
text-align: center;
|
| 1046 |
-
}
|
| 1047 |
-
|
| 1048 |
-
.coming-soon-modal-body p {
|
| 1049 |
-
font-family: var(--font-body);
|
| 1050 |
-
font-size: 1rem;
|
| 1051 |
-
color: var(--text-secondary);
|
| 1052 |
-
margin: 0;
|
| 1053 |
-
line-height: 1.6;
|
| 1054 |
-
}
|
| 1055 |
-
|
| 1056 |
-
.coming-soon-modal-footer {
|
| 1057 |
-
padding: 1rem 1.5rem 1.5rem;
|
| 1058 |
-
display: flex;
|
| 1059 |
-
justify-content: center;
|
| 1060 |
-
}
|
| 1061 |
-
|
| 1062 |
-
.coming-soon-modal-btn {
|
| 1063 |
-
padding: 0.75rem 2rem;
|
| 1064 |
-
border-radius: 0.5rem;
|
| 1065 |
-
font-family: var(--font-body);
|
| 1066 |
-
font-size: 1rem;
|
| 1067 |
-
font-weight: 500;
|
| 1068 |
-
cursor: pointer;
|
| 1069 |
-
transition: all 0.2s ease;
|
| 1070 |
-
border: none;
|
| 1071 |
-
outline: none;
|
| 1072 |
-
background: var(--supertone_blue);
|
| 1073 |
-
color: white;
|
| 1074 |
-
}
|
| 1075 |
-
|
| 1076 |
-
.coming-soon-modal-btn:hover {
|
| 1077 |
-
background: var(--primary-dark);
|
| 1078 |
-
transform: translateY(-1px);
|
| 1079 |
-
box-shadow: 0 4px 12px rgba(34, 124, 255, 0.3);
|
| 1080 |
-
}
|
| 1081 |
-
|
| 1082 |
-
.coming-soon-modal-btn:active {
|
| 1083 |
-
transform: translateY(0);
|
| 1084 |
-
}
|
| 1085 |
-
|
| 1086 |
.demo-generate-btn {
|
| 1087 |
display: inline-flex;
|
| 1088 |
align-items: center;
|
|
@@ -1672,27 +1592,6 @@ body.comparison-mode .demo-result-item {
|
|
| 1672 |
}
|
| 1673 |
}
|
| 1674 |
|
| 1675 |
-
/* Modal Animations */
|
| 1676 |
-
@keyframes modalFadeIn {
|
| 1677 |
-
from {
|
| 1678 |
-
opacity: 0;
|
| 1679 |
-
}
|
| 1680 |
-
to {
|
| 1681 |
-
opacity: 1;
|
| 1682 |
-
}
|
| 1683 |
-
}
|
| 1684 |
-
|
| 1685 |
-
@keyframes modalSlideUp {
|
| 1686 |
-
from {
|
| 1687 |
-
opacity: 0;
|
| 1688 |
-
transform: translateY(30px) scale(0.95);
|
| 1689 |
-
}
|
| 1690 |
-
to {
|
| 1691 |
-
opacity: 1;
|
| 1692 |
-
transform: translateY(0) scale(1);
|
| 1693 |
-
}
|
| 1694 |
-
}
|
| 1695 |
-
|
| 1696 |
/* Language Auto-Detection Toast */
|
| 1697 |
.language-toast {
|
| 1698 |
position: fixed;
|
|
|
|
| 957 |
margin-right: 0;
|
| 958 |
}
|
| 959 |
|
| 960 |
+
.speaker-clone-link {
|
| 961 |
+
display: inline-flex;
|
| 962 |
+
align-items: center;
|
| 963 |
+
min-height: 1.8rem;
|
| 964 |
+
margin-left: 0.45rem;
|
| 965 |
+
padding: 0.12rem 0.65rem 0.16rem;
|
| 966 |
+
border: 1px solid rgba(255, 255, 0, 0.45);
|
| 967 |
+
border-radius: 999px;
|
| 968 |
+
background: rgba(255, 255, 0, 0.10);
|
| 969 |
+
color: var(--accent-yellow);
|
| 970 |
+
font-size: 0.9rem;
|
| 971 |
+
font-weight: 600;
|
| 972 |
+
line-height: 1.2;
|
| 973 |
+
text-decoration: none;
|
| 974 |
+
white-space: nowrap;
|
| 975 |
+
transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, transform 0.2s ease;
|
| 976 |
}
|
| 977 |
|
| 978 |
+
.speaker-clone-link:hover {
|
| 979 |
+
background: rgba(255, 255, 0, 0.16);
|
| 980 |
+
border-color: rgba(255, 255, 0, 0.75);
|
| 981 |
+
color: #ffff7a;
|
| 982 |
+
transform: translateY(-1px);
|
| 983 |
+
}
|
| 984 |
+
|
| 985 |
+
.speaker-clone-link:focus-visible {
|
| 986 |
+
outline: 2px solid rgba(255, 255, 0, 0.45);
|
| 987 |
+
outline-offset: 2px;
|
| 988 |
}
|
| 989 |
|
| 990 |
/* Speaker Tooltip */
|
|
|
|
| 1003 |
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
| 1004 |
}
|
| 1005 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1006 |
.demo-generate-btn {
|
| 1007 |
display: inline-flex;
|
| 1008 |
align-items: center;
|
|
|
|
| 1592 |
}
|
| 1593 |
}
|
| 1594 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1595 |
/* Language Auto-Detection Toast */
|
| 1596 |
.language-toast {
|
| 1597 |
position: fixed;
|