diff --git a/frontend/src/app/pages/Dashboard/desktop/ApplicationsWindow.tsx b/frontend/src/app/pages/Dashboard/desktop/ApplicationsWindow.tsx
index 4d85f5f9..4458522e 100644
--- a/frontend/src/app/pages/Dashboard/desktop/ApplicationsWindow.tsx
+++ b/frontend/src/app/pages/Dashboard/desktop/ApplicationsWindow.tsx
@@ -21,18 +21,24 @@ function hueFor(name: string): number {
function AppTile({ output }: { output: Output }): React.ReactElement {
const tile = {
- width: 64,
- height: 64,
- borderRadius: '15px',
+ width: 68,
+ height: 68,
+ borderRadius: '16px',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
flexShrink: 0,
// Hairline inset so screenshots and light tiles read as crafted app icons on the glass, not raw pasted images.
- boxShadow: 'inset 0 0 0 1px rgba(255,255,255,0.12), 0 4px 14px rgba(0,0,0,0.28)',
+ boxShadow: 'inset 0 0 0 1px rgba(255,255,255,0.14), 0 6px 18px rgba(0,0,0,0.32)',
} as const;
if (output.thumbnail) {
- return ;
+ return (
+
+
+ {/* A soft top gloss makes a raw screenshot read as an app ICON instead of a pasted image. */}
+
+
+ );
}
const glyph = (output.icon || '').trim();
const h = hueFor(output.name || '?');
@@ -79,21 +85,28 @@ function ApplicationsWindow({ outputs, onOpenApp, onClose }: ApplicationsWindowP
maxHeight: 'calc(100% - 120px)',
display: 'flex',
flexDirection: 'column',
- borderRadius: '18px',
- background: 'rgba(22,12,34,0.82)',
+ borderRadius: '20px',
+ background: 'rgba(18,16,24,0.86)',
backdropFilter: 'blur(28px) saturate(160%)',
WebkitBackdropFilter: 'blur(28px) saturate(160%)',
- boxShadow: '0 24px 64px rgba(0,0,0,0.5)',
+ boxShadow: '0 24px 64px rgba(0,0,0,0.5), inset 0 0 0 1px rgba(255,255,255,0.07)',
p: 2.5,
+ '@keyframes appwin-in': {
+ from: { opacity: 0, transform: 'translate(-50%, -50%) scale(0.96)' },
+ to: { opacity: 1, transform: 'translate(-50%, -50%) scale(1)' },
+ },
+ animation: 'appwin-in 0.18s cubic-bezier(0.2, 0.8, 0.2, 1) both',
}}
>
-
-
+
+
Applications
-
- {Object.keys(outputs).length > 0 ? Object.keys(outputs).length : ''}
-
+ {Object.keys(outputs).length > 0 && (
+
+ {Object.keys(outputs).length}
+
+ )}
{Object.keys(outputs).length > 8 && (
@@ -135,7 +148,7 @@ function ApplicationsWindow({ outputs, onOpenApp, onClose }: ApplicationsWindowP
)}
{apps.length > 0 && (
-
+
{apps.map((output) => (
-
+
-
+
{output.name}