diff --git a/containers/libreportal/frontend/css/backup.css b/containers/libreportal/frontend/css/backup.css index ea0fc4e..aebc91f 100755 --- a/containers/libreportal/frontend/css/backup.css +++ b/containers/libreportal/frontend/css/backup.css @@ -1322,6 +1322,83 @@ font-size: 0.72rem; color: rgba(var(--text-rgb), 0.7); } +/* Snapshot detail panel. The shared .task-meta/.meta-item layout forces + one nowrap line per item and clips long values (the full date, repo + paths) mid-string, so the backup row gets its own label-over-value grid + plus full-width blocks for tags and paths that wrap cleanly. */ +.backup-snapshot-meta { + display: flex; + flex-direction: column; + gap: 14px; +} +.backup-snapshot-meta .bsm-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + gap: 14px 18px; +} +.backup-snapshot-meta .bsm-field { + display: flex; + flex-direction: column; + gap: 4px; + min-width: 0; +} +.backup-snapshot-meta .bsm-label { + font-size: 0.68rem; + text-transform: uppercase; + letter-spacing: 0.05em; + font-weight: 600; + color: rgba(var(--text-rgb), 0.45); +} +.backup-snapshot-meta .bsm-value { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 6px; + min-width: 0; + font-size: 0.85rem; + color: var(--text-primary); +} +.backup-snapshot-meta .bsm-value code { + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 0.78rem; + background: rgba(var(--text-rgb), 0.06); + color: rgba(var(--text-rgb), 0.82); + padding: 1px 6px; + border-radius: 4px; + word-break: break-all; +} +.backup-snapshot-meta .bsm-block { + display: flex; + flex-direction: column; + gap: 8px; + padding-top: 13px; + border-top: 1px solid rgba(var(--text-rgb), 0.08); +} +.backup-snapshot-meta .bsm-tags { + display: flex; + flex-wrap: wrap; + gap: 5px; +} +.backup-snapshot-meta .bsm-paths { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 6px; +} +.backup-snapshot-meta .bsm-paths code { + display: inline-block; + max-width: 100%; + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 0.78rem; + background: rgba(var(--text-rgb), 0.06); + color: rgba(var(--text-rgb), 0.82); + padding: 4px 9px; + border-radius: 5px; + word-break: break-all; +} + .backup-snapshot-overflow { margin-top: 10px; font-size: 0.78rem; diff --git a/containers/libreportal/frontend/js/components/backup/backup-app-card.js b/containers/libreportal/frontend/js/components/backup/backup-app-card.js index 4cc0fc3..21cbd8b 100644 --- a/containers/libreportal/frontend/js/components/backup/backup-app-card.js +++ b/containers/libreportal/frontend/js/components/backup/backup-app-card.js @@ -91,6 +91,14 @@ class BackupAppCard { _renderRow(s, iconUrl) { const sid = String(s.id || ''); + + const tagMap = {}; + (s.tags || []).forEach(t => { const i = t.indexOf('='); if (i > 0) tagMap[t.slice(0, i)] = t.slice(i + 1); }); + const engineName = tagMap.engine ? tagMap.engine.charAt(0).toUpperCase() + tagMap.engine.slice(1) : null; + const otherTags = (s.tags || []).filter(t => !/^(app|host|engine|paths?)=/.test(t)); + const field = (label, valueHtml) => + `