diff --git a/src/app.css b/src/app.css
index 8cf9a1f4db..8f630355c6 100644
--- a/src/app.css
+++ b/src/app.css
@@ -2759,6 +2759,9 @@ ul.link-list li a .icon {
-1px 0 var(--bg-color),
-2px 0 var(--drop-shadow-color),
-3px 0 var(--bg-color);
+
+ transition: flex-basis 0.3s ease-in-out;
+
&:dir(rtl) {
box-shadow:
1px 0 var(--bg-color),
diff --git a/src/app.jsx b/src/app.jsx
index 4c364068e6..f9dd7f9404 100644
--- a/src/app.jsx
+++ b/src/app.jsx
@@ -31,7 +31,6 @@ import NavigationCommand from './components/navigation-command';
import NotificationService from './components/notification-service';
import SearchCommand from './components/search-command';
import Shortcuts from './components/shortcuts';
-import NotFound from './pages/404';
import AccountStatuses from './pages/account-statuses';
import AnnualReport from './pages/annual-report';
import Bookmarks from './pages/bookmarks';
diff --git a/src/components/columns.jsx b/src/components/columns.jsx
index 6f2ced3425..26ac6b973d 100644
--- a/src/components/columns.jsx
+++ b/src/components/columns.jsx
@@ -1,4 +1,5 @@
import { useLingui } from '@lingui/react/macro';
+import { useLayoutEffect } from 'preact/hooks';
import { useHotkeys } from 'react-hotkeys-hook';
import { useSnapshot } from 'valtio';
@@ -15,6 +16,7 @@ import Search from '../pages/search';
import Trending from '../pages/trending';
import isRTL from '../utils/is-rtl';
import states from '../utils/states';
+import store from '../utils/store';
import { getCurrentAccountID } from '../utils/store-utils';
import useTitle from '../utils/useTitle';
@@ -32,6 +34,17 @@ function Columns() {
console.debug('RENDER Columns', shortcuts);
+ useLayoutEffect(() => {
+ const columnSize = store.local.get('columnSize');
+ if (!columnSize) return;
+ const col = document.getElementById('columns');
+ if (col) {
+ col.style.setProperty('--column-size', `${columnSize}px`);
+ } else {
+ console.warn('Failed to set column size: #columns not found');
+ }
+ }, []);
+
const components = shortcuts.map((shortcut) => {
if (!shortcut) return null;
const { type, ...params } = shortcut;
diff --git a/src/pages/settings.jsx b/src/pages/settings.jsx
index 4ae49a9a7e..d57a9a5d28 100644
--- a/src/pages/settings.jsx
+++ b/src/pages/settings.jsx
@@ -30,6 +30,11 @@ import states from '../utils/states';
import store from '../utils/store';
import { getAPIVersions, getVapidKey } from '../utils/store-utils';
+const DEFAULT_COLUMN_WIDTH = 360;
+const SMALLEST_COLUMN_WIDTH = 360;
+const LARGEST_COLUMN_WIDTH = 600;
+const COLUMN_WIDTHS = [360, 400, 440, 480, 520, 560, 600];
+
const DEFAULT_TEXT_SIZE = 16;
const TEXT_SIZES = [14, 15, 16, 17, 18, 19, 20];
const SMALLEST_TEXT_SIZE = TEXT_SIZES[0];
@@ -60,6 +65,8 @@ function Settings({ onClose }) {
const systemTargetLanguage = getTranslateTargetLanguage();
const systemTargetLanguageText = localeCode2Text(systemTargetLanguage);
const currentTextSize = store.local.get('textSize') || DEFAULT_TEXT_SIZE;
+ const currentColumnSize =
+ store.local.get('columnSize') || DEFAULT_COLUMN_WIDTH;
const [prefs, setPrefs] = useState(getPreferences());
const { masto, authenticated, instance } = api();
@@ -226,6 +233,15 @@ function Settings({ onClose }) {