Files
aza/AzA march 2026 - Kopie/web/browser_aza_mvp.html

261 lines
6.4 KiB
HTML
Raw Normal View History

2026-03-25 13:42:48 +01:00
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>AZA Browser MVP</title>
<style>
:root {
--bg: #f6f7fb;
--card: #ffffff;
--text: #1f2937;
--muted: #6b7280;
--border: #d1d5db;
--accent: #2563eb;
--accent-hover: #1d4ed8;
--danger-bg: #fef2f2;
--danger-text: #991b1b;
--ok-bg: #ecfdf5;
--ok-text: #065f46;
}
* { box-sizing: border-box; }
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.45;
}
.page {
max-width: 920px;
margin: 0 auto;
padding: 32px 20px 48px;
}
.hero {
margin-bottom: 24px;
}
.hero h1 {
margin: 0 0 8px;
font-size: 32px;
}
.hero p {
margin: 0;
color: var(--muted);
font-size: 16px;
}
.card {
background: var(--card);
border: 1px solid var(--border);
border-radius: 14px;
padding: 20px;
margin-bottom: 18px;
}
.section-title {
margin: 0 0 14px;
font-size: 18px;
}
.field {
margin-bottom: 16px;
}
.field label {
display: block;
font-weight: 700;
margin-bottom: 8px;
}
.field select,
.field input[type="file"],
.result-box {
width: 100%;
border: 1px solid var(--border);
border-radius: 10px;
padding: 12px;
font-size: 15px;
background: #fff;
}
.result-box {
min-height: 220px;
white-space: pre-wrap;
}
.actions {
display: flex;
gap: 12px;
flex-wrap: wrap;
}
button {
border: 0;
border-radius: 10px;
padding: 12px 18px;
font-size: 15px;
font-weight: 700;
cursor: pointer;
}
.primary {
background: var(--accent);
color: #fff;
}
.primary:hover {
background: var(--accent-hover);
}
.secondary {
background: #eef2ff;
color: #1e3a8a;
}
.status {
border-radius: 10px;
padding: 12px 14px;
font-size: 14px;
margin-bottom: 16px;
display: none;
}
.status.error {
display: block;
background: var(--danger-bg);
color: var(--danger-text);
}
.status.success {
display: block;
background: var(--ok-bg);
color: var(--ok-text);
}
.footer-links {
display: flex;
gap: 18px;
flex-wrap: wrap;
margin-top: 8px;
}
.footer-links a {
color: var(--accent);
text-decoration: none;
font-weight: 700;
}
.hint {
color: var(--muted);
font-size: 14px;
margin-top: 8px;
}
</style>
</head>
<body>
<main class="page">
<section class="hero">
<h1>AZA</h1>
<p>Browser-MVP für medizinische Transkription.</p>
</section>
<section class="card">
<h2 class="section-title">Eingabe</h2>
<div class="field">
<label for="specialty">Fachrichtung</label>
<select id="specialty" name="specialty">
<option value="">Bitte wählen</option>
<option value="allgemeinmedizin">Allgemeinmedizin</option>
<option value="innere-medizin">Innere Medizin</option>
<option value="dermatologie">Dermatologie</option>
<option value="kardiologie">Kardiologie</option>
<option value="orthopaedie">Orthopädie</option>
<option value="psychiatrie">Psychiatrie</option>
<option value="radiologie">Radiologie</option>
<option value="chirurgie">Chirurgie</option>
</select>
</div>
<div class="field">
<label for="audioFile">Audio-Datei</label>
<input id="audioFile" name="audioFile" type="file" accept=".m4a,.wav,.mp3,audio/*" />
<div class="hint">MVP-Web-Shell: Dateiauswahl ist vorbereitet, Backend-Verdrahtung folgt im nächsten Slice.</div>
</div>
<div id="statusBox" class="status success">Bereit für Upload.</div>
<div class="actions">
<button id="uploadButton" class="primary" type="button">Upload starten</button>
</div>
</section>
<section class="card">
<h2 class="section-title">Ergebnis</h2>
<div id="resultBox" class="result-box">Hier erscheint das Transkript.</div>
<div class="actions" style="margin-top: 14px;">
<button id="copyButton" class="secondary" type="button">Transkript kopieren</button>
</div>
</section>
<section class="card">
<h2 class="section-title">Support & Rechtliches</h2>
<div class="footer-links">
<a href="/support">Support</a>
<a href="/privacy">Privacy</a>
<a href="/terms">Terms</a>
</div>
</section>
</main>
<script>
(function () {
const statusBox = document.getElementById("statusBox");
const resultBox = document.getElementById("resultBox");
const copyButton = document.getElementById("copyButton");
const uploadButton = document.getElementById("uploadButton");
const specialty = document.getElementById("specialty");
const audioFile = document.getElementById("audioFile");
function setStatus(message, kind) {
statusBox.textContent = message;
statusBox.className = "status " + kind;
}
uploadButton.addEventListener("click", function () {
if (!specialty.value) {
setStatus("Bitte zuerst eine Fachrichtung wählen.", "error");
return;
}
if (!audioFile.files || audioFile.files.length === 0) {
setStatus("Bitte zuerst eine Audio-Datei auswählen.", "error");
return;
}
setStatus("Upload-Flow ist als nächster Slice vorgesehen. Diese Seite ist die erste MVP-Web-Shell.", "success");
resultBox.textContent =
"Ausgewählte Fachrichtung: " + specialty.value + "\n" +
"Ausgewählte Datei: " + audioFile.files[0].name + "\n\n" +
"Backend-Anbindung an /v1/transcribe folgt im nächsten Patch.";
});
copyButton.addEventListener("click", async function () {
try {
await navigator.clipboard.writeText(resultBox.textContent);
setStatus("Transkripttext wurde in die Zwischenablage kopiert.", "success");
} catch (error) {
setStatus("Kopieren war nicht möglich.", "error");
}
});
})();
</script>
</body>
</html>