Commit Graph

105 Commits

Author SHA1 Message Date
karim fed003ae31 cms: adopt the schema-driven editor (core update) + tune config field types
git subtree pull of openbureau-core main brings the schema-driven admin editor
(renders sidebar + fields from /api/schema, unknown frontmatter preserved on save).
openbureau.config.js color→type:'color' (swatch) and layout options text/image/icon
so the editor reproduces the previous look.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 18:36:37 +02:00
karim 2f639c068b Merge commit '685592362aa6f53e981f9b4801d9a2e8ca318605' 2026-06-30 18:36:26 +02:00
karim 685592362a Squashed 'cms/core/' changes from ac7538f..8f4068d
8f4068d docs: HANDOVER — stage 6 (schema editor) + 9 (kgva on core) done; live cutovers pending
59b9e20 core: schema editor preserves unknown frontmatter (no data loss on save)
f8f4131 core: stage 6 finish — schema-driven editor (admin renders from /api/schema)
dd45602 docs: HANDOVER — stages 6 (partial)/7/8 done, openbureau on core; next = kgva

git-subtree-dir: cms/core
git-subtree-split: 8f4068d109d70d33b6619e039aff56ea3962802f
2026-06-30 18:36:26 +02:00
karim 3d902a0bbe Merge commit 'f518eb7a1394ee29b825e551e6557dd71cd95a28' 2026-06-30 01:24:44 +02:00
karim f518eb7a13 Squashed 'cms/core/' changes from f709b5d..ac7538f
ac7538f chore: gitignore admin/dist build output
86f9f57 core: stage 7 — auth provider (config.auth: supabase | local), DB-less core

git-subtree-dir: cms/core
git-subtree-split: ac7538fa0c2c883e29fe67c8d8c15c5f40fa2230
2026-06-30 01:24:44 +02:00
karim ecf7710b8e Merge commit '42110059c7a42b317fd1391e3cd539a555f19226' 2026-06-30 01:06:09 +02:00
karim 42110059c7 Squashed 'cms/core/' changes from 2f52ec7..f709b5d
f709b5d core: stage 6 (part) — /api/schema + /api/system + admin System panel

