Files
Kalina 78d4ed333c feat(shell): Ptyxis fuer Ubuntu 26 und Wayland einrichten
Ubuntu 26.04 bringt GNOME 50 und damit Ptyxis als Standard-Terminal (Wayland-nativ). install.sh legt die Palette als ~/.local/share/org.gnome.Ptyxis/palettes/KalinaCI.palette ab und haengt sie per gsettings (relocatable Schema org.gnome.Ptyxis.Profile) an jedes Profil; ohne Profil nennt es den Weg von Hand. Neue Vorlage shell/palettes/KalinaCI.palette, README-Abschnitt mit echtem Wayland-Screenshot (74,9 % Tinte, 11,9 % Titelbar, ANSI-Farben innerhalb 2/255).
2026-11-02 19:22:46 +01:00

11 KiB
Raw Permalink Blame History

name, description, metadata
name description metadata
kalina-ci Use when a PDF, page or slide must carry the KALINA corporate identity. One CSS, one CLI, one source.
version stand
1.3.2 2026-11-02

KALINA CI — Corporate Identity für Dokumente und Seiten

Diese Skill-Datei ist der Einstiegspunkt in die KALINA CI. Alles, was nach KALINA aussehen soll — PDF, Bericht, Angebot, Folie, Landingpage — nimmt diese Dateien, nicht selbst erfundene Farben und nicht ein nachgebautes Logo.

Die CI ist versioniert. Änderungen laufen über das Repository (Issue → Branch → PR), nicht ad hoc in einem Projekt. Siehe docs/aenderungen.md.

Was hier liegt

Pfad Rolle
css/kalina-ci.css Satzvorlage: @page A4, Kopfleiste, Tabellen, Plakette, Fußlinie
templates/report.html Mehrseitiger Bericht (Deckblatt, Abschnitte, Tabellen)
templates/page.html Einzelne Seite / Handout
templates/bild-mit-prompt.html Generiertes Bild mit Prompt als Dokument
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-logo-combined.svg Marke + Wortmarke
assets/favicon/ 16 / 32 / 180 / 512 px, gerendert aus der Marke
scripts/stamp_existing_pdf.py Fremd-PDF stempeln (Deckblatt, Fußzeile, optional Kopfb and)
tools/kalina-pdf CLI: bauen, stempeln, prüfen
tokens.json Farben, Schriften, Geometrie, Zonen — maschinenlesbar

Drei Wege, ein Ergebnis

# 1. Neues Dokument: Vorlage kopieren, «Platzhalter» füllen, bauen
cp templates/report.html bericht.html
tools/kalina-pdf build bericht.html --stamp --titel "Angebot 2026-17"

# 2. Fremdes PDF (Anhang, Behördenpost, Kundenpdf) mit CI versehen
tools/kalina-pdf stamp eingang.pdf -o eingang-kalina.pdf --titel "Rechnung 4711"

# 3. Nur prüfen: Seiten, Füllgrad je Seite, Seite 1 als PNG
tools/kalina-pdf check bericht.pdf --raster raster/

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 und schreibt immer eine neue Datei.

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.

Autor und Impressum (verbindlich)

Autor ist immer Kalina — nicht der ausführende Agent, nicht „KI", nicht Mathias. Grund (Mathias, 23.10.2026): das Kalina-System ist der durchführende Part. Gilt ausdrücklich auch für Entwürfe.

  • Jede Seite trägt das Impressum im Fußband: Marke, KALINA · «Dokumenttitel» · Stand …, Zeile „Erstellt durch das Kalina-System · «Auftrag/Projekt · Ticket»" und © «JJJJ» kalina.si. Mathias, 23.10.2026: „Alle durchstempeln – es benötigt keine eigene Seite." Keine separate Impressumsseite. Die Vorlagen report.html, page.html, bild-mit-prompt.html tragen das bereits — Platzhalter füllen, nicht löschen.
  • Decks: Autor auf der Titelfolie, auf der Schlussfolie genügt Marke + © «JJJJ» kalina.si in einer Zeile.
  • HTML: <meta name="author" content="Kalina"> und dieselbe Fußzeile.
  • Commit-Autor: Kalina <kalina@m-m.bio>.
  • Prüfung vor Auslieferung: kalina.si per Textsuche auf jeder Seite nachweisen und das Fußband mindestens einmal als Raster ansehen — Marke sichtbar, Copyright vollständig. Ein Impressum, das allein auf einer leeren Seite landet, ist ein Umbruchfehler: kompakt ins Fußband, nicht als eigener Abschnitt mit break-inside: avoid.

