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>
This commit is contained in:
2026-06-02 02:06:43 +02:00
parent 0cc90ac295
commit f2aef5c89a
5 changed files with 122 additions and 71 deletions
+46 -31
View File
@@ -554,19 +554,20 @@ a.byline-author:hover, a.journal-author:hover { color: var(--accent); }
/* ── Dialog ───────────────────────────────────────────────────────────────── */
/* Link am Ende des Beitrags (der Beitrag selbst bleibt sauber) */
/* Dialog-Pill in der Provenance-Reihe: gleiche Form wie die anderen, sticht
aber durch Pfeil-Symbol + Akzentfarbe (Rahmen/Text) hervor. */
/* Dialog-Pill: Akzent-Outline + Pfeil — sticht neben den gefüllten Tag-Pills
hervor (wie der frühere Dialog-Link). */
.prov-dialog {
display: inline-block;
font-family: var(--font-family-mono);
font-size: var(--font-size-small);
font-weight: 600;
font-family: var(--font-family-display);
font-weight: 500;
font-size: 0.82rem;
letter-spacing: 0.02em;
color: var(--accent);
text-decoration: none;
background: none;
border: 1px solid var(--accent);
border-radius: 999px;
padding: 0.12em 0.7em;
padding: 0.28em 0.85em;
}
.prov-dialog:hover { background: var(--accent); color: #fff; }
@@ -1486,22 +1487,30 @@ img:hover { filter: grayscale(0%); }
font-size: var(--font-size-small);
color: var(--color-text-muted);
}
/* Version / Verlauf / Zitieren als dezente Outline-Pills (wie die Versions-Marke). */
.provenance a,
/* Version/Zitieren im Tag-Look (gefüllt, weich); Dialog separat (Akzent-Outline). */
.prov-version,
.prov-cite {
display: inline-block;
font-family: var(--font-family-mono);
font-size: var(--font-size-small);
color: var(--color-text-muted);
background: none;
border: 1px solid var(--color-border);
padding: 0.35rem 0.85rem;
line-height: 1.3;
font-family: var(--font-family-display);
font-size: 0.78rem;
font-weight: 500;
letter-spacing: 0.02em;
text-transform: lowercase;
color: var(--color-text-primary);
background: color-mix(in oklab, var(--section-color, var(--accent)) 14%, transparent);
border: none;
border-radius: 999px;
padding: 0.12em 0.7em;
text-decoration: none;
cursor: pointer;
}
.provenance a:hover,
.prov-cite:hover { border-color: var(--accent); color: var(--accent); }
.prov-version:hover,
.prov-cite:hover,
.prov-version[aria-expanded="true"],
.prov-cite[aria-expanded="true"] {
background: color-mix(in oklab, var(--section-color, var(--accent)) 30%, transparent);
}
/* Aufklappendes Zitat-Panel: zeigt die Quellenangabe lesbar + Kopieren. */
.prov-citation {
@@ -1539,20 +1548,6 @@ img:hover { filter: grayscale(0%); }
/* ------------------------------------------------------------------------
Versions-Marke + Verlauf — alte Fassungen direkt auf der Seite anzeigen.
------------------------------------------------------------------------ */
.version-line { margin: 0.5rem 0 0; }
.version-badge {
font-family: var(--font-family-mono);
font-size: var(--font-size-small);
color: var(--color-text-muted);
background: none;
border: 1px solid var(--color-border);
border-radius: 999px;
padding: 0.12em 0.7em;
cursor: pointer;
}
.version-badge:hover { border-color: var(--accent); color: var(--accent); }
.version-badge[aria-expanded="true"] { border-color: var(--accent); color: var(--accent); }
.version-panel {
margin-top: 0.5rem;
border: 1px solid var(--color-border);
@@ -1594,7 +1589,8 @@ img:hover { filter: grayscale(0%); }
font-size: var(--font-size-small);
color: var(--color-text-muted);
}
.version-back {
.version-back,
.version-toggle {
font: inherit;
color: var(--accent);
background: none;
@@ -1603,3 +1599,22 @@ img:hover { filter: grayscale(0%); }
cursor: pointer;
}
.version-loading { color: var(--color-text-muted); font-style: italic; }
/* Diff-Ansicht (rot/grün, wie auf GitHub) — direkt auf der Seite. */
.diff {
font-family: var(--font-family-mono);
font-size: 0.8rem;
line-height: 1.5;
border: 1px solid var(--color-border);
border-radius: 8px;
overflow-x: auto;
}
.diff-line {
white-space: pre-wrap;
word-break: break-word;
padding: 0.05em 0.7em;
}
.diff-line.d-add { background: color-mix(in oklab, #2ea043 20%, transparent); }
.diff-line.d-del { background: color-mix(in oklab, #f85149 20%, transparent); }
.diff-line.d-hunk { color: var(--color-text-muted); background: var(--color-bg-secondary); }
.diff-line.d-ctx { color: var(--color-text-primary); }