Merge branch 'feature/ui-test' into 'feature/customdocument26'

# Conflicts:
#   electron/main/custom_document.html
This commit is contained in:
Hughes, Mike
2026-01-15 14:34:52 +01:00
7 changed files with 601 additions and 351 deletions
-90
View File
@@ -6,96 +6,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Custom Document</title> <title>Custom Document</title>
<style> <style>
body {
font-family: Arial, sans-serif;
background: #f0f2f5;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
.container {
background: white;
padding: 30px;
margin-top: 50px;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
width: 90%;
max-width: 600px;
}
h1 {
text-align: center;
color: #333;
}
label {
font-weight: bold;
margin-top: 15px;
display: block;
color: #555;
}
input[type="text"],
textarea,
select {
width: 100%;
padding: 10px;
margin-top: 5px;
border-radius: 6px;
border: 1px solid #ccc;
font-size: 14px;
}
textarea {
height: 120px;
resize: vertical;
}
.buttons {
display: flex;
justify-content: space-between;
margin-top: 25px;
}
.hidden {
visibility: hidden;
}
button {
padding: 10px 20px;
font-size: 14px;
border: none;
border-radius: 6px;
cursor: pointer;
transition: 0.2s;
background-color: #007BFF;
color: white;
}
button:hover {
background-color: #0056b3;
}
@media (max-width: 500px) {
.buttons {
flex-direction: column;
}
.buttons button {
width: 100%;
margin-top: 10px;
}
}
#result {
margin-top: 20px;
color: #333;
word-break: break-word;
}
</style> </style>
</head> </head>
Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