git-subtree-dir: cms/core
git-subtree-split: f709b5dc8ded7f138b21ac0aad4dd0855cb75aba
2026-06-30 01:06:09 +02:00
karim ab78c84296 cms: depend on openbureau-core (vendored via git subtree at cms/core)
The CMS engine is now consumed from openbureau-core instead of this repo's own
copy. cms/core = openbureau-core (subtree of its main). docker-compose builds the
cms image from ./core (core's own Dockerfile → core/admin + core/api), and a new
cms/openbureau.config.js (CMS_CONFIG) tells the generic engine this site's content
model + plugins (dialog). Old vendored cms/api + cms/admin removed.

Behaviour-preserving: core's admin/src is byte-identical to the old one, and core's
API was live-verified byte-identical against the running stack. Schema stays owned
by the stack's migrate service (db/schema.sql incl. dialog tables); DATABASE_URL
left unset so core's plugin migration runner is a no-op here. Update core later with
`git subtree pull --prefix=cms/core <core> main --squash`.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 00:14:36 +02:00
karim 80eca1bc7c Squashed 'cms/core/' content from commit 2f52ec7
git-subtree-dir: cms/core
git-subtree-split: 2f52ec7536ee87b4f097d169e1cb0f6a85aebe84
2026-06-30 00:09:44 +02:00
karim 2bf27f01be Merge commit '80eca1bc7c1174f9c44a8df9af4ddc8ab855291b' as 'cms/core' 2026-06-30 00:09:44 +02:00
karim 51bf175450 content: Archiv + Library Texte entschleimen
Kürzer, sachlicher, kein LLM-Pathos.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 03:16:25 +02:00
karim d6c5b2edb4 ui: Abstände halbiert, aktive Pills weiss
.atlas gap spacing-lg→md, margin-top spacing-md→sm;
.collection-title margin-bottom spacing-md→sm;
.lib-filter margin-bottom spacing-md→sm.
Archiv-Toggle aktiv: color white (wie Library-Pills).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 02:16:11 +02:00
karim 42f2823ff0 ui(archiv+library): Section-Header, mehr Spalten, Kategorie-Pills
Archiv-Unterseiten (Büroführung etc.): .collection-Wrapper mit
--palette-kusa, .collection-title statt .section-header — gleiche
Optik wie Archiv/Library-Übersichten. Artikel-Grid: auto-fill
minmax(220px) → 3+ Spalten. Datum unter Titel (card-layout).

Archiv-Toggle-Pills: font-family-display (wie Dialog-Pill), margin
von spacing-md → 0.5em.

Library-Übersicht: A-Z-Index → Kategorie-Pills (Gruppe ausgeschrieben,
aktiv = ichigo), Atlas als 2-Spalten-Grid (.atlas--grid2), Suche
kombiniert mit Gruppe-Filter.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 02:08:02 +02:00
karim 1709dc093c feature(library): Wiki-Links, Backlinks, Suche + A-Z-Index
single.html: [[Begriff]]-Auflösung zu internen Links (.wikilink),
fehlende Seiten als .wikilink-missing, „Siehe auch" (Gruppe+Tags)
und „Erwähnt in" (Backlinks), Eintrags-Fuss mit Gruppe + bearbeiten.

list.html: Suchfeld + A-Z-Index mit JS-Filter (Umlaute normalisiert),
data-title auf <li> für clientseitiges Filtern.

custom.css: .wikilink, .wikilink-missing, .entry-links, .entry-links-label,
.lib-filter, .lib-search, .lib-az — alle via --section-color (ichigo/rose).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 01:40:00 +02:00
karim 46ee91279e feature(archiv): Umschalter Kategorie ↔ Jahr
Übersicht /archiv umschaltbar: nach Kategorie (Jahr hinter dem Beitrag, je
Rubrik die letzten 10 + 'alle →') oder nach Jahr (Kategorie hinter dem Beitrag,
alle). Clientseitig, merkt die Wahl in localStorage.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 21:16:30 +02:00
karim 827a04cfe8 ui: farbige Linie noch etwas höher (0.08em→0.03em)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 20:57:27 +02:00
karim 98955bc097 ui: farbige Linie noch näher an Titel/Kategorien (0.15em→0.08em)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 13:23:16 +02:00
karim 886c090a8a ui: farbige Linie näher an Titel + Kategorien (padding-bottom 0.375em→0.15em)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 08:50:00 +02:00
karim f8c82ad4a2 ui: Übersichten wie Artikelseiten geboxt (Lesespalte), Oberabstand wie .single; Archiv grün / Library rot (Fuji)
- .collection wrappt Titel + Inhalt in die Lesespalte (≈48.5rem, zentriert);
  margin-top spacing-sm = identischer Oberabstand wie Artikel.
- Titel-Unterstrich + Kategorie-Linien in der Sektionsfarbe: Archiv kusa (grün),
  Library ichigo (rot).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 01:10:13 +02:00
karim 04bb79bcfa ui: Übersichts-Titel auf Inhaltsbreite begrenzt (rem statt ch); Header-Abstände wieder etwas kleiner
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 00:49:31 +02:00
karim 30fc688622 ui: Übersichts-Titel volle Breite + linksbündig (Linie über ganze Spalte)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 00:44:49 +02:00
karim 234ed52fa8 ui: Übersichts-Titel als Artikel-Heading mit Unterstrich; Header-Abstände grösser
- Archiv/Library-Titel: .collection-title (Serif, links, 3px-Linie darunter wie
  die Kategorien) statt zentriertem section-header.
- Masthead: padding 0.48rem/2.4px → 0.9rem/0.5rem, Logo↔Menü 0.12→0.45em.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 00:38:56 +02:00
karim fc422c78d0 ui: Archiv/Library mit Titel oben, Archiv-Atlas zeigt 10 + 'alle →'; Logo +10%, Masthead-Abstände +20%
- Archiv-Root + Library-Übersicht bekommen einen section-title ganz oben.
- Archiv-Atlas: letzte 10 statt 6 pro Kategorie, 'alle in … →' am Block-Ende.
- Subsektionen rendern ihren Intro (.Content) nach dem Header.
- Wordmark clamp 140-200 → 154-220 (+10%); Header-Padding 0.4rem/2px → 0.48rem/2.4px,
  Logo↔Menü 0.1→0.12em (+20%).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 00:29:42 +02:00
karim 6e4bb06f5f content: Library-Texte an einspaltiges Layout anpassen (kein Sidebar-Filter mehr)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 23:58:22 +02:00
karim d5f35bb9f8 ui: Headings kleiner + Library als Archiv-Zwilling (Sidebar weg)
- section-title 2.6→1.9rem max, 800→700; single-header h1 3→2.2rem max, 800→700;
  single-summary 1.4→1.2rem. Ruhiger, redaktioneller, site-weit.
- Library raus aus der zweispaltigen Sonderform: Übersicht = .atlas (gruppiert,
  wie Archiv-Root), Eintrag = .single (wie Essay) mit Quellen + Fuss
  (Gruppe · weitere Einträge · bearbeiten). library-nav-Partial entfernt.
- Voll CI-konform: Archiv und Library teilen jetzt dasselbe Gerüst.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 23:47:53 +02:00
karim ef024921ab library: Quellen-Fussnoten funktionieren (Beispiel auf 'Typus')
Library-Einzelseiten rendern ihren Text in .single-content → die Goldmark-
Fussnoten [^x] bekommen automatisch denselben 'Quellen'-Block wie die Essays.
Typus mit zwei echten Quellen versehen (Quatremère, Moneo).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 23:33:22 +02:00
karim 42de32888c content: Kontakt/Impressum/Datenschutz auf einer Seite (Impressum)
datenschutz.md in impressum.md gemerged (Kontakt · Verantwortlich · Datenschutz),
Alias /datenschutz/ → /impressum/ (kein toter Link). Footer: ein 'Impressum'-Link
statt 'Kontakt / Impressum' + 'Datenschutz'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 23:24:51 +02:00
karim fbf8ee1ebf ui: Menü schlanker — Manifest + Code in den Footer
Hauptmenü: JOURNAL · LIBRARY · ARCHIV · DIALOG. Manifest und Code (Repo)
wandern in die Footer-Linkleiste zu Colophon/Impressum/Datenschutz/RSS/Spenden.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:25:29 +02:00
karim 790141bafe ia: Umbenennung — Library→Archiv, Wiki→Library (URLs, Content, Code)
Neue Informationsarchitektur:
- ARCHIV (/archiv) = die fertigen Texte (vormals Library): Essays mit Byline,
  Quellen/Zitieren, Dialog, Versionsverlauf. Section "archiv".
- LIBRARY (/library) = das verlinkte Werkstattwissen (vormals Wiki): zwei-
  spaltig mit Gruppen-Navigation + Filter. Section "library".

Umgesetzt:
- content/ + layouts/ verschoben (git mv), Menü (ARCHIV+LIBRARY, kein WIKI),
  Startseiten-Journal zieht jetzt Section "archiv", Querverweise umgeschrieben
  (/library→/archiv, /wiki→/library).
- CMS: files.js klassifiziert archiv/<sec>→beitrag, library/→biblio;
  stats.js + Admin (Typ "Library-Seite", KIND_LABEL, Pfade) nachgezogen.
- single.html: Byline/Provenance/Dialog an Section "archiv" gebunden.
- Beide Header zentriert (section-header) — einheitlicher Look.
- Interne Dialog-Werte (thread.kind='library', Forum "Beiträge") unverändert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 22:13:50 +02:00
karim 54f03270d0 ui(wiki): vollbreiter Header wie Library (gleiche max-width), Spalten darunter
Wiki-Header (section-header) spannt jetzt die volle Spalte (grid-column 1/-1)
und die .wiki-Box hat dieselbe max-width/Zentrierung wie der normale Inhalt —
so fluchten Library- und Wiki-Header. Seitenleiste + Inhalt darunter.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 14:30:44 +02:00
karim b4fdc8c200 fix(wiki): Header in die Inhaltsspalte → Titel fluchtet mit dem Text
Header war volle (schmalere, zentrierte) Inhaltsbreite, die zweispaltige Fläche
darunter aber breiter → Titel versetzt. Header jetzt in .wiki-page, Oberkante
mit der Seitenleiste gleichgezogen (margin-top:0).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 14:25:22 +02:00
karim 0f80378a7c ui(wiki): Header wie die übrigen Sektionen (section-header), kein doppeltes 'Wiki'
- Übersicht: nur ein section-title (Rubrik 'Wiki' über Titel 'Wiki' entfernt)
- Einzelseite: Rubrik = Gruppe (z.B. Begriffe), Titel = Seitentitel
- Titel über die volle Breite (8px-Akzentlinie wie Library), Spalten darunter
- ungenutzte .wiki-rubric/.wiki-head CSS entfernt

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 12:50:12 +02:00
karim 3dd8d5edd4 fix(wiki): Fuss als div statt footer — globales footer{} färbte ihn schwarz
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 12:30:54 +02:00
karim 0f574bf8a7 ui: Software-Rubrik als kuratierte Landing (Werkzeuge vs. Texte)
/library/software trennt jetzt 'Werkzeuge' (Beiträge mit externem Link wie
DOSSIER/RAPPORT, als Karten mit ↗ und Farbakzent) von 'Texte & Anleitungen'
(chronologisch). Andere Rubriken bleiben unverändert. dist/ ignoriert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 12:11:07 +02:00
karim 9c9b7e03bd admin: Übersicht-Dashboard, aufgewertete Nutzerverwaltung, Wiki-Autoren
- Neue /api/stats (Admin, read-only): Inhalte/Nutzer/Dialog-Kennzahlen
- Übersicht-View als Admin-Dashboard: Stat-Karten (klickbar) + Schnellzugriff
- Nutzerverwaltung: Avatar-Initiale, angelegt/zuletzt-aktiv, Rolle beim Anlegen,
  Inline-Passwort (statt prompt), Filter, Rollen-Badge; API liefert last_sign_in_at
- Wiki im Editor anlegbar: Typ 'Wiki-Seite' + Gruppe-Feld → content/wiki/<slug>.md;
  files.js klassifiziert wiki als eigene 'kind' (eigene Sidebar-Gruppe)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 12:09:10 +02:00
karim d9ba2f7bbe feature: Wiki — verlinktes Werkstattwissen mit Gruppen-Navigation
Neue Hugo-Sektion /wiki als 'effektives Wiki' im KISS-Sinn:
- Zweispaltiges Layout: gruppierte Seitenleiste (nach Frontmatter 'group')
  mit Live-Filter + Inhalt mit TOC und 'zuletzt bearbeitet'/bearbeiten-Link
- Übersichtsseite gruppiert alle Einträge; WIKI im Hauptmenü
- Seiten ohne group landen unter 'Allgemein' (robust)
- Start-Inhalte: Meta-Seite (wie es funktioniert), Typus (→ Bibliothek),
  Dateiablage/Benennung; Archetype setzt group/summary
- Bewusst dateibasiert: jede Seite verlinkt zur Bearbeitung ins Repo

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 11:56:35 +02:00
karim 37fdc9019c dialog: UX-Pass — Lade-Skelette, Avatar-Farben, Links, Cmd+Enter
- Dezente Lade-Skelette (Shimmer) in Übersicht/Forum/Thread statt leerem Pop-in
- Deterministische, ruhige Avatar-Farbe aus dem Namen (statt einheitlichem Grau)
- URLs in Wortmeldungen klickbar (sicher, ohne innerHTML)
- ⌘/Ctrl+Enter sendet; Textarea wächst mit dem Inhalt; Hinweis im Composer
- Enter im Thread-Titel springt ins Textfeld
- prefers-reduced-motion respektiert

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 11:49:09 +02:00
karim 1fb4556ac1 ui: Quellen-Block symmetrisch (Abstand oben=unten)
article-actions margin-top spacing-md -> spacing-sm, damit der Abstand
zitieren->Trennlinie gleich gross ist wie obere Trennlinie->Quellen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 11:44:05 +02:00
karim 9163f5c90d security: public Deploy härten (Reverse-Proxy, GoTrue-Rate-Limit, RLS-Revoke)
Für die öffentlich erreichbare Instanz (dev.openbureau.ch):

1. Reverse-Proxy nur /auth/* durchreichen — /rest, /storage, /realtime raus.
   PostgREST /rest/v1/ gab die komplette DB-Schema-Beschreibung (OpenAPI) preis;
   der Browser nutzt Supabase nur fürs Login, Daten laufen über /api/*.
   (Caddy-Block in create-openbureau-lxc.sh + proxmox/README.md angepasst.)
2. GoTrue GOTRUE_RATE_LIMIT_TOKEN_REFRESH=100 — bremst Brute-Force aufs /token,
   das public direkt gegen GoTrue läuft (nicht übers Node-Rate-Limit).
3. db/schema.sql: revoke all from anon/authenticated auf posts/comments/forums/
   threads; grants nur noch service_role. RLS bleibt so auch bei künftigen
   Policies dicht (Defense-in-Depth statt "RLS ohne Policy").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 05:11:19 +02:00
karim 50cec7a965 docs: Domain-/Reverse-Proxy-Deploy dokumentieren (SITE_DOMAIN + Caddy)
Hält den dev.openbureau.ch-Deploy reproduzierbar fest: SITE_DOMAIN-Env,
Env-Overrides (local-zfs, statische IP, CTID …) und der Caddy-Block mit
Pfad-Routing (/auth/* + /rest/* -> :8000, Rest -> :8080) samt
Login-User-Anlage. Der reale Caddyfile liegt im separaten dms-stack (VPS).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 01:25:46 +02:00
karim f434885c28 proxmox: create-openbureau-lxc env-überschreibbar + domain-fähig
- Alle CONFIG-Werte per Env überschreibbar (ROOTFS_STORAGE, HOSTNAME,
  DISK_GB, RAM_MB, CORES, BRIDGE, IP, GATEWAY) — vorher teils hardcodet,
  was auf ZFS-Hosts (local-zfs statt local-lvm) non-interaktiv scheiterte.
- Neue Variable SITE_DOMAIN: setzt SITE_URL + API_EXTERNAL_URL auf
  https://<domain> (Same-Origin, Pfad-Routing am Reverse-Proxy) statt
  Container-IP. Abschluss zeigt passenden Caddy-Block.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 01:06:05 +02:00
karim b67b24a53c proxmox: Selbsthosting-Set (Dialog-Suite + Einzelskripte) + 2 Artikel
Geführter Installer proxmox/install.sh: erst Vorhaben wählen
(Komplettes Büro / 365+Synology ersetzen / nur Website / einzeln),
dann werden die nötigen LXCs der Reihe nach gebaut. Jeder Dienst ist
auch als eigenständiges, einzeln curlbares Skript verfügbar:

- proxmox/nextcloud-lxc.sh    Nextcloud AIO (ersetzt 365/Synology)
- proxmox/empty-lxc.sh        leerer Docker-LXC als Geruest
- proxmox/git-compose-lxc.sh  beliebiges Git-Repo (RAPPORT/DOSSIER)
- (OPENBUREAU: bestehendes cms/proxmox/create-openbureau-lxc.sh)

Gemeinsames Muster: unprivilegierter Debian-12-LXC mit nesting+keyctl,
Docker via get.docker.com, Dienst als Container/Compose. proxmox/README.md
dokumentiert beide Wege.

Dazu zwei Bibliotheksbeitraege (Hochparterre-Ton):
- server-im-eigenen-haus.md  — das Warum/Ziel
- proxmox-schritt-fuer-schritt.md — die Anleitung mit curl-Befehlen

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 01:20:43 +02:00
karim b72f744963 content: Datenschutz-Seite + Footer-Link
Deutsche Datenschutzerklärung an die tatsächliche Praxis angepasst (self-hosted,
keine Tracker/Analytics, Server-Logs nur technisch, Dialog-Konto mit E-Mail/Name,
revDSG-Rechte, EDÖB). Footer: Datenschutz neben Kontakt/Impressum.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 05:11:10 +02:00
karim fcbe91c0da ui: Uhr-Icon explizit terracotta (Akzent), weiß beim Hover
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 04:03:07 +02:00
karim 1196f9adf6 ui: Versions-Banner in normaler Schrift (Inter/sans) statt Mono
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 03:18:13 +02:00
karim e62b4c3704 ui: zitieren als Link (↗), Versionen mit Uhr-Icon, interne Zitierweise als Option
- zitieren: kein Pill mehr — Link in der Pill-Schrift (Display) mit ↗ am Ende
- Versionen: Pill behält, davor ein monochromes Uhr-SVG (currentColor)
- Zitier-Formate: „intern" (OPENBUREAU-Hausformat inkl. Version) als dritte
  Option und Default, neben APA und DIN

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 03:11:39 +02:00
karim fce6c9eabc ui: zitieren+Versionen als Pills (wie Dialog), Quellen kompakter
- zitieren + Versionen jetzt Akzent-Outline-Pills wie Dialog (statt Links);
  „kopieren" in der Quellenangabe bleibt ein Link
- Quellen/Fußnoten: feste, vom Theme vererbte Zeilenhöhe (~26px) mit
  unitless line-height:1.5 überschrieben + kleinere Abstände → deutlich
  kompakter. Aktionsreihe-Abstände reduziert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 02:54:16 +02:00
karim 6aa88a07a6 ui: Artikel-Fuß neu — zitieren als Link, Tags neben Dialog, Versionen-Liste
- zitieren: schlichter Link direkt unter den Quellen (statt Pill); klappt eine
  dezente, gesamthaft kopierbare Quellenangabe auf — wahlweise APA oder DIN
- Tags raus von unter den Quellen → in die Aktionsreihe, ganz rechts neben Dialog
- „Versionen" als Link eine Zeile darunter; Liste in voller Inhaltsbreite und
  normaler Schrift/Größe (statt mono-Box). Auswahl öffnet Diff/Fassung oben.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 02:19:27 +02:00
karim f2aef5c89a feature: Versionsverlauf + Diff (rot/grün) komplett auf der Seite
- API: /api/history/diff liefert den Unified-Diff einer Fassung (git show)
- „Version vom <Datum>"-Pill (statt Marke oben + Git-Links) öffnet den Verlauf
  direkt auf openbureau: Liste der Fassungen → Diff rot/grün wie auf GitHub,
  Toggle „ganze Fassung anzeigen", Rücksprung. Keine externen Git-Links mehr.
- Pills neu: Dialog (Akzent-Outline, wie zuvor) + Version/Zitieren im Tag-Look
- CSS: Tag-Pills, Diff-Styling (d-add/d-del/d-hunk), alte Badge-Styles raus

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 02:06:43 +02:00
karim 0cc90ac295 ui: Dialog als Pill in die Provenance-Reihe, sticht durch Symbol+Akzent hervor
Dialog-Link in .provenance verschoben: → Dialog · Version · Verlauf · Zitieren
in einer Reihe, gleiche Pill-Form. Dialog (prov-dialog) hebt sich durch Pfeil
+ Akzentfarbe (Rahmen/Text, fett) ab, Hover füllt Akzent. Zähler-Script mit ins
Partial gezogen; alte .dialog-link-Klasse/-CSS entfernt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 01:52:45 +02:00