diff --git a/apps/desktop/src/renderer/src/components/tab-bar.tsx b/apps/desktop/src/renderer/src/components/tab-bar.tsx
index a5d66211a..15797258c 100644
--- a/apps/desktop/src/renderer/src/components/tab-bar.tsx
+++ b/apps/desktop/src/renderer/src/components/tab-bar.tsx
@@ -185,7 +185,10 @@ function SortableTabItem({
canCloseOthers: boolean;
isNew: boolean;
shouldReduceMotion: boolean;
- /** Hairline on the tab's left edge — hidden next to the active tab. */
+ /**
+ * Hairline on the tab's left edge — hidden next to the active tab, and
+ * faded out while either of the two tabs it divides is hovered.
+ */
showSeparator: boolean;
}) {
const setActiveTab = useTabStore((s) => s.setActiveTab);
@@ -356,9 +359,12 @@ function SortableTabItem({
/>
)}
{showSeparator && (
+ // Fades in step with the neighbouring hover pill: both use a bare
+ // transition-opacity, so the hairline clears exactly as the pill
+ // arrives rather than lingering 2px off its rounded edge.
)}
@@ -650,7 +656,7 @@ export function TabBar() {
unpinnedCount > 0 && (
)}
diff --git a/apps/desktop/src/renderer/src/globals.css b/apps/desktop/src/renderer/src/globals.css
index 6496a738d..e67b99085 100644
--- a/apps/desktop/src/renderer/src/globals.css
+++ b/apps/desktop/src/renderer/src/globals.css
@@ -6,6 +6,20 @@
@custom-variant dark (&:is(.dark *));
+/* Tab strip hairlines sit on each tab's own left edge, so the hairline between
+ two tabs belongs to the tab on the right. Hovering the left tab has to fade
+ it out as well, which no ancestor-based variant can reach — hence the
+ adjacent-sibling selector. The (hover: hover) gate mirrors what Tailwind
+ already wraps group-hover in, so both halves of the fade stay in step on
+ devices without a pointer. */
+@custom-variant prev-tab-hover {
+ @media (hover: hover) {
+ [data-tab-frame]:hover + [data-tab-frame] & {
+ @slot;
+ }
+ }
+}
+
/* Font stack: Inter for Latin UI text + system CJK fonts for localized content.
Web app uses the same stack via next/font/google in apps/web/app/layout.tsx —
keep the CJK fallback tail in sync across both files. The Inter primary family