diff --git a/desktop/src/features/channels/lib/threadFocusLayout.ts b/desktop/src/features/channels/lib/threadFocusLayout.ts
index f14f3399b..f0b40348d 100644
--- a/desktop/src/features/channels/lib/threadFocusLayout.ts
+++ b/desktop/src/features/channels/lib/threadFocusLayout.ts
@@ -24,7 +24,7 @@ export const THREAD_FOCUS_SLIVER_WIDTH_PX = 72;
* with auto horizontal margins so the reading measure stays comfortable no
* matter how wide the window gets.
*/
-export const THREAD_FOCUS_COLUMN_MAX_WIDTH_PX = 880;
+export const THREAD_FOCUS_COLUMN_MAX_WIDTH_PX = 820;
/**
* Horizontal distance the focus drawer travels on enter/exit.
diff --git a/desktop/src/features/home/ui/InboxListPane.tsx b/desktop/src/features/home/ui/InboxListPane.tsx
index 17b06bf28..446cd3a65 100644
--- a/desktop/src/features/home/ui/InboxListPane.tsx
+++ b/desktop/src/features/home/ui/InboxListPane.tsx
@@ -13,6 +13,7 @@ import {
DraftsPanel,
type DraftViewItem,
} from "@/features/messages/ui/DraftsPanel";
+import { MessageAuthorText } from "@/features/messages/ui/MessageHeader";
import { UserProfilePopover } from "@/features/profile/ui/UserProfilePopover";
import type { Reminder } from "@/features/reminders/lib/reminderTypes";
import { isDue } from "@/features/reminders/lib/reminderFilters";
@@ -351,7 +352,7 @@ export function InboxListPane({
-
+
{item.senderLabel}
-
+
@@ -402,14 +403,14 @@ export function InboxListPane({
-
+
{hoverTimestampLabel}
@@ -175,18 +182,18 @@ export function InboxMessageRow({
)}
-
+
{isContinuation ? null : (
-
+
-
+
{message.authorLabel}
-
+
{message.isAgent ? (
) : null}
-
+
{message.fullTimestampLabel}
-
+
)}
-
+
@@ -19,30 +17,22 @@ export function MessageAgentOwner({
{ownerPubkey && ownerLabel ? (
<>
-
-
- managed by
+
+ managed by
-
+
{ownerLabel}
>
) : (
-
-
- owner unavailable
+
+ owner unavailable
)}
diff --git a/desktop/src/features/messages/ui/MessageHeader.tsx b/desktop/src/features/messages/ui/MessageHeader.tsx
index 64b53fbdd..9f848c2ec 100644
--- a/desktop/src/features/messages/ui/MessageHeader.tsx
+++ b/desktop/src/features/messages/ui/MessageHeader.tsx
@@ -14,7 +14,7 @@ export function MessageHeaderRow({
return (
@@ -39,7 +39,7 @@ export function MessageAuthorText({
return (
) : (
@@ -636,7 +636,7 @@ export function MessageThreadPanel({
{showThreadHeadDivider ? (
@@ -644,7 +644,7 @@ export function MessageThreadPanel({
) : null}
{threadRepliesPending && !isHuddleTranscript ? (
diff --git a/desktop/src/features/messages/ui/MessageThreadPanelSkeleton.tsx b/desktop/src/features/messages/ui/MessageThreadPanelSkeleton.tsx
index 2d2bb9a84..604ee7ee0 100644
--- a/desktop/src/features/messages/ui/MessageThreadPanelSkeleton.tsx
+++ b/desktop/src/features/messages/ui/MessageThreadPanelSkeleton.tsx
@@ -131,14 +131,14 @@ export function MessageThreadPanelSkeleton({
}
>
diff --git a/desktop/src/features/messages/ui/MessageTimestamp.tsx b/desktop/src/features/messages/ui/MessageTimestamp.tsx
index ff5394b76..9ad418b07 100644
--- a/desktop/src/features/messages/ui/MessageTimestamp.tsx
+++ b/desktop/src/features/messages/ui/MessageTimestamp.tsx
@@ -34,7 +34,7 @@ export function MessageTimestamp({
+
+ {avatar}
+
+
+
+
+ {author}
+
+
+ {timestamp}
+
+
+
+ {children}
+
+
+
+ );
+}
+
+function ConversationDensityPreview() {
+ return (
+
+
+
+ Preview
+
+
+
+ The revised conversation layout is ready to review.
+
+
+
+ I added a longer message so you can compare line height and text
+ spacing.
+
+
+ The same rhythm carries through channels, threads, DMs, and Inbox.
+
+
+
+
+
+ );
+}
+
+/** Message sizing and spacing shared by every conversation surface. */
+export function ConversationDensitySetting() {
+ const density = useConversationDensity();
+
+ return (
+ <>
+
+
+
Conversation density
+
+ Adjust message size and spacing.
+
+
+
+
+
+ >
+ );
+}
+
export function LinkPreviewStyleSetting() {
const style = useLinkPreviewStyle();
const activeOption =
diff --git a/desktop/src/features/settings/ui/SettingsPanels.tsx b/desktop/src/features/settings/ui/SettingsPanels.tsx
index 1dda5bc1c..4896c207b 100644
--- a/desktop/src/features/settings/ui/SettingsPanels.tsx
+++ b/desktop/src/features/settings/ui/SettingsPanels.tsx
@@ -55,6 +55,7 @@ import {
import { appearanceCommunityLabel } from "../lib/appearanceScopeCopy";
import {
AccentPickerContent,
+ ConversationDensitySetting,
GlassBackgroundSetting,
LinkPreviewStyleSetting,
ProminentActiveTabSetting,
@@ -70,6 +71,7 @@ import { NotificationSettingsCard } from "./NotificationSettingsCard";
import { AgentsSettingsPanel } from "./AgentsSettingsPanel";
import { HostedCommunitiesSettingsCard } from "./HostedCommunitiesSettingsCard";
import { SettingsOptionGroup, SettingsOptionRow } from "./SettingsOptionGroup";
+import { SettingsSegmentedControl } from "./SettingsSegmentedControl";
import { ProfileSettingsCard } from "./ProfileSettingsCard";
import { UpdateChecker } from "../UpdateChecker";
import { SettingsSectionHeader } from "./SettingsSectionHeader";
@@ -395,9 +397,9 @@ function SingleThemeTile({
type AppearanceMode = "system" | "light" | "dark";
const APPEARANCE_MODE_OPTIONS = [
- { mode: "system" as const, label: "System", Icon: SunMoon },
- { mode: "light" as const, label: "Light", Icon: Sun },
- { mode: "dark" as const, label: "Dark", Icon: Moon },
+ { value: "system" as const, label: "System", Icon: SunMoon },
+ { value: "light" as const, label: "Light", Icon: Sun },
+ { value: "dark" as const, label: "Dark", Icon: Moon },
] as const;
// Reveal/hide motion for the accent picker: a small translate + opacity fade.
@@ -670,39 +672,15 @@ function ThemeSettingsCard() {
Follow your system or choose a light or dark appearance.
-