Bestehende PDFs nachstempeln

Alte Artefakte tragen oft ai.m-m.bio im Fuß und einen Agentennamen als Verfasser. Nicht aus dem HTML neu bauen: lokal läuft WeasyPrint 69, die Originale entstanden mit 62.3, und die Dokumentordner haben eigene CSS-Kopien — derselbe Quelltext ergab 155 Wörter weniger und verlagerte Tabellen (gemessen an buchungsportale-…-v1.pdf, Seite 5: 157 → 55 Wörter).

  1. scripts/stamp_existing_pdf.py <in.pdf> <out.pdf> --ohne-deckblatt setzt Fußlinie, Marke und KALINA · © <Jahr> kalina.si auf jede Seite, ohne das Layout anzufassen.
  2. Das Fußband wird vorher in der gemessenen Seitenfarbe gefüllt (häufigste Farbe im Streifen) — sonst steht auf Ink-Seiten ein weißer Balken über dem alten Fuß.
  3. Verfasserzelle redigieren (pymupdf add_redact_annot), aber nur in Zeilen, die Agentenname und „CORP 1" tragen; inhaltliche Nennungen im Fließtext bleiben stehen.
  4. Prüfen: Seitenzahl alt = neu, kalina.si auf jeder Seite, kein Agentenname mehr, letzte Seite als Raster ansehen.

Das Stempel-PDF wächst (~30–40 kB je Seite durch den matplotlib-Bett). Beim Ersetzen in Nextcloud die Größe vergleichen, nicht den HTTP-Status; nc-put.py <datei> "<pfad>" --overwrite nutzt nc_webdav_write_file über MCP (ohne --overwrite schlägt das Ersetzen fail-closed fehl).

Vision lokal (verbindlich)

Bildprüfung läuft lokal auf dem ROG, nie in der Cloud — gleiches Ergebnis, keine Token-Kosten (Mathias, 23.10.2026).

  • Modelle am Router http://192.168.188.187:8100/v1: rog-vision (Gemma4-12B, multimodal), rog-agent (Qwen2.5-VL-7B), rog-ocr (GLM-OCR für Text im Bild).
  • Hermes: auxiliary.vision.model=rog-vision, provider=kalinarouter-auto. Prüfen mit hermes config get auxiliary.vision; ändern mit hermes config set, nicht per Datei-Edit.
  • Nicht auto für Bilder, solange ollama-cloud im Auto-Pfad vision-fähig ist — ein belegtes ROG kann sonst still in die Cloud ausweichen.
  • Stichprobe statt Bilderlawine: drei Seiten visuell, den Rest geometrisch (Pixel-Hash, getBoundingClientRect, PyMuPDF-Rects). Gemessen: 43 Einzelaufrufe für ein 13-Seiten-PDF kosteten 10 von 30 erlaubten Run-Minuten.

