diff --git a/src/workspaces/officerdev/src/components/Workspace/PanelSlot.tsx b/src/workspaces/officerdev/src/components/Workspace/PanelSlot.tsx
index c45cd433..79bce366 100644
--- a/src/workspaces/officerdev/src/components/Workspace/PanelSlot.tsx
+++ b/src/workspaces/officerdev/src/components/Workspace/PanelSlot.tsx
@@ -546,10 +546,13 @@ export const PanelSlot = ({
// control — is black throughout, so the old near-opaque dark fill left every one of them unreadable.
// This is the nav Header's exact recipe (`rgba(255,255,255,0.25)` over a 0.35 border), which is the
// app's established "raised above the rest" surface and is already proven to carry black text.
- const fullscreenStyle = { backgroundColor: 'rgba(255, 255, 255, 0.25)', borderColor: 'rgba(255, 255, 255, 0.35)' };
+ // Fullscreen is DENSER glass, not darker: panel chrome is dark text throughout, and a heavy dark fill
+ // made every icon unreadable. A panel with no header takes a harder edge, having nothing else to
+ // separate it from what it sits on. Both were literal rgba pairs and are now the theme's to decide.
+ const fullscreenStyle = { backgroundColor: 'var(--panel-raised-bg)', borderColor: 'var(--panel-raised-border)' };
const normalStyle = noHeader
- ? { backgroundColor: 'rgba(255, 255, 255, 0.12)', borderColor: 'rgba(0, 0, 0, 0.25)' }
- : { backgroundColor: 'rgba(255, 255, 255, 0.12)', borderColor: 'rgba(255, 255, 255, 0.2)' };
+ ? { backgroundColor: 'var(--panel-bg)', borderColor: 'var(--panel-border-bare)' }
+ : { backgroundColor: 'var(--panel-bg)', borderColor: 'var(--panel-border)' };
const panelStyle = {
...(isFullscreen ? fullscreenStyle : normalStyle),
...(transitioningPanelId === panel.id ? { viewTransitionName: `panel-${panel.id}` } : {}),
@@ -560,8 +563,8 @@ export const PanelSlot = ({
diff --git a/src/workspaces/theme/css/chrome.css b/src/workspaces/theme/css/chrome.css
index 2948a0b8..9dee830f 100644
--- a/src/workspaces/theme/css/chrome.css
+++ b/src/workspaces/theme/css/chrome.css
@@ -83,3 +83,9 @@
.header-ink-border {
border-color: color-mix(in srgb, var(--header-fg) 40%, transparent);
}
+
+/* Panel glass. `backdrop-blur-xl` was a fixed 24px, so a flat theme still paid for a blur it did not want —
+ and on a solid panel the browser composites it for nothing. */
+.panel-blur {
+ backdrop-filter: blur(var(--panel-blur));
+}
diff --git a/src/workspaces/theme/css/themes/duck-dark.css b/src/workspaces/theme/css/themes/duck-dark.css
index 31626edf..30d59d75 100644
--- a/src/workspaces/theme/css/themes/duck-dark.css
+++ b/src/workspaces/theme/css/themes/duck-dark.css
@@ -67,8 +67,12 @@
--glass-bg: rgba(0, 0, 0, 0.2);
--glass-border: rgba(255, 255, 255, 0.1);
- --panel-bg: rgba(0, 0, 0, 0.2);
- --panel-border: rgba(255, 255, 255, 0.1);
+ --panel-bg: rgba(255, 255, 255, 0.12);
+ --panel-border: rgba(255, 255, 255, 0.2);
+ --panel-border-bare: rgba(0, 0, 0, 0.25);
+ --panel-raised-bg: rgba(255, 255, 255, 0.25);
+ --panel-raised-border: rgba(255, 255, 255, 0.35);
+ --panel-blur: 24px;
--panel-radius: 0.75rem;
--panel-header-bg: rgba(0, 0, 0, 0.15);
--panel-header-fg: hsl(var(--foreground));
diff --git a/src/workspaces/theme/css/themes/duck-light.css b/src/workspaces/theme/css/themes/duck-light.css
index 4577d0b1..3cf8b288 100644
--- a/src/workspaces/theme/css/themes/duck-light.css
+++ b/src/workspaces/theme/css/themes/duck-light.css
@@ -72,8 +72,14 @@
--glass-bg: rgba(255, 255, 255, 0.1);
--glass-border: rgba(255, 255, 255, 0.2);
- --panel-bg: rgba(255, 255, 255, 0.1);
+ --panel-bg: rgba(255, 255, 255, 0.12);
--panel-border: rgba(255, 255, 255, 0.2);
+ /* A panel with no header has nothing to separate it from what it sits on, so it takes a harder edge. */
+ --panel-border-bare: rgba(0, 0, 0, 0.25);
+ /* Fullscreen is DENSER glass, not darker: panel chrome is dark text, and a heavy dark fill hid it. */
+ --panel-raised-bg: rgba(255, 255, 255, 0.25);
+ --panel-raised-border: rgba(255, 255, 255, 0.35);
+ --panel-blur: 24px;
--panel-radius: 0.75rem;
--panel-header-bg: rgba(0, 0, 0, 0.05);
--panel-header-fg: hsl(var(--foreground));
diff --git a/src/workspaces/theme/css/themes/plain.css b/src/workspaces/theme/css/themes/plain.css
index 680ae117..4232848b 100644
--- a/src/workspaces/theme/css/themes/plain.css
+++ b/src/workspaces/theme/css/themes/plain.css
@@ -72,6 +72,10 @@
--panel-bg: #ffffff;
--panel-border: #000000;
+ --panel-border-bare: #000000;
+ --panel-raised-bg: #ffffff;
+ --panel-raised-border: #000000;
+ --panel-blur: 0px;
--panel-radius: 0;
--panel-header-bg: #f2f2f2;
--panel-header-fg: #000000;