librelad e1794069cb feat(webui): add App Updater feature (versions, CVEs, disaster recovery)
New self-contained feature in features/updater/ (mirrors the backup feature):
- index.js + feature.json (auto-discovered; routes /updater + sub-tabs).
- updater-page.js: 5 tabs — Overview (update/CVE/recovery counts), Updates
  (per-app current->available + Update/Update-all), Security (CVEs by severity,
  links to NVD), Recovery (per-app rollback points; snapshot-before-update),
  History. Reads /data/updater/generated/{updates,cves,history}.json; falls
  back to the installed-apps list so it's useful before the first scan. All
  actions route through services.tasks (updater_check/apply/apply_all/rollback)
  — no new mutating API.
- updater.css (self-contained, teal --page-updater hue) + updater-content.html.
- New topbar 'Updates' nav button (nav-updater) + active-highlighting in
  topbar.js + spa.js. Kernel: setupRoutesFromManifest now allows module-only
  features (no legacy handler) — this is the first such feature.

Backend generator + 'libreportal updater' task land next.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: librelad <librelad@digitalangels.vip>
2026-05-30 02:45:40 +01:00

29 lines
1.7 KiB
CSS

/* shared/css/tokens.css — the always-present base token layer.
*
* First piece of the per-module CSS strategy (docs/frontend-modularization.md
* §5). Palette tokens that are NOT theme-specific live here under :root so they
* are defined exactly once and globally, instead of being stranded inside a
* feature stylesheet. Theme files (/themes/<name>/theme.css) still own the
* theme-specific palette under [data-theme]; this layer is theme-agnostic.
*
* Loaded early (before feature stylesheets) so every feature can rely on these.
*/
:root {
/* Monospace stack. Several feature sheets reference var(--font-mono,
monospace) — until now it was undefined, so those fields fell back to
bare `monospace`. Defining it here unifies them with the richer stack
the rest of the UI already uses (services.css, backup snapshot rows). */
--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
/* Per-area identity hues. Each admin/feature area owns one colour, reused
for action buttons and page accents. The *-rgb companions feed rgba()
tints (e.g. .admin-action-btn). Hoisted out of css/admin.css so they are
part of the base layer rather than tied to the admin stylesheet loading. */
--page-updates: #4f8cff; --page-updates-rgb: 79, 140, 255; /* Update now */
--page-verify: #1fb88a; --page-verify-rgb: 31, 184, 138; /* Verify — green by convention */
--page-backups: #4f8cff; --page-backups-rgb: 79, 140, 255; /* Backups — blue */
--page-ssh: #9b7bf0; --page-ssh-rgb: 155, 123, 240;
--page-system: #f0883e; --page-system-rgb: 240, 136, 62;
--page-updater: #2bb6c4; --page-updater-rgb: 43, 182, 196; /* App Updater — teal */
}