feat(favicon): eigene Favicon-Fassung + Raster, CLI-Schwellen getrennt

- assets/favicon/kalina-favicon.svg: K ohne Beeren-Cluster (bei 16 px unsichtbar)
- Raster 16/32/48/180/192/512 + ico mit PIL gezeichnet: ImageMagick/MSVG ignoriert
  vererbte stroke-Attribute und liefert die Marke ohne K
- tools/kalina-pdf: --min-fill (0.10, Bruch) von --ziel (0.55, Hinweis) getrennt,
  Deckblatt wird berichtet statt bewertet, Raster auch fuer Seite 1
This commit is contained in:
mm committed 2026-10-23 10:42:52 +02:00
1 parent db3725da4d
commit 9db207efe8
14 files changed
+45 -7

No files matched your search

+18 -2
View File
@@ -24,6 +24,8 @@ nicht ad hoc in einem Projekt. Siehe `docs/aenderungen.md`.
| `templates/page.html` | Einzelne Seite / Handout | | `templates/page.html` | Einzelne Seite / Handout |
| `templates/bild-mit-prompt.html` | Generiertes Bild mit Prompt als Dokument | | `templates/bild-mit-prompt.html` | Generiertes Bild mit Prompt als Dokument |
| `assets/kalina-mark.svg` | Marke (Kreis + K + Beeren), schriftfrei, überall einsetzbar | | `assets/kalina-mark.svg` | Marke (Kreis + K + Beeren), schriftfrei, überall einsetzbar |
| `assets/favicon/kalina-favicon.svg` | Favicon-Fassung: K ohne Beeren, weil Beeren bei 16 px zu Matsch werden |
| `assets/favicon/kalina-{16,32,48,180,192,512}.png`, `kalina.ico` | fertige Raster, gezeichnet statt gerendert (siehe Regel unten) |
| `assets/kalina-wordmark.svg` | Wortmarke — nur verwenden, wo DejaVu Sans liegt | | `assets/kalina-wordmark.svg` | Wortmarke — nur verwenden, wo DejaVu Sans liegt |
| `assets/kalina-logo-combined.svg` | Marke + Wortmarke | | `assets/kalina-logo-combined.svg` | Marke + Wortmarke |
| `assets/favicon/` | 16 / 32 / 180 / 512 px, gerendert aus der Marke | | `assets/favicon/` | 16 / 32 / 180 / 512 px, gerendert aus der Marke |
@@ -47,8 +49,13 @@ tools/kalina-pdf check bericht.pdf --raster raster/
`build` kopiert fehlendes `kalina-ci.css` neben die HTML-Datei, weil weasyprint `build` kopiert fehlendes `kalina-ci.css` neben die HTML-Datei, weil weasyprint
Stylesheets relativ zur HTML-Datei auflöst. `stamp` lässt das Original unangetastet Stylesheets relativ zur HTML-Datei auflöst. `stamp` lässt das Original unangetastet
und schreibt immer eine neue Datei. `check` bricht mit Exit 1 ab, wenn eine Seite und schreibt immer eine neue Datei.
unter 55 % Füllgrad liegt — eine Fast-Leerseite ist ein Layoutfehler, kein Inhalt.
`check` hat **zwei** Schwellen: `--min-fill` (Standard 0,10) bricht mit Exit 1 ab, weil
darunter eine Fast-Leerseite steht — ein Umbruchfehler, kein Inhalt. `--ziel` (0,55) wird
nur berichtet: dichter Bericht mit Tabellen und Zeichnungen erreicht das, reiner
Fließtext selten. Seite 1 gilt als Deckblatt und wird berichtet, nicht bewertet
(`--kein-deckblatt-bonus` schaltet das ab) — ein Deckblatt ist absichtlich dünn.
## Regeln, die aus Fehlern entstanden sind ## Regeln, die aus Fehlern entstanden sind
@@ -70,6 +77,15 @@ unter 55 % Füllgrad liegt — eine Fast-Leerseite ist ein Layoutfehler, kein In
hinterlässt fast leere Vorderseiten (gemessen: 14 Seiten, eine bei 11,6 %; nach hinterlässt fast leere Vorderseiten (gemessen: 14 Seiten, eine bei 11,6 %; nach
Aufhebung 10 Seiten ohne Seite unter 89 %). Im eigenen `<style>`: Aufhebung 10 Seiten ohne Seite unter 89 %). Im eigenen `<style>`:
`@media print { .abschnitt { break-inside: auto; } }`, `h2, h3 { break-after: avoid }`. `@media print { .abschnitt { break-inside: auto; } }`, `h2, h3 { break-after: avoid }`.
- **ImageMagick rendert die Marke ohne K.** `magick kalina-mark.svg -resize 32x32 x.png`
liefert einen dunklen Kreis mit rotem Punkt — die K-Striche fehlen still, weil der
MSVG-Renderer vererbte `stroke`-Attribute am `<g>` ignoriert. Wer die Marke rastert:
Attribute an jedes `<path>` schreiben und das Ergebnis **messen** (helle Pixel im
Kreis zählen), nicht ansehen; oder das Raster mit PIL direkt zeichnen (so entstand
`assets/favicon/kalina-*.png`) oder einen echten Renderer (librsvg, cairosvg) nutzen.
- **Favicons brauchen eine eigene Fassung.** Beeren mit r = 2,2 auf einer 240er viewBox
sind bei 16 px 0,15 px groß: matschig, aber sie verwischen den Kreis. Die Favicon-SVG
lässt den Cluster weg und verstärkt den Strich.
- **Füllgrad ohne Kopf- und Fußzone messen** — sonst zählt die Fußzeile als unterster - **Füllgrad ohne Kopf- und Fußzone messen** — sonst zählt die Fußzeile als unterster
Block und jede Seite meldet dieselben ~105 %. `kalina-pdf check` macht das richtig. Block und jede Seite meldet dieselben ~105 %. `kalina-pdf check` macht das richtig.
- **Überschrift und lange Tabelle gehören zusammen.** Reißt eine 12-Zeilen-Tabelle - **Überschrift und lange Tabelle gehören zusammen.** Reißt eine 12-Zeilen-Tabelle
Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Favicon-Fassung der Marke: Kreis, K, roter Kern - ohne Beeren-Cluster.
Bei 16 und 32 px sind Beeren mit r=2.2 (auf 240 viewBox) 0,15 bzw. 0,3 px gross
und werden zu grauem Matsch; das K bleibt lesbar. Volle Marke: kalina-mark.svg
Die Strich-Attribute stehen bewusst an jedem <path> und nicht am <g>: ImageMagick
rendert SVG mit MSVG und ignoriert vererbte stroke-Attribute - das K verschwindet
dann still (gemessen: Favicon ohne K, nur Kreis und roter Punkt). -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240" role="img" aria-label="KALINA">
<title>KALINA</title>
<circle cx="120" cy="120" r="116" fill="#0e1419"/>
<path d="M80,64 L80,176" fill="none" stroke="#f5f5ef" stroke-width="34" stroke-linecap="square" stroke-linejoin="miter"/>
<path d="M98,120 L180,58" fill="none" stroke="#f5f5ef" stroke-width="34" stroke-linecap="square" stroke-linejoin="miter"/>
<path d="M98,124 L180,182" fill="none" stroke="#f5f5ef" stroke-width="34" stroke-linecap="square" stroke-linejoin="miter"/>
<circle cx="98" cy="122" r="7" fill="#c1121f"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 845 B

