diff --git a/frontend/src/components/HistoryPanel.vue b/frontend/src/components/HistoryPanel.vue
index bd2385b..5e4cd21 100644
--- a/frontend/src/components/HistoryPanel.vue
+++ b/frontend/src/components/HistoryPanel.vue
@@ -1,6 +1,6 @@
@@ -128,7 +193,25 @@ onMounted(loadVersions);
:class="['history-item', { selected: selectedVersion?.id === v.id }]"
@click="selectVersionItem(v)"
>
-
Loading version...
Select a version to compare.
-
+
+
+
+
+
+
+
+
+
+
+
+
+ ●
+ Manually pinned{{ selectedVersion.pin_label ? `: ${selectedVersion.pin_label}` : '' }}
+
+
+ ◐
+ Auto-pinned{{ selectedVersion.pin_label ? `: ${selectedVersion.pin_label}` : '' }}
+
+
+
+
+
+
+
+
+
+
@@ -268,4 +406,101 @@ onMounted(loadVersions);
opacity: 0.5;
cursor: default;
}
+
+/* ── Pin badges + label rendering ───────────────────────────────────────── */
+.pin-badge {
+ display: inline-block;
+ width: 0.7rem;
+ text-align: center;
+ margin-right: 0.35rem;
+ font-size: 0.85em;
+ line-height: 1;
+}
+.pin-badge-manual { color: var(--color-primary, #6366f1); }
+.pin-badge-auto { color: var(--color-text-muted, rgba(255, 255, 255, 0.5)); }
+
+.history-item-label {
+ font-size: 0.72rem;
+ color: var(--color-primary, #6366f1);
+ font-style: italic;
+ margin-top: 0.15rem;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+/* ── Pin controls above the diff ────────────────────────────────────────── */
+.version-pin-controls {
+ padding: 0.4rem 0.5rem 0.5rem;
+ border-bottom: 1px solid var(--color-border);
+ font-size: 0.82rem;
+}
+.pin-actions {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ flex-wrap: wrap;
+}
+.pin-state {
+ font-style: italic;
+ color: var(--color-text-muted, rgba(255, 255, 255, 0.6));
+ flex: 1;
+ min-width: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.btn-pin, .btn-pin-edit, .btn-unpin {
+ padding: 0.25rem 0.7rem;
+ font-size: 0.78rem;
+ background: transparent;
+ color: inherit;
+ border: 1px solid var(--color-border, rgba(255, 255, 255, 0.12));
+ border-radius: 999px;
+ cursor: pointer;
+}
+.btn-pin:hover:not(:disabled), .btn-pin-edit:hover:not(:disabled) {
+ background: rgba(99, 102, 241, 0.12);
+ border-color: var(--color-primary, #6366f1);
+}
+.btn-unpin:hover:not(:disabled) {
+ background: rgba(239, 68, 68, 0.10);
+ border-color: rgba(239, 68, 68, 0.5);
+}
+.pin-label-form {
+ display: flex;
+ gap: 0.4rem;
+ align-items: center;
+}
+.pin-label-input {
+ flex: 1;
+ padding: 0.3rem 0.5rem;
+ font-size: 0.85rem;
+ background: var(--color-input-bg, rgba(255, 255, 255, 0.03));
+ border: 1px solid var(--color-border, rgba(255, 255, 255, 0.12));
+ border-radius: var(--radius-sm, 4px);
+ color: inherit;
+}
+.pin-label-input:focus {
+ outline: none;
+ border-color: var(--color-primary, #6366f1);
+}
+.btn-pin-save, .btn-pin-cancel {
+ padding: 0.3rem 0.7rem;
+ font-size: 0.78rem;
+ background: transparent;
+ color: inherit;
+ border: 1px solid var(--color-border, rgba(255, 255, 255, 0.12));
+ border-radius: var(--radius-sm, 4px);
+ cursor: pointer;
+}
+.btn-pin-save:hover:not(:disabled) {
+ background: rgba(99, 102, 241, 0.12);
+ border-color: var(--color-primary, #6366f1);
+}
+.btn-pin-save:disabled, .btn-pin-cancel:disabled,
+.btn-pin:disabled, .btn-pin-edit:disabled, .btn-unpin:disabled {
+ opacity: 0.5;
+ cursor: progress;
+}