diff --git a/ui/src/components/TabStrip.tsx b/ui/src/components/TabStrip.tsx
index 8c900923..b97c9026 100644
--- a/ui/src/components/TabStrip.tsx
+++ b/ui/src/components/TabStrip.tsx
@@ -95,7 +95,7 @@ export function TabStrip() {
<>
{tabIds.map((id) => {
const tab = tabsMap[id]
@@ -150,10 +150,10 @@ function TabButton({ title, active, onSelect, onClose, onContextMenu }: TabButto
}
}}
onContextMenu={onContextMenu}
- className={`group flex items-center gap-2 pl-3 pr-2 h-full text-[13px] cursor-pointer border-r border-border transition-colors ${
+ className={`group flex items-center gap-2 pl-3 pr-2 h-full text-[13px] cursor-pointer border-r border-border/80 transition-colors ${
active
- ? 'bg-bg text-text'
- : 'text-text-muted hover:text-text hover:bg-bg-tertiary/40'
+ ? 'bg-bg-tertiary text-text'
+ : 'text-text-muted hover:text-text hover:bg-white/[0.035]'
}`}
>
{title}
@@ -163,7 +163,7 @@ function TabButton({ title, active, onSelect, onClose, onContextMenu }: TabButto
e.stopPropagation()
onClose()
}}
- className="w-4 h-4 rounded flex items-center justify-center text-text-muted/60 hover:text-text hover:bg-bg-tertiary"
+ className="w-4 h-4 rounded flex items-center justify-center text-text-muted/60 hover:text-text hover:bg-white/[0.06]"
aria-label={`Close ${title}`}
>
diff --git a/ui/src/index.css b/ui/src/index.css
index 084dbb5f..1bb1c179 100644
--- a/ui/src/index.css
+++ b/ui/src/index.css
@@ -1,23 +1,23 @@
@import "tailwindcss";
-/* GitHub Dark theme palette */
+/* Linear dark Alice shell palette */
@theme {
- --color-bg: #0d1117;
- --color-bg-secondary: #161b22;
- --color-bg-tertiary: #21262d;
- --color-border: #30363d;
- --color-text: #e6edf3;
- --color-text-muted: #8b949e;
- --color-accent: #58a6ff;
- --color-accent-dim: rgba(31, 111, 235, 0.2);
- --color-user-bubble: #1f6feb;
- --color-assistant-bubble: #161b22;
- --color-notification-bg: #2d1f00;
- --color-notification-border: #d29922;
- --color-green: #3fb950;
- --color-red: #f85149;
- --color-purple: #a78bfa;
- --color-purple-dim: rgba(139, 92, 246, 0.2);
+ --color-bg: #0b0c0e;
+ --color-bg-secondary: #0e0f12;
+ --color-bg-tertiary: #1a1b21;
+ --color-border: #24262c;
+ --color-text: #dfe1e6;
+ --color-text-muted: #8f929b;
+ --color-accent: #23b99a;
+ --color-accent-dim: rgba(35, 185, 154, 0.16);
+ --color-user-bubble: #1f2026;
+ --color-assistant-bubble: #141519;
+ --color-notification-bg: #1d1610;
+ --color-notification-border: #8a5b2f;
+ --color-green: #23b99a;
+ --color-red: #e5484d;
+ --color-purple: #8f72ff;
+ --color-purple-dim: rgba(143, 114, 255, 0.16);
--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
"Microsoft YaHei", "Hiragino Sans GB", "Noto Sans CJK SC", sans-serif;
@@ -51,6 +51,18 @@ body,
height: 100%;
}
+body {
+ background:
+ radial-gradient(circle at 50% 28%, rgba(255, 255, 255, 0.022), transparent 34rem),
+ linear-gradient(180deg, #0e0f12 0%, #0b0c0e 46%, #090a0c 100%);
+ color: var(--color-text);
+}
+
+::selection {
+ background: rgba(35, 185, 154, 0.28);
+ color: var(--color-text);
+}
+
/* ==================== Typography scale ====================
Five semantic sizes covering the entire app. New code should
prefer these over arbitrary `text-[Npx]` so size choices stay
diff --git a/ui/src/pages/ChatLandingPage.tsx b/ui/src/pages/ChatLandingPage.tsx
index 8030535c..2dbc9cc4 100644
--- a/ui/src/pages/ChatLandingPage.tsx
+++ b/ui/src/pages/ChatLandingPage.tsx
@@ -100,10 +100,20 @@ export function ChatLandingPage() {
}
return (
-
-
+
+ {/* Ask-Alice backdrop — full-bleed, responsive-only layers (gradient wash
+ + faint grid). The #302 mock's %-positioned circle / diagonal bars were
+ dropped: they drift on portrait and read as pixel-placed art, not a
+ responsive surface. pointer-events-none so it never intercepts clicks. */}
+
+
+
-
{t('chatLanding.heading')}
+
{t('chatLanding.heading')}
{t('chatLanding.subheading')}