Regeln, die aus Fehlern entstanden sind

  • Marke ja, Wortmarke vorsichtig. Die Marke (Kreis + K + Beeren) ist schriftfrei und skaliert beliebig. Die Wortmarken-SVG setzt ihre Buchstaben absolut (x = 10/80/150/212/242/319) und ist auf DejaVu Sans Bold vermessen — in einer fremden Schrift stoßen L, i und N zusammen. In Dokumenten und Webseiten die Wortmarke deshalb als Text setzen: KAL + rotes i + NA.
  • Auf helle Fläche Ink, auf Ink-Fläche Bone. Bone auf Bone ist unsichtbar; im gerasterten PDF stand dann nur das rote i.
  • Wortmarke nicht unter s ≈ 0.2. Darunter ist der i-Schaft ~2 pt lang und der Beeren-Cluster kleiner als 2 pt. In Kopfzeilen s = 0.24.
  • Marke im Band nie größer als das Band. 44 mm Marke in 12 mm Band ragt heraus und liegt auf dem fremden Titel.
  • Nach jedem Bau die erste Seite rastern und ansehen, nicht auf Sichtbarkeit schließen: tools/kalina-pdf check x.pdf --raster raster/.
  • break-inside: avoid nur für kurze Abschnitte. Bei Berichten mit Abschnitten länger als eine Seite erzwingt die Vorlage einen Seitenanfang je Abschnitt und hinterlässt fast leere Vorderseiten (gemessen: 14 Seiten, eine bei 11,6 %; nach Aufhebung 10 Seiten ohne Seite unter 89 %). Im eigenen <style>: @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 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 mit einer Zeile auf die Folgeseite, ist das ein Satzfehler: break-before: page an die Überschrift oder Tabelle kürzen.

Farben

Ink #0B0F14 · Bone #F5F5EF · Kalina-Rot #C1121F · Steel #3A4250 · Muted #8A94A2

Kalina-Rot trägt auf Ink nur 3,09:1 und ist Grafik (Marke, Cursor, Regel), nie Text. Text auf Ink ist #E0454F (4,70:1). Dieselbe Regel gilt im CSS, im VS-Code-Theme und im Shell-Prompt — wer sie bricht, bricht die Lesbarkeit, nicht den Geschmack.

Shell und Terminal (seit 1.3.0)

Wer eine Maschine in die CI holen soll: nicht von Hand nachbauen, sondern

curl -fsSLo install.sh https://gitea.m-m.bio/mm/kalina-ci/raw/branch/main/shell/install.sh
bash install.sh --dry-run && bash install.sh

zsh ist Pflicht — der Prompt ist ein zsh-Modul. Das Skript installiert zsh bei Bedarf selbst; kann es das nicht (kein Paketmanager, sudo ohne Passwort), bricht der Shell-Teil mit Exit 1 ab und nennt den Befehl, statt einen wirkungslosen ~/.zshrc-Eintrag zu hinterlassen. Danach exec zsh oder neu einloggen, sonst greift die Login-Shell nicht.

Das Skript ist idempotent, sichert jede Datei und erkennt foot, ptyxis, qterminal, xfce4-terminal sowie xterm. Ubuntu 26 bringt GNOME 50 und damit Ptyxis als Standard-Terminal (Wayland): Palette als ~/.local/share/org.gnome.Ptyxis/palettes/KalinaCI.palette ablegen und per gsettings set "org.gnome.Ptyxis.Profile:/org/gnome/Ptyxis/Profiles/<uuid>/" palette "KalinaCI" am Profil eintragen — die Datei allein genuegt nicht. Die Paletten sind gemessen, nicht geraten — die drei Fallen (qtermwidget6 kennt kein Benutzerverzeichnis, xfconf überstimmt terminalrc, foot will [colors-dark]) stehen in shell/README.md.

Wenn ein anderer Agent das Design macht

Werkzeuge und Agenten, die eine Seite bauen (Bildgeneratoren, externe Design-Dienste), sehen diese Dateien nicht und erfinden sonst ein eigenes Logo — markenfremd und meist als schweres Raster-PNG. Also die Marke mitgeben: SVG inline einbetten oder als Datei beilegen, nie einen Fremdanbieter die Marke neu zeichnen lassen. Danach nachsehen, dass das Ergebnis keine Bilder von fremden Hosts zieht.