<legend> positioniert sich per Spezifikation immer auf der oberen Rahmenlinie seines <fieldset> - das lässt sich nicht per CSS aufheben, nur kaschieren. Die vorherige "Nachbesserung" (mehr Padding/Breite auf der legend) war ein Pflaster, kein Fix - kam prompt wieder zum Vorschein, sobald eine neue .form-section-Seite entstand. .form-section ist jetzt ein <div>, die Überschrift ein normales <h3 class="form-section-title"> mit voller CSS-Kontrolle. Betrifft alle neun Vorlagen mit diesem Muster. Zusätzlich alle restlichen unstyled Formulare (Login, Passwort-Reset, Einladung annehmen, Nutzer anlegen, CSV-Import, Abteilung anlegen, Firma umbenennen, Fall-Entscheiden) auf dasselbe form-card/form-section/ form-grid-Muster gehoben, für durchgängig konsistentes globales CSS statt gemischter roher und gestylter Formulare. antrag_neu.html (der Fragebogen) bleibt bewusst unverändert - dessen fieldset/legend haben keinen Rahmen-Konflikt und sind an bereits getestete :has()-Adaptivlogik gekoppelt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
120 lines
4.8 KiB
HTML
120 lines
4.8 KiB
HTML
{{define "betreiber-werkzeug-form"}}<!doctype html>
|
|
<html lang="de">
|
|
<head>{{template "head" .}}</head>
|
|
<body>
|
|
{{template "nav" .Nav}}
|
|
<div class="page">
|
|
<p><a href="{{.ActionBase}}">← Werkzeugkatalog</a></p>
|
|
<h1>{{.Title}}</h1>
|
|
<p class="hinweis">
|
|
Jede Zusicherung hier (AVV, Verarbeitungsländer, Training-Opt-out,
|
|
Zertifizierungen) muss belegbar sein — Quelle und letzte Prüfung sind
|
|
Pflicht.
|
|
</p>
|
|
{{if .Error}}<p class="fehler">{{.Error}}</p>{{end}}
|
|
<div class="form-card">
|
|
<form method="post" action="{{if .ID}}{{.ActionBase}}/{{.ID}}{{else}}{{.ActionBase}}{{end}}">
|
|
<div class="form-section">
|
|
<h3 class="form-section-title">Grunddaten</h3>
|
|
<div class="form-grid">
|
|
<div>
|
|
<label for="name">Name</label>
|
|
<input type="text" id="name" name="name" value="{{.Name}}" required>
|
|
</div>
|
|
<div>
|
|
<label for="anbieter">Anbieter</label>
|
|
<input type="text" id="anbieter" name="anbieter" value="{{.Anbieter}}" required>
|
|
</div>
|
|
<div class="form-full">
|
|
<label for="verarbeitungslaender">Verarbeitungsländer (Mehrfachauswahl: Strg/Cmd-Klick)</label>
|
|
<select id="verarbeitungslaender" name="verarbeitungslaender" multiple size="8" required>
|
|
{{range .LaenderOptionen}}
|
|
<option value="{{.}}" {{if index $.LaenderAusgewaehlt .}}selected{{end}}>{{.}}</option>
|
|
{{end}}
|
|
</select>
|
|
<p class="hinweis">Tatsächliche Länder benennen, nicht "EU"/"Drittland" — die USA sind DSGVO-rechtlich bereits ein Drittland wie jedes andere.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-section">
|
|
<h3 class="form-section-title">Rechtliches & Datenschutz</h3>
|
|
<div class="form-grid">
|
|
<div class="form-full">
|
|
<label>Zusicherungen</label>
|
|
<div class="chip-group">
|
|
<label><input type="checkbox" name="avv_verfuegbar" {{if .AVVVerfuegbar}}checked{{end}}> AVV verfügbar</label>
|
|
<label><input type="checkbox" name="training_opt_out" {{if .TrainingOptOut}}checked{{end}}> Training-Opt-out möglich</label>
|
|
<label><input type="checkbox" name="training_standard" {{if .TrainingStandard}}checked{{end}}> Training standardmäßig aus</label>
|
|
<label><input type="checkbox" name="dpf_zertifiziert" {{if .DPFZertifiziert}}checked{{end}}> EU-US Data Privacy Framework (DPF) zertifiziert</label>
|
|
</div>
|
|
</div>
|
|
<div class="form-full">
|
|
<label for="avv_url">AVV-URL</label>
|
|
<input type="text" id="avv_url" name="avv_url" value="{{.AVVURL}}">
|
|
</div>
|
|
<div>
|
|
<label for="aufbewahrung_tage">Aufbewahrung (Tage, leer lassen wenn vom Anbieter nicht beziffert)</label>
|
|
<input type="number" id="aufbewahrung_tage" name="aufbewahrung_tage" min="0" value="{{.AufbewahrungTage}}">
|
|
</div>
|
|
<div>
|
|
<label for="zertifizierungen">Zertifizierungen (kommagetrennt)</label>
|
|
<input type="text" id="zertifizierungen" name="zertifizierungen" value="{{.Zertifizierungen}}">
|
|
</div>
|
|
<div class="form-full">
|
|
<label for="subprozessoren">Subprozessoren (kommagetrennt, z. B. Anthropic, AWS)</label>
|
|
<input type="text" id="subprozessoren" name="subprozessoren" value="{{.Subprozessoren}}">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-section">
|
|
<h3 class="form-section-title">Einsatzbereich</h3>
|
|
<div class="form-grid">
|
|
<div class="form-full">
|
|
<label>Geeignete Zwecke</label>
|
|
<div class="chip-group">
|
|
{{range .ZweckeOptionen}}
|
|
<label><input type="checkbox" name="geeignete_zwecke" value="{{.}}" {{if index $.ZweckeAusgewaehlt .}}checked{{end}}> {{.}}</label>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
<div class="form-full">
|
|
<label for="einschraenkungen">Einschränkungen (kommagetrennt)</label>
|
|
<input type="text" id="einschraenkungen" name="einschraenkungen" value="{{.Einschraenkungen}}">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-section">
|
|
<h3 class="form-section-title">Beleg</h3>
|
|
<div class="form-grid">
|
|
<div>
|
|
<label for="letzte_pruefung">Letzte Prüfung</label>
|
|
<input type="date" id="letzte_pruefung" name="letzte_pruefung" value="{{.LetztePruefung}}" required>
|
|
</div>
|
|
<div>
|
|
<label for="quelle">Quelle (Beleg)</label>
|
|
<input type="text" id="quelle" name="quelle" value="{{.Quelle}}" required>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-actions">
|
|
<button type="submit">Speichern</button>
|
|
</div>
|
|
</form>
|
|
{{if .ID}}
|
|
<div class="form-gefahrenzone">
|
|
<span class="hinweis">Ein gelöschtes Werkzeug kann nicht wiederhergestellt werden.</span>
|
|
<form method="post" action="{{.ActionBase}}/{{.ID}}/loeschen" onsubmit="return confirm('Werkzeug wirklich löschen?')">
|
|
<button type="submit" class="entfernen">Werkzeug löschen</button>
|
|
</form>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
{{end}}
|