`;
}
diff --git a/containers/libreportal/frontend/components/apps/overview/css/overview.css b/containers/libreportal/frontend/components/apps/overview/css/overview.css
index 9f4805f..5e7894e 100644
--- a/containers/libreportal/frontend/components/apps/overview/css/overview.css
+++ b/containers/libreportal/frontend/components/apps/overview/css/overview.css
@@ -367,6 +367,7 @@
.updater-autocheck {
display: flex;
align-items: center;
+ flex-wrap: wrap;
gap: 9px;
margin: 0 0 14px;
padding: 9px 12px;
@@ -377,6 +378,10 @@
color: rgba(var(--text-rgb), .72);
}
.updater-autocheck strong { color: var(--text-primary, #fff); font-weight: 600; }
+.updater-autocheck-text { min-width: 0; }
+/* Manual check lives here (right side), not as a top-level tab button — a nudge
+ for the automatic scan, not the primary way updates are found. */
+.updater-autocheck-btn { margin-left: auto; flex: 0 0 auto; padding: 4px 11px; font-size: .78rem; }
.updater-autocheck-dot {
width: 7px; height: 7px; border-radius: 50%; flex: 0 0 auto;
background: #36d399; box-shadow: 0 0 8px rgba(54, 211, 153, .6);
diff --git a/containers/libreportal/frontend/components/apps/overview/js/overview-manager.js b/containers/libreportal/frontend/components/apps/overview/js/overview-manager.js
index 60fb43b..429dfa9 100644
--- a/containers/libreportal/frontend/components/apps/overview/js/overview-manager.js
+++ b/containers/libreportal/frontend/components/apps/overview/js/overview-manager.js
@@ -190,8 +190,10 @@ class OverviewManager {
const open = Array.from(document.querySelectorAll('#overview-view .ov-row-details:not([hidden])'))
.map((d) => d.id.replace(/^ov-detail-/, ''));
const anyUpdate = !!(this.updater && this.updater.apps.some((a) => a.update_available));
- const actions = checkBtn('Check')
- + (anyUpdate ? ` ` : '');
+ // No manual "Check" in the header — the auto-check line at the top of the
+ // body carries the (secondary) Check-now nudge. Only the real "Update all"
+ // action lives up here, and only when there's actually something to apply.
+ const actions = anyUpdate ? `` : '';
pane.innerHTML = this.renderHeader(id, actions) + body(this.renderUpdates());
open.forEach((app) => this._openDetail(app));
this._honorAppDeepLink();
@@ -524,9 +526,11 @@ class OverviewManager {
const chip = (id, label, n) =>
``;
const rows = shown.map((a) => this.updateRow(a)).join('') || `
Nothing matches this filter.
`;
- // Check / Update all live in the tab header's action slot (renderTab), so
- // the toolbar is just the filter chips.
+ // The auto-check line leads the body (with its right-side Check-now nudge);
+ // "Update all" lives in the tab header's action slot (renderTab), so the
+ // toolbar is just the filter chips.
return `
+ ${up.renderAutoCheckLine()}