diff --git a/apps/desktop/src/components/gateway-connecting-overlay.test.tsx b/apps/desktop/src/components/gateway-connecting-overlay.test.tsx
index 508dfb27f335..a63fd1c72b3c 100644
--- a/apps/desktop/src/components/gateway-connecting-overlay.test.tsx
+++ b/apps/desktop/src/components/gateway-connecting-overlay.test.tsx
@@ -10,7 +10,7 @@ import { BootFailureOverlay } from './boot-failure-overlay'
import { GatewayConnectingOverlay } from './gateway-connecting-overlay'
// Repro for the "remote gateway → stuck on CONNECTING, no way to settings"
-// report. The connecting overlay (z-1200, full-screen, pointer-events on) used
+// report. The connecting overlay (full-screen, pointer-events on) used
// to be shown whenever `gatewayState !== 'open' && !boot.error`. The ONLY escape
// hatch — BootFailureOverlay, which has "Use local gateway" / "Sign in" /
// "Retry" — only renders when `boot.error` is set.
diff --git a/apps/desktop/src/components/gateway-connecting-overlay.tsx b/apps/desktop/src/components/gateway-connecting-overlay.tsx
index 0268755d5632..34303bb52cfc 100644
--- a/apps/desktop/src/components/gateway-connecting-overlay.tsx
+++ b/apps/desktop/src/components/gateway-connecting-overlay.tsx
@@ -141,7 +141,7 @@ export function GatewayConnectingOverlay() {
return (
diff --git a/apps/desktop/src/components/model-picker.tsx b/apps/desktop/src/components/model-picker.tsx
index 65cc79bedf89..b38630d7e9b0 100644
--- a/apps/desktop/src/components/model-picker.tsx
+++ b/apps/desktop/src/components/model-picker.tsx
@@ -28,10 +28,10 @@ interface ModelPickerDialogProps {
onSelect: (selection: { provider: string; model: string }) => void
profile?: string
/**
- * Optional class to apply to DialogContent. Use to override z-index when
- * stacking the picker on top of another fixed overlay (e.g. the desktop
- * onboarding overlay, which sits at z-1300; the default Dialog z-130 ends
- * up rendering underneath and blocks pointer events).
+ * Optional class for DialogContent. Use it to lift the picker onto a higher
+ * rung of the overlay ladder when it opens over another fixed overlay (the
+ * desktop onboarding overlay, say) — on the default modal rung it renders
+ * underneath and blocks pointer events.
*/
contentClassName?: string
}
@@ -85,7 +85,7 @@ export function ModelPickerDialog({
// Open the full onboarding provider selector to add/switch a provider.
// Reuses the entire onboarding flow (OAuth rows, API-key form, device-code,
// model-confirm) instead of duplicating provider UI here. Closes the picker
- // so the onboarding overlay (z-1300) isn't rendered underneath it.
+ // so the onboarding overlay isn't rendered underneath it.
const addProvider = () => {
startManualOnboarding()
onOpenChange(false)
diff --git a/apps/desktop/src/components/notifications.tsx b/apps/desktop/src/components/notifications.tsx
index 4d4a3c1058fd..640603236494 100644
--- a/apps/desktop/src/components/notifications.tsx
+++ b/apps/desktop/src/components/notifications.tsx
@@ -92,9 +92,9 @@ export function NotificationStack() {
)
}
-// Portaled to with a z above the Radix dialog layer (overlay z-[120],
-// content z-[130]) — see the top-center variant below for why.
-const REGION_BASE = 'pointer-events-none fixed z-[200] flex gap-2'
+// Portaled to on the over-modal rung so a toast clears an open dialog —
+// see the top-center variant below for why.
+const REGION_BASE = 'pointer-events-none fixed z-(--z-over-modal) flex gap-2'
// Primary stack: top-center, collapsed to the latest toast with a "+N more"
// expander + clear-all — the noisy/important surface (errors, warnings,
diff --git a/apps/desktop/src/components/onboarding/flow.tsx b/apps/desktop/src/components/onboarding/flow.tsx
index a6499010c1a6..c81419fc847d 100644
--- a/apps/desktop/src/components/onboarding/flow.tsx
+++ b/apps/desktop/src/components/onboarding/flow.tsx
@@ -308,15 +308,14 @@ function ConfirmingModelPanel({
{/*
- ModelPickerDialog defaults to z-130 on its content, which renders
- UNDER the onboarding overlay (z-1300) and breaks pointer events.
- Bump it above with z-[1310] so the picker sits on top of the
- onboarding panel. The dialog's own dim-backdrop layer stays at
- its default z-120 — the onboarding overlay is already dimming
- the rest of the screen, so we don't want a second backdrop.
+ ModelPickerDialog's content sits on the modal rung, which is below the
+ onboarding overlay — it would render underneath and swallow pointer
+ events. Lift it to the rung above onboarding. Its own dim-backdrop
+ layer stays on the modal-backdrop rung: onboarding already dims the
+ rest of the screen, so a second backdrop would double up.
*/}
-
+
{t.commandCenter.sections.sessions}
diff --git a/apps/desktop/src/components/ui/dialog.tsx b/apps/desktop/src/components/ui/dialog.tsx
index d84bb30c3453..7c69bdad8c4a 100644
--- a/apps/desktop/src/components/ui/dialog.tsx
+++ b/apps/desktop/src/components/ui/dialog.tsx
@@ -28,7 +28,7 @@ function DialogOverlay({ className, ...props }: React.ComponentProps