Files
deklarix/internal/web/templates/layout.html
noroot 36af1bf288 feat: responsives Frontend — Seitenleiste ab Desktop, Tabellen-Styling
Nav wird jetzt für alle Seiten aus einer einzigen Stelle
(layout.html-Block) gerendert: auf dem Handy ein per Checkbox-Hack
aufklappbares Menü (kein JavaScript), ab 960px Breite per CSS in eine
permanente, dunkle Seitenleiste im enconf-Look verwandelt — dieselbe
Markup-Struktur bedient beide Layouts, kein separates Desktop-Template.
<details>/<summary> wurde bewusst NICHT verwendet: aktuelle
Chromium-Versionen steuern dessen Auf-/Zuklapp-Zustand über eine
CSS-resistente interne Animation (auch mit !important nicht
überschreibbar), per Headless-Screenshot verifiziert.

Zusätzlich: Tabellen (vorher komplett ungestylt, betraf v. a. das
Register) haben jetzt echte Gestaltung inkl. horizontal scrollbarem
Wrapper für schmale Bildschirme, Listenkarten ohne Link-Wrapper
(Nutzer-/Abteilungsliste) bekommen dieselbe Kartenoptik wie
verlinkte Einträge, und destruktive Aktionen (Löschen/Deaktivieren)
sind jetzt visuell von primären Aktionen unterschieden.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-29 15:06:14 +02:00

102 lines
3.8 KiB
HTML

{{define "head"}}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{.Title}} — Deklarix</title>
<link rel="stylesheet" href="/static/app.css">
<script src="/static/htmx.min.js"></script>
{{end}}
{{/* Eine einzige Nav-Definition für alle Seiten (siehe navData in
middleware.go) — auf dem Handy ein aufklappbares Menü (Checkbox-
Hack, kein JavaScript: das <details>-Element scheitert daran, dass
aktuelle Chromium-Versionen dessen Auf-/Zuklapp-Zustand über eine
interne, nicht per CSS überschreibbare Animation steuern), ab
Desktop-Breite per CSS in eine permanent sichtbare Seitenleiste
verwandelt. Dieselbe Markup-Struktur bedient beide Layouts, siehe
app.css .app-nav. Die Checkbox ist bei jedem Seitenaufruf frisch
unchecked (serverseitig gerendert, kein Zustand über Navigation
hinweg nötig). */}}
{{define "nav"}}
<header class="topbar">
<a class="brand" href="/">Deklarix</a>
<input type="checkbox" id="nav-toggle" class="nav-toggle">
<label for="nav-toggle" class="nav-toggle-label" aria-label="Menü öffnen">Menü</label>
<nav class="app-nav">
<a href="/">Start</a>
{{if not .IsBetreiber}}<a href="/antraege">Meine Anträge</a>{{end}}
{{if .IsFachebene}}<a href="/faelle">Posteingang</a>{{end}}
{{if .IsFachebene}}<a href="/registereintraege">Register</a>{{end}}
{{if .IsFachebene}}<a href="/wiedervorlage">Wiedervorlage</a>{{end}}
{{if .IsAdmin}}<a href="/verwaltung/nutzer">Nutzerverwaltung</a>{{end}}
{{if .IsAdmin}}<a href="/verwaltung/abteilungen">Abteilungen</a>{{end}}
{{if .IsAdmin}}<a href="/verwaltung/werkzeuge">Werkzeugkatalog</a>{{end}}
{{if .IsBetreiber}}<a href="/betreiber">Plattform</a>{{end}}
<form method="post" action="/logout">
<button type="submit">Abmelden</button>
</form>
</nav>
</header>
{{end}}
{{/* bewertung-block rendert eine Bewertung (Datenklasse, KI-VO-
Einstufung, Anforderungen, Werkzeuge, Pflicht-Disclaimer) — gemeinsam
genutzt von antrag_detail.html (Ebene 2, nur Ansicht) und
fall_detail.html (Ebene 3, mit Entscheiden-Formular). Erwartet eine
*bewertungView als . */}}
{{define "bewertung-block"}}
<h2>Bewertung</h2>
{{if .Verboten}}
<p class="fehler"><strong>Verboten.</strong> Diese Nutzung fällt laut Einstufung unter ein verbotenes KI-Praktiken-Muster der KI-VO ({{.Einstufung}}). {{.EinstufungHerleitung}}</p>
{{end}}
<p><strong>Datenklasse:</strong> {{.Datenklasse}}<br>
<span class="hinweis">{{.DatenklasseHerleitung}}</span></p>
<p><strong>KI-VO-Einstufung:</strong> {{.Einstufung}}<br>
<span class="hinweis">{{.EinstufungHerleitung}}</span></p>
{{if .Anforderungen}}
<h3>Anforderungen</h3>
<ul class="findings">
{{range .Anforderungen}}
<li class="finding finding-mittel">
<strong>{{.Beschreibung}}</strong>
<p>{{.Herleitung}}</p>
</li>
{{end}}
</ul>
{{end}}
{{if not .Verboten}}
<h3>Zulässige Werkzeuge</h3>
{{if .ZulaessigeWerkzeuge}}
<ul>
{{range .ZulaessigeWerkzeuge}}<li>{{.}}</li>{{end}}
</ul>
{{else}}
<p class="rueckfrage">Kein Werkzeug im Katalog erfüllt aktuell alle Anforderungen dieses Antrags.</p>
{{end}}
{{if .AusgeschlosseneWerkzeuge}}
<h3>Ausgeschlossene Werkzeuge</h3>
<ul class="findings">
{{range .AusgeschlosseneWerkzeuge}}
<li class="finding finding-niedrig">
<strong>{{.Name}}</strong>
<p>Nicht erfüllt: {{range $i, $a := .NichtErfuellt}}{{if $i}}, {{end}}{{$a}}{{end}}</p>
</li>
{{end}}
</ul>
{{end}}
{{end}}
<p class="disclaimer">
Das System entscheidet nicht. Es bereitet vor. Diese Einstufung ist ein
Vorschlag zur Herleitung von Datenklasse, KI-VO-Einstufung und
Anforderungen (Regelwerk {{.RegelwerkVersion}}, Katalog
{{.KatalogVersion}}, berechnet am {{.CreatedAt}}) —
die Entscheidung trifft ein Mensch.
</p>
{{end}}