fix: auth, container resilience, ISO build, gamepad polish

- fix: login disconnect — verify session before WebSocket connect
- fix: 403 on app install — distinguish CSRF vs RBAC errors, only retry CSRF
- fix: health monitor now watches ALL containers (removed skip list for
  backend services like nbxplorer, databases, UI containers)
- fix: server.get-state added to CSRF-exempt list (read-only)
- fix: ISO build includes container-specs.sh and lib/common.sh in rootfs
  so reconcile actually works on fresh installs
- fix: gamepad nav — improved Server tab zone nav, focus styles, autofocus
- chore: move L484 web-only apps to Services tab
- chore: install store for cross-view install tracking

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-30 13:35:02 +01:00
co-authored by Claude Opus 4.6
parent 68f2a9c5bf
commit fdd69ce1b5
16 changed files with 218 additions and 88 deletions
+11 -32
View File
@@ -53,7 +53,6 @@
*:focus-visible {
outline: none;
box-shadow:
0 0 0 1px rgba(251, 146, 60, 0.4),
0 0 12px rgba(251, 146, 60, 0.2),
0 0 24px rgba(251, 146, 60, 0.08);
transition: box-shadow 0.2s ease;
@@ -68,7 +67,6 @@ input:focus-visible,
textarea:focus-visible,
select:focus-visible {
box-shadow: unset;
border-color: rgba(251, 146, 60, 0.4);
outline: none;
}
@@ -124,18 +122,21 @@ input[type="radio"]:active + * {
/* Containers: base scale for smooth grow animation */
[data-controller-container] {
transition: transform 0.2s ease, box-shadow 0.2s ease;
transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
outline: none !important;
}
/* Containers: console-style focus — subtle lift + ambient glow through glass */
[data-controller-container]:focus-visible {
/* Containers: console-style focus — lift + ambient orange glow.
Pure glow approach — no border-color or outline changes, avoids
Chromium compositor bugs with border-radius on translateZ(0) layers. */
[data-controller-container]:focus-visible,
[data-controller-container]:focus {
outline: none;
transform: scale(1.01) translateZ(0);
transform: translateY(-4px) scale(1.01) translateZ(0);
box-shadow:
0 0 0 1px rgba(251, 146, 60, 0.35),
0 4px 20px rgba(251, 146, 60, 0.12),
0 0 40px rgba(251, 146, 60, 0.06),
inset 0 1px 0 rgba(251, 146, 60, 0.1);
0 0 6px 2px rgba(251, 146, 60, 0.35),
0 0 20px rgba(251, 146, 60, 0.15),
0 0 40px rgba(251, 146, 60, 0.08);
}
/* Global glassmorphism utilities */
@@ -2159,19 +2160,6 @@ html:has(body.video-background-active)::before {
font-size: 0.8125rem;
}
.discover-featured-card {
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s ease, border-color 0.3s ease;
border-color: rgba(255, 255, 255, 0.12);
}
.discover-featured-card:hover {
transform: translateY(-3px);
border-color: rgba(251, 146, 60, 0.25);
box-shadow:
0 12px 32px rgba(0, 0, 0, 0.6),
0 0 40px rgba(251, 146, 60, 0.06);
}
.discover-installed-badge {
display: inline-flex;
align-items: center;
@@ -2198,15 +2186,6 @@ html:has(body.video-background-active)::before {
transform: translateY(-2px);
}
.discover-app-card {
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s ease;
}
.discover-app-card:hover {
transform: translateY(-2px);
background: rgba(255, 255, 255, 0.06);
}
.discover-manifesto {
border-color: rgba(251, 146, 60, 0.1);
background: linear-gradient(135deg, rgba(0, 0, 0, 0.7) 0%, rgba(251, 146, 60, 0.03) 100%);