Bootstrap lokal einbetten und Stil der AG anlegen (#27)

- werkzeuge/bootstrap/: Bootstrap 5.3.8 (CSS, JS-Bundle) und Bootstrap
  Icons 1.13.1 (CSS, woff2/woff) byte-gleich aus den npm-Paketen,
  Integrität geprüft; README mit Version, Quelle, Integrität, Lizenz
  und Aktualisierung; Lizenzen (MIT) daneben; .gitattributes: binary,
  die README bleibt Text mit Diff.
- werkzeuge/stil/ag_prozesse.css: eigene kleine Stilschicht (ag-*):
  Seite in voller Höhe, dunkle Navigationsleiste, hellgrauer
  Hintergrund, Karten mit farbigem Rand, Tabellenziffern, Druck.
  Vorbild VLN_SN/EA-Bilanz, nichts übernommen.
- Vorschau: Kopfzeile als dunkle Navigationsleiste mit Icon-Knöpfen;
  JavaScript, IDs und Zeichenfläche (Wasserzeichen) unverändert.
- scripts/vorschau.py bettet Bootstrap, Icons und Stil ein und setzt die
  Icon-Schrift als data:-URI ein (_schriften_einbetten); ein nicht
  einbettbarer Schriftverweis bricht laut ab.
- Tests: drei neue in test_vorschau.py; der Aufbau von
  test_bibliothek_mit_script_ende_wird_abgelehnt kopiert jetzt ganz
  werkzeuge/ (Erwartung unverändert).
- AGENTS.md: eingebettete Fremdbibliotheken sind bpmn-js und Bootstrap.
- Tests: python -m pytest -q -> 256 bestanden, 1 übersprungen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-25 20:11:29 +02:00
co-authored by Claude Opus 5.5
parent 73a7f41492
commit b341a658bc
17 changed files with 248 additions and 58 deletions
+34
View File
@@ -0,0 +1,34 @@
/* Gemeinsamer Stil der HTML-Seiten der AG Prozesse, aufbauend auf Bootstrap 5 (werkzeuge/bootstrap/).
Anmutung wie die Anwendungen in VLN_SN (Vorbild EA-Bilanz, siehe docs/wissen/vln_sn.md) – eigene Regeln,
nichts übernommen. Klassen beginnen mit "ag-", damit sie sich nicht mit Bootstrap überschneiden. */
:root {
--ag-akzent: var(--bs-primary, #0d6efd);
--ag-schrift: .9rem;
}
/* Seite in voller Höhe: dunkle Navigationsleiste oben, Arbeitsbereich darunter */
html.ag-seite, html.ag-seite body { height: 100%; }
.ag-app {
display: flex; flex-direction: column; height: 100vh; overflow: hidden;
font-size: var(--ag-schrift);
background: var(--bs-tertiary-bg, #f4f5f7);
}
.ag-nav { flex: 0 0 auto; }
.ag-nav .navbar-brand { font-size: 1rem; }
.ag-nav .btn-group { flex-wrap: nowrap; }
.ag-inhalt { flex: 1 1 auto; min-height: 0; position: relative; background: var(--bs-body-bg, #fff); }
/* Karten mit farbigem linken Rand je Kategorie */
.ag-karte { border-left: 4px solid var(--ag-akzent); }
.ag-karte-erfolg { border-left-color: var(--bs-success, #198754); }
.ag-karte-warnung { border-left-color: var(--bs-warning, #ffc107); }
.ag-karte-fehler { border-left-color: var(--bs-danger, #dc3545); }
/* Zahlen in Tabellenziffern, rechtsbündig */
.ag-zahl { font-variant-numeric: tabular-nums; text-align: right; }
@media print {
.ag-nav { display: none !important; }
.ag-app { height: auto; overflow: visible; background: #fff; }
}