+11 -5
View File
@@ -102,7 +102,9 @@
"fusszone_pt": 40, "fusszone_pt": 40,
"min_fuellgrad": 0.55, "min_fuellgrad": 0.55,
"marke_min_px": 24, "marke_min_px": 24,
"wortmarke_min_scale": 0.2 "wortmarke_min_scale": 0.2,
"favicon_min_px": 16,
"favicon_regel": "Beeren-Cluster erst ab 180 px; darunter Favicon-Fassung (K ohne Beeren)"
}, },
"dateien": { "dateien": {
"css": "css/kalina-ci.css", "css": "css/kalina-ci.css",
@@ -110,10 +112,14 @@
"wortmarke": "assets/kalina-wordmark.svg", "wortmarke": "assets/kalina-wordmark.svg",
"logo_kombiniert": "assets/kalina-logo-combined.svg", "logo_kombiniert": "assets/kalina-logo-combined.svg",
"favicon": [ "favicon": [
"assets/favicon/kalina-favicon-16.png", "assets/favicon/kalina-favicon.svg",
"assets/favicon/kalina-favicon-32.png", "assets/favicon/kalina-16.png",
"assets/favicon/kalina-favicon-180.png", "assets/favicon/kalina-32.png",
"assets/favicon/kalina-favicon-512.png" "assets/favicon/kalina-48.png",
"assets/favicon/kalina-180.png",
"assets/favicon/kalina-192.png",
"assets/favicon/kalina-512.png",
"assets/favicon/kalina.ico"
], ],
"vorlagen": [ "vorlagen": [
"templates/report.html", "templates/report.html",