diff --git a/containers/libreportal/frontend/components/updater/css/updater.css b/containers/libreportal/frontend/components/updater/css/updater.css index f353072..0d49ad0 100644 --- a/containers/libreportal/frontend/components/updater/css/updater.css +++ b/containers/libreportal/frontend/components/updater/css/updater.css @@ -108,29 +108,33 @@ border: 1px solid rgba(var(--text-rgb), 0.10); } -/* Explainer + tally above the CVE box: name what these CVEs actually are - (image dependencies, not the app version) and triage them at a glance. */ -.updater-cve-explain { margin: 0 0 6px; font-size: 0.8rem; color: rgba(var(--text-rgb), 0.6); } -.updater-cve-tally { margin: 0 0 10px; font-size: 0.8rem; color: rgba(var(--text-rgb), 0.5); } -.updater-cve-tally-fix { color: rgba(var(--page-verify-rgb), 0.95); font-weight: 600; } -.updater-cve-tally-none { color: rgba(var(--text-rgb), 0.55); } +/* Explainer + status above the CVE box: name what these CVEs actually are + (image dependencies, not the app version) and tell the user honestly whether + there's anything they can do — keyed on a real app update, not a package + patch that only lands when the maintainer rebuilds. */ +.updater-cve-explain { margin: 0 0 5px; font-size: 0.8rem; color: rgba(var(--text-rgb), 0.6); } +.updater-cve-status { margin: 0 0 10px; font-size: 0.8rem; color: rgba(var(--text-rgb), 0.55); } -/* Triage groups inside the box: "Fix available" leads, the dimmed "No fix yet" - pile follows so the actionable CVEs are what the eye lands on first. */ +/* Triage groups inside the box: "Patch released upstream" leads, the dimmed + "No patch yet" pile follows. The count sits at the row's right edge. */ .updater-cve-group + .updater-cve-group { margin-top: 2px; } .updater-cve-group-head { - display: flex; align-items: center; gap: 8px; + display: flex; align-items: center; gap: 6px; padding: 10px 0 6px; +} +.updater-cve-group-title { font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: rgba(var(--text-rgb), 0.72); } +.updater-cve-group-hint { font-size: 0.72rem; font-weight: 500; color: rgba(var(--text-rgb), 0.45); } +.updater-cve-group-hint::before { content: '·'; margin-right: 6px; opacity: 0.55; } .updater-cve-group-n { + margin-left: auto; font-variant-numeric: tabular-nums; font-weight: 700; font-size: 0.64rem; padding: 1px 7px; border-radius: 999px; - background: rgba(var(--page-verify-rgb), 0.18); color: rgb(var(--page-verify-rgb)); + background: rgba(var(--text-rgb), 0.12); color: rgba(var(--text-rgb), 0.7); } -.updater-cve-group-hint { text-transform: none; letter-spacing: 0; font-weight: 500; font-size: 0.72rem; color: rgba(var(--text-rgb), 0.45); } -.updater-cve-group.is-nofix .updater-cve-group-n { background: rgba(var(--text-rgb), 0.10); color: rgba(var(--text-rgb), 0.6); } +.updater-cve-group.is-nofix .updater-cve-group-n { background: rgba(var(--text-rgb), 0.08); color: rgba(var(--text-rgb), 0.55); } .updater-cve-group.is-nofix .updater-cve { opacity: 0.72; } .updater-cve-group .updater-cve:first-of-type { border-top: 0; } diff --git a/containers/libreportal/frontend/components/updater/js/updater-page.js b/containers/libreportal/frontend/components/updater/js/updater-page.js index b3ad0b8..2fecc0f 100644 --- a/containers/libreportal/frontend/components/updater/js/updater-page.js +++ b/containers/libreportal/frontend/components/updater/js/updater-page.js @@ -226,7 +226,7 @@ class UpdaterPage { const origin = this.cveOrigin(c); const ver = this.cveHasFix(c) ? `${this.escape(c.installed || '?')} → ${this.escape(c.fixed_in)}` - : `no fix yet`; + : `no patch`; return `
Vulnerabilities in the packages bundled inside this app's image — not ${appLabel}${verLabel} itself.
-${fixN} with a fix available · ${noFixN} no fix yet
` +${statusLine}
` : ''; const security = `No known CVEs. 🎉
'}No known CVEs. 🎉
'}`; // A rollback target exists if a snapshot field is present (future-proofing) // OR — the data the generator actually emits today — this app has a prior