+39 -4
View File
@@ -20,7 +20,7 @@
</label> </label>
<nav class="menu1"> <nav class="menu1">
<a href="custom_document.html" class="li1">Manage document types</a> <button id="customDocBtn" onclick="showCD()">Manage document types</button>
<a href="help_page.html" class="li1">Help</a> <a href="help_page.html" class="li1">Help</a>
</nav> </nav>
</nav> </nav>
@@ -30,6 +30,7 @@
<div class="gui-language"> <div class="gui-language">
<!-- to do: Ausprobieren mit li, a oder button, im Notfall ohne Flaggen Icons, kein hover--> <!-- to do: Ausprobieren mit li, a oder button, im Notfall ohne Flaggen Icons, kein hover-->
<select name="language_option" id="language_option"></select>
</div> </div>
</div> </div>
@@ -49,6 +50,33 @@
<!-- Visible middle part--> <!-- Visible middle part-->
<div class="mitte" id="mitte"> <div class="mitte" id="mitte">
<!--Costum document section-->
<div class="container" id="cdContainer" style="display:none;">
<h1 id="cd_h1">Manage document types</h1>
<label for="existingDocs" id="cd_existingDocs">Select existing documents (optional):</label>
<!--Drop Down-->
<select name="existingDocs" id="existingDocs">
<option value="newDoc" id="newDoc">-- Create new document --</option>
</select>
<div id="docNameWrapper">
<label for="docName" id="cd_docName">Document name:</label>
<input type="text" id="docName" placeholder="Enter the document name here">
</div>
<label for="prompt" id="cd_promt">Your prompt:</label>
<textarea id="prompt" placeholder="Type the prompt for your document here..."></textarea>
<div class="buttons">
<button id="goBackBtn">Return</button>
<button id="deleteBtn">Delete document</button>
<button id="generateBtn">Save document</button>
</div>
<div id="result"></div>
</div>
<!-- Here starts code from step 1--> <!-- Here starts code from step 1-->
<div class="step" id="step1"> <div class="step" id="step1">
<h2 class="h2">Upload your video here:</h2> <h2 class="h2">Upload your video here:</h2>
@@ -82,7 +110,7 @@
<label id="labelType">Select type:</label> <label id="labelType">Select type:</label>
<select name="output_type" id="output_type"> <select name="output_type" id="output_type">
<option value="pdf">.pdf</option> <option value="pdf">.pdf</option>
<option value="word">.word</option> <option value="word">.docx</option>
<option value="txt">.txt</option> <option value="txt">.txt</option>
</select> </select>
</div> </div>
@@ -90,7 +118,7 @@
<div class="language-wrapper"> <div class="language-wrapper">
<label id="labelLanguage">Select language:</label> <label id="labelLanguage">Select language:</label>
<select name="language_option" id="language_option"> <select name="document_language_option" id="document_language_option">
</select> </select>
</div> </div>
@@ -105,18 +133,25 @@
<div class="checkbox-container"> <div class="checkbox-container">
<input type="checkbox" name ="docFormat" id="docFormat" value="followup-report"> <input type="checkbox" name ="docFormat" id="docFormat" value="followup-report">
<label id="label_format" for="docFormat">Follow-up Report</label> <label id="label_format" for="docFormat">Follow-up Report</label>
<div class="figure1">
<img class="img-icon" src="icons/question-mark-button-icon--free-clip-art-30.png">
<img class="img-hover1" src="flags/germany-flag-png-large.jpg">
</div>
</div> </div>
<div class="checkbox-container"> <div class="checkbox-container">
<input type="checkbox" name="docFormat" id="docFormatSummary1" value="agenda"> <input type="checkbox" name="docFormat" id="docFormatSummary1" value="agenda">
<label id="label_summary" for="docFormatSummary">Agenda</label> <label id="label_summary" for="docFormatSummary">Agenda</label>
<img class="img-icon" src="icons/question-mark-button-icon--free-clip-art-30.png">
</div> </div>
<div class="checkbox-container"> <div class="checkbox-container">
<input type="checkbox" name="docFormat" id="docFormatSummary2" value="result-protocol"> <input type="checkbox" name="docFormat" id="docFormatSummary2" value="result-protocol">
<label id="label_summary" for="docFormatSummary">Resultprotocol</label> <label id="label_summary" for="docFormatSummary">Resultprotocol</label>
<img class="img-icon" src="icons/question-mark-button-icon--free-clip-art-30.png">
</div> </div>
<div class="checkbox-container"> <div class="checkbox-container">
<input type="checkbox" name="docFormat" id="docFormatSummary3" value="sprint-planning"> <input type="checkbox" name="docFormat" id="docFormatSummary3" value="sprint-planning">
<label id="label_summary" for="docFormatSummary">Sprint Planning Note</label> <label id="label_summary" for="docFormatSummary">Sprint Planning Note</label>
<img class="img-icon" src="icons/question-mark-button-icon--free-clip-art-30.png">
</div> </div>
<div class="checkbox-container"> <div class="checkbox-container">
<input type="checkbox" name="docFormat" id="docFormatCustom" value="custom"> <input type="checkbox" name="docFormat" id="docFormatCustom" value="custom">
@@ -128,7 +163,7 @@
<!-- Here starts code from step 4--> <!-- Here starts code from step 4-->
<div class="step" id="step4" style="display:none;"> <div class="step" id="step4" style="display:none;">
<h2 class="h2">Klick to submit:</h2> <h2 class="h2">Click to submit:</h2>
<button class="submit-btn" id="submitButton" onclick="checkBoxes()" disabled>Submit</button> <button class="submit-btn" id="submitButton" onclick="checkBoxes()" disabled>Submit</button>
<div class="testy" id="testy"> <div class="testy" id="testy">
+39 -3
View File
@@ -29,7 +29,19 @@ var languageOptions = {
"box1_p1": "---Starting---", "box1_p1": "---Starting---",
"box2_p2": "---Transkribing---", "box2_p2": "---Transkribing---",
"box3_p3": "---Document creation---", "box3_p3": "---Document creation---",
"labelType": "Select document type:" "labelType": "Select document type:",
"customDocBtn": "Manage document types",
"cd_h1": "Manage document types",
"cd_existingDocs": "Select existing documents (optional):",
"cd_docName": "Document name",
"docName": "Enter the document name here",
"cd_promt": "Your prompt:",
"prompt": "Type the prompt for your document here...",
"goBackBtn": "Return",
"deleteBtn": "Delete document",
"generateBtn": "Save document",
"newDoc": "-- Create new document --"
}, },
"de":{ "de":{
@@ -62,7 +74,19 @@ var languageOptions = {
"box1_p1": "---Startet---", "box1_p1": "---Startet---",
"box2_p2": "---Transkribing---", "box2_p2": "---Transkribing---",
"box3_p3": "---Dokument kreieren---", "box3_p3": "---Dokument kreieren---",
"labelType": "Wähle Dokumenttype:" "labelType": "Wähle Dokumenttype:",
"customDocBtn": "Dokumenttypen verwalten",
"cd_h1": "Dokumenttypen verwalten",
"cd_existingDocs": "Vorhandene Dokumente auswählen (optional):",
"cd_docName": "Dokument Name",
"docName": "Geben Sie hier den Dokumentnamen ein",
"cd_promt": "Ihr Prompt:",
"prompt": "Geben Sie hier die Eingabeaufforderung für Ihr Dokument ein...",
"goBackBtn": "Zurück",
"deleteBtn": "Lösche Dokument",
"generateBtn": "Speicher Dokument",
"newDoc": "-- Neues Dokument erstellen --"
}, },
"in":{ "in":{
"flagPath": "flags/india-flag-png-large.png", "flagPath": "flags/india-flag-png-large.png",
@@ -94,7 +118,19 @@ var languageOptions = {
"box1_p1": "---प्रारंभ---", "box1_p1": "---प्रारंभ---",
"box2_p2": "---प्रतिलेखन---", "box2_p2": "---प्रतिलेखन---",
"box3_p3": "---दस्तावेज़ निर्माण---", "box3_p3": "---दस्तावेज़ निर्माण---",
"labelType": "दस्तावेज़ प्रकार चुनें:" "labelType": "दस्तावेज़ प्रकार चुनें:",
"customDocBtn": "दस्तावेज़ प्रकार प्रबंधित करें",
"cd_h1": "दस्तावेज़ प्रकार प्रबंधित करें",
"cd_existingDocs": "मौजूदा दस्तावेज़ों का चयन करें (वैकल्पिक):",
"cd_docName": "दस्तावेज़ का नाम",
"docName": "यहां दस्तावेज़ का नाम दर्ज करें",
"cd_promt": "आपका संकेत:",
"prompt": "अपने दस्तावेज़ के लिए प्रॉम्प्ट यहां टाइप करें...",
"goBackBtn": "वापस करना",
"deleteBtn": "दस्तावेज़ हटाएँ",
"generateBtn": "दस्तावेज़ सहेजें",
"newDoc": "-- नया दस्तावेज़ बनाएँ --"
} }
+105
View File
@@ -133,6 +133,23 @@ Listeners for Step 3
*/ */
window.api.getTxtFiles().then(files => {
var menu = document.getElementById('customDocumentTypes');
var l = document.getElementById('customDocumentTypes').options.length - 1;
for (i = l; i >= 0; i--) {
menu.remove(i);
}
files.forEach(file => {
const option = document.createElement('option');
option.value = file;
option.textContent = file
.replace('.txt', '') // Endung entfernen
.replace(/_/g, ' ') // Leerzeichen ersetzen
.replace(/\b\w/g, c => c.toUpperCase()) // ersten Buchstaben groß
menu.appendChild(option);
});
});
//Checkboxlistener so that only one can be selected at a time //Checkboxlistener so that only one can be selected at a time
docFormat.addEventListener("change", (e) => { docFormat.addEventListener("change", (e) => {
try { try {
@@ -282,5 +299,93 @@ window.audios.speakerAudios((event, arg) => {
/*
Listeners for the costum documents section
*/
goBackBtn.addEventListener("click", () => {
showCD();
});
// dokumente speichern
generateBtn.addEventListener("click", () => {
const name = docName.value.trim();
const content = document.getElementById("prompt").value.trim();
if (!name || !content) {
result.textContent = "Bitte Dokumentname und Prompt ausfüllen.";
console.log(name + " " + content);
setTimeout(() => {
result.textContent = "";
}, 3000);
return;
}
window.api.saveTxtFile(name, content).then();
result.textContent = "Dokument erfolgreich gespeichert!";
setTimeout(() => {
result.textContent = "";
}, 3000);
reloadDocuments();
});
// dokumente löschen
deleteBtn.addEventListener("click", () => {
const name = docName.value.trim();
if (!name) {
result.textContent = "Bitte Dokumentname angeben.";
setTimeout(() => {
result.textContent = "";
}, 3000);
return;
}
const confirmDelete = confirm(
`Möchtest du das Dokument "${name}" wirklich löschen?`
);
if (!confirmDelete) return;
window.api.deleteTxtFile(name).then((success) => {
if (success) {
result.textContent = "Dokument erfolgreich gelöscht!";
reloadDocuments();
existingDocs.value = "newDoc";
existingDocs.dispatchEvent(new Event("change"));
} else {
result.textContent = "Dokument konnte nicht gelöscht werden.";
}
setTimeout(() => {
result.textContent = "";
}, 3000);
});
});
//function to load existingDoc options to the drop down list
window.api.getTxtFiles().then(files => {
reloadDocuments();
});
//content anzeigen
existingDocs.addEventListener("change", async () => {
const existingDocsed = existingDocs.value;
const exampleText = "";
if (existingDocsed === "newDoc") {
docNameWrapper.classList.remove("hidden");
docName.value = "";
prompt.value = exampleText;
return;
}
docNameWrapper.classList.add("hidden");
const content = await window.api.readTxtFile(existingDocsed);
prompt.value = content;
docName.value = existingDocsed.replace(".txt", "");
});
+56 -2
View File
@@ -5,6 +5,24 @@ let currentVideoPath = null;
Functions used in the setup or affect most of the gui Functions used in the setup or affect most of the gui
*/ */
var showCDValue = 0;
function showCD() {
if(showCDValue == 0){
document.getElementById('cdContainer').style.display = "block";
document.getElementById('step1').style.display ="none";
document.getElementById('step2').style.display ="none";
document.getElementById('step3').style.display ="none";
document.getElementById('step4').style.display ="none";
document.getElementById('step5').style.display ="none";
document.getElementById('step6').style.display ="none";
showCDValue = 1;
} else {
currentStep = 1;
showCDValue = 0;
document.getElementById('cdContainer').style.display = "none";
showStep(1);
}
}
//language changing feature => changes the language of every displayed text //language changing feature => changes the language of every displayed text
function changeLanguage(language) { function changeLanguage(language) {
@@ -39,6 +57,18 @@ function changeLanguage(language) {
document.getElementById('box3_p3').textContent = languageOptions[language].box3_p3; document.getElementById('box3_p3').textContent = languageOptions[language].box3_p3;
document.getElementById('labelType').textContent = languageOptions[language].labelType; document.getElementById('labelType').textContent = languageOptions[language].labelType;
document.getElementById('customDocBtn').textContent = languageOptions[language].customDocBtn;
document.getElementById('cd_h1').textContent = languageOptions[language].cd_h1;
document.getElementById('cd_existingDocs').textContent = languageOptions[language].cd_existingDocs;
document.getElementById('cd_docName').textContent = languageOptions[language].cd_docName;
document.getElementById('docName').placeholder = languageOptions[language].docName;
document.getElementById('cd_promt').textContent = languageOptions[language].cd_promt;
document.getElementById('prompt').placeholder = languageOptions[language].prompt;
document.getElementById('goBackBtn').textContent = languageOptions[language].goBackBtn;
document.getElementById('deleteBtn').textContent = languageOptions[language].deleteBtn;
document.getElementById('generateBtn').textContent = languageOptions[language].generateBtn;
document.getElementById('newDoc').textContent = languageOptions[language].newDoc;
} catch (error) { } catch (error) {
console.log("Error in script.js changeLanguage function"); console.log("Error in script.js changeLanguage function");
console.log(error); console.log(error);
@@ -192,17 +222,26 @@ function loadLanguageOptions(){
try { try {
var menu = document.getElementById('language_option'); var menu = document.getElementById('language_option');
var menu_doc = document.getElementById('document_language_option');
var object_holdy; var object_holdy;
var choice; var choice;
var choice2;
object_holdy = Object.keys(languageOptions); object_holdy = Object.keys(languageOptions);
for (i = 0; i < object_holdy.length; i++) { for (i = 0; i < object_holdy.length; i++) {
choice = document.createElement('option'); choice = document.createElement('option');
choice.textContent = object_holdy[i]; choice.textContent = object_holdy[i];
choice.value = object_holdy[i]; choice.value = object_holdy[i];
choice.setAttribute('data-image', languageOptions[object_holdy[i]].flagPath); choice.setAttribute('data-image', languageOptions[object_holdy[i]].flagPath);
choice2 = document.createElement('option');
choice2.textContent = object_holdy[i];
choice2.value = object_holdy[i];
choice2.setAttribute('data-image', languageOptions[object_holdy[i]].flagPath);
menu_doc.appendChild(choice2);
menu.appendChild(choice); menu.appendChild(choice);
} }
new lc_select(document.getElementById('language_option')); //loads the flag images so they get displayed in the gui new lc_select(document.getElementById('language_option')); //loads the flag images so they get displayed in the gui
new lc_select(document.getElementById('document_language_option'));
} catch (error) { } catch (error) {
console.log("Error in script.js loadLanguageOptions function"); console.log("Error in script.js loadLanguageOptions function");
console.log(error); console.log(error);
@@ -225,7 +264,7 @@ Functions used in Step 4
*/ */
//function to check if one checkbox is at least klicked. Final controll function before sending the input to the generation //function to check if one checkbox is at least clicked. Final controll function before sending the input to the generation
function checkBoxes() { function checkBoxes() {
try { try {
const checkboxes = document.querySelectorAll('input[name="docFormat"]'); const checkboxes = document.querySelectorAll('input[name="docFormat"]');
@@ -421,6 +460,20 @@ function fileDownload() {
} }
/*
Functions for the custom document section
*/
//reload drop down
function reloadDocuments() {
[...existingDocs.querySelectorAll('option:not([value="newDoc"])')]
.forEach(o => o.remove());
window.api.getTxtFiles().then(files => { window.api.getTxtFiles().then(files => {
files.forEach(file => { files.forEach(file => {
const option = document.createElement('option'); const option = document.createElement('option');
@@ -429,6 +482,7 @@ window.api.getTxtFiles().then(files => {
.replace('.txt', '') // Endung entfernen .replace('.txt', '') // Endung entfernen
.replace(/_/g, ' ') // Leerzeichen ersetzen .replace(/_/g, ' ') // Leerzeichen ersetzen
.replace(/\b\w/g, c => c.toUpperCase()) // ersten Buchstaben groß .replace(/\b\w/g, c => c.toUpperCase()) // ersten Buchstaben groß
costumDocumentType.appendChild(option); existingDocs.appendChild(option);
}); });
}); });
}
+121 -11
View File
@@ -22,7 +22,7 @@ body {
#h1-wrapper { #h1-wrapper {
position: relative; position: relative;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
width: 770px; width: 780px;
height: 60px; height: 60px;
background-color: #FFF; background-color: #FFF;
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1); box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1);
@@ -109,7 +109,7 @@ body {
} }
#step2 { #step2 {
gap: 30px; gap: 25px;
} }
.KI-wrapper { .KI-wrapper {
@@ -138,6 +138,7 @@ input[type="file"] {
height: 1em; height: 1em;
position: relative; position: relative;
} }
.checkbox-group input[type=checkbox]:before, .checkbox-group input[type=checkbox]:before,
.checkbox-group input[type=checkbox]:after { .checkbox-group input[type=checkbox]:after {
content: ""; content: "";
@@ -149,25 +150,30 @@ input[type="file"] {
left: 10%; left: 10%;
transform-origin: left center; transform-origin: left center;
} }
.checkbox-group input[type=checkbox]:before { .checkbox-group input[type=checkbox]:before {
transform: rotate(45deg) translate(calc(var(--borderWidth) / -2), calc(var(--borderWidth) / -2)) scaleX(0); transform: rotate(45deg) translate(calc(var(--borderWidth) / -2), calc(var(--borderWidth) / -2)) scaleX(0);
transition: transform 200ms ease-in 200ms; transition: transform 200ms ease-in 200ms;
} }
.checkbox-group input[type=checkbox]:after { .checkbox-group input[type=checkbox]:after {
width: calc(var(--borderWidth) * 5); width: calc(var(--borderWidth) * 5);
transform: rotate(-45deg) translateY(calc(var(--borderWidth) * 2)) scaleX(0); transform: rotate(-45deg) translateY(calc(var(--borderWidth) * 2)) scaleX(0);
transform-origin: left center; transform-origin: left center;
transition: transform 200ms ease-in; transition: transform 200ms ease-in;
} }
.checkbox-group input[type=checkbox]:checked:before { .checkbox-group input[type=checkbox]:checked:before {
transform: rotate(45deg) translate(calc(var(--borderWidth) / -2), calc(var(--borderWidth) / -2)) scaleX(1); transform: rotate(45deg) translate(calc(var(--borderWidth) / -2), calc(var(--borderWidth) / -2)) scaleX(1);
transition: transform 200ms ease-in; transition: transform 200ms ease-in;
} }
.checkbox-group input[type=checkbox]:checked:after { .checkbox-group input[type=checkbox]:checked:after {
width: calc(var(--borderWidth) * 5); width: calc(var(--borderWidth) * 5);
transform: rotate(-45deg) translateY(calc(var(--borderWidth) * 2)) scaleX(1); transform: rotate(-45deg) translateY(calc(var(--borderWidth) * 2)) scaleX(1);
transition: transform 200ms ease-out 200ms; transition: transform 200ms ease-out 200ms;
} }
.checkbox-group input[type=checkbox]:focus { .checkbox-group input[type=checkbox]:focus {
outline: calc(var(--borderWidth) / 2) dotted rgba(0, 0, 0, 0.25); outline: calc(var(--borderWidth) / 2) dotted rgba(0, 0, 0, 0.25);
} }
@@ -180,13 +186,38 @@ input[type="file"] {
gap: 5px; gap: 5px;
} }
.figure1 {
position: relative;
}
.img-hover1 {
position: absolute;
width: 200px;
height: 200px;
top: 0;
right: 40%;
left: 0;
bottom: 0;
object-fit: contain;
display: none;
transition: opacity .2s;
}
.figure1:hover .img-hover1 {
display: flex;
}
.img-icon {
width: 15px;
height: 15px;
}
.submit-btn { .submit-btn {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 10px 20px; padding: 10px 20px;
margin: 100px auto 10px auto; margin: 110px auto 10px auto;
background-color: #007BFF; background-color: #007BFF;
color: white; color: white;
border: none; border: none;
@@ -204,10 +235,10 @@ input[type="file"] {
.mitte { .mitte {
background-color: #FFF; background-color: #FFF;
display: flex; display: flex;
width: 700px; width: 780px;
height: 500px;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
padding: 40px;
gap: 10px; gap: 10px;
border: 0px; border: 0px;
border-color: black; border-color: black;
@@ -252,7 +283,9 @@ input[type="file"] {
padding: 2px 10px 2px 10px; padding: 2px 10px 2px 10px;
} }
#ai_type, #transkript_type, #language_option { #ai_type,
#transkript_type,
#language_option {
padding: 3px; padding: 3px;
} }
@@ -275,6 +308,8 @@ input[type="file"] {
padding: 10px 30px; padding: 10px 30px;
border-radius: 6px; border-radius: 6px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
max-width: 720px;
min-width: 720px;
} }
.step-item { .step-item {
@@ -297,7 +332,9 @@ input[type="file"] {
/*panels*/ /*panels*/
.step { .step {
margin-top: 50px; margin-top: 40px;
margin-bottom: 40px;
;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-height: 425px; min-height: 425px;
@@ -465,7 +502,9 @@ li {
transition: all 0.3s ease; transition: all 0.3s ease;
} }
#step2, #step3, #step5 { #step2,
#step3,
#step5 {
font-size: larger; font-size: larger;
} }
@@ -489,7 +528,7 @@ li {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 10px 20px; padding: 10px 20px;
margin: 100px auto 10px auto; margin: 110px auto 10px auto;
background-color: #007BFF; background-color: #007BFF;
color: white; color: white;
border: none; border: none;
@@ -498,7 +537,8 @@ li {
font-size: 14px; font-size: 14px;
} }
#speakerLocker, #speakerResender{ #speakerLocker,
#speakerResender {
padding: 10px 20px; padding: 10px 20px;
margin: 20px auto; margin: 20px auto;
background-color: #007BFF; background-color: #007BFF;
@@ -513,7 +553,77 @@ li {
font-size: 25px; font-size: 25px;
} }
.speakerView, .speakerAudio, .speakerWrite{ .speakerView,
.speakerAudio,
.speakerWrite {
margin-top: auto; margin-top: auto;
margin-bottom: auto; margin-bottom: auto;
} }
.container {
background: white;
padding: 30px;
margin-top: 50px;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
width: 90%;
max-width: 650px;
}
input[type="text"],
textarea,
select {
width: 80%;
padding: 10px;
margin-top: 5px;
border-radius: 6px;
border: 1px solid #ccc;
font-size: 14px;
}
textarea {
height: 120px;
resize: vertical;
}
.buttons {
display: flex;
justify-content: space-between;
margin-top: 25px;
}
.hidden {
visibility: hidden;
}
button {
padding: 10px 20px;
font-size: 14px;
border: none;
border-radius: 6px;
cursor: pointer;
transition: 0.2s;
background-color: #007BFF;
color: white;
}
button:hover {
background-color: #0056b3;
}
@media (max-width: 500px) {
.buttons {
flex-direction: column;
}
.buttons button {
width: 100%;
margin-top: 10px;
}
}
#result {
margin-top: 20px;
color: #333;
word-break: break-word;
}