diff --git a/drb-frontend/app/globals.css b/drb-frontend/app/globals.css index 9dcc7c2..372887b 100644 --- a/drb-frontend/app/globals.css +++ b/drb-frontend/app/globals.css @@ -199,6 +199,13 @@ html:not(.dark) .border-indigo-800 { border-color: #a5b4fc !important; } filter: invert(1) hue-rotate(180deg) brightness(0.9) contrast(0.9) saturate(0.6); } +/* Leaflet popups stay white in both themes (their body text is a fixed + * gray-900), so the theme's muted ink — light grey in dark mode, ~2.9:1 on + * white — is pinned to a grey that holds AA on white (~6:1). */ +.leaflet-popup-content .text-ink-muted { + color: #5B6577; +} + /* Pinned 511 camera tiles (MapView DotCameraLayer): strip Leaflet's tooltip * padding and let the tile's own theme colours show, so the tile is no bigger * than the video it holds. */ diff --git a/drb-frontend/app/nodes/[id]/page.tsx b/drb-frontend/app/nodes/[id]/page.tsx index 0174722..72aa159 100644 --- a/drb-frontend/app/nodes/[id]/page.tsx +++ b/drb-frontend/app/nodes/[id]/page.tsx @@ -160,7 +160,8 @@ export default function NodeDetailPage() { <> No timeout is currently enforced (permanent override). )}

-
+ {/* Override routes are require_service_key_or_admin (server-26#222). */} + {isAdmin &&
{node.override_timeout_at && ( -
+
} )} @@ -245,20 +246,29 @@ export default function NodeDetailPage() { )} {/* Actions */} + {/* Configure and Restart are admin-only on the server (server-26#222); + non-admins get a note instead of a button that 403s. */} + {!isAdmin && !node.configured && ( +

This node isn't configured yet. An admin needs to assign it a radio system.

+ )}
- - + {isAdmin && ( + + )} + {isAdmin && ( + + )} {isAdmin && (
diff --git a/drb-frontend/app/systems/page.tsx b/drb-frontend/app/systems/page.tsx index c7a9981..5f81ad5 100644 --- a/drb-frontend/app/systems/page.tsx +++ b/drb-frontend/app/systems/page.tsx @@ -1953,12 +1953,16 @@ export default function SystemsPage() {

Systems

- + {/* Every systems write route is require_admin_token (server-26#283); + operators get a read-only view. */} + {isAdmin && ( + + )}
{editing && ( @@ -2006,7 +2010,7 @@ export default function SystemsPage() { {kindLabel(s)}
-
+ {isAdmin &&
-
+
} {/* GET /tokens and PUT /tokens/{id}/prefer are platform-admin only (server-26#204 item 6), so for anyone else this panel could neither list the pool nor save a choice (server-26#213 item 4). */} {isAdmin && } - - - - + {/* All admin-only routes (server-26#283), incl. area-context and + talkgroup-pending GETs and every vocabulary write. */} + {isAdmin && ( + <> + + + + + + )} ); })}