diff --git a/CHANGELOG.md b/CHANGELOG.md index db5d786..52e4063 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 1.5.10 - 2026-05-16 + +- Profiles page redesign: account cards become single-row list items (account name + plan / 5-hour and weekly quotas / actions all in one horizontal row). Profile-list page size raised from 4 to 8 entries per page. +- Removed the placeholder Runtime tab and page (UI-only stub with no backend wiring). +- Top navigation tabs centered horizontally instead of right-aligned. +- Settings page trimmed: removed the unwired Forward port, Admin port, Launch at login, and Configuration backup rows. Codex CLI path row collapsed from two lines to a single inline row with the "Change" button on the right. + ## 1.5.9 - 2026-05-10 - Bulk plan refresh (run on app launch + each local-day rollover) now skips any profile whose `last_plan_check_ms` was confirmed within the last 6 hours. On a workspace with several OAuth accounts the previous launch trickled cards updating one-by-one for 10–25 s of background work; with the gate, repeat launches inside the same working day cost zero round-trips. diff --git a/README.md b/README.md index 474d699..2f5ae88 100644 --- a/README.md +++ b/README.md @@ -7,14 +7,11 @@ Codex 账号切换工具是一个本地桌面应用,用来在同一台机器 ## 当前功能 - 仪表盘:显示当前账号、账号总数、可用账号和待登录账号数量。 -- 账号页:每页 4 张账号卡片,支持切换、登录刷新、重命名、删除或清空、打开账号目录、编辑 Base URL。登录中点击同一按钮可取消(向 codex login 发送 SIGTERM / taskkill),适用于 OAuth 浏览器关闭后应用卡在等待回调的场景。 -- 运行时页:先放置运行时可视化界面,后续再接入更多后端能力。 -- 设置页:包含语言、主题、端口、开机自启占位、更新地址、配置备份、版本、许可证、检查更新、GitHub 入口,以及 **Codex CLI 路径**(显示当前路径与来源标签,自动定位失败或路径错误时随时手动指定,写入 `install_state.json` 的 `user_codex_path` 优先级最高)。 +- 账号页:每页 8 个账号条目(横向单行布局:账号名 + 套餐 / 5 小时与周额度 / 操作按钮),支持切换、登录刷新、重命名、删除或清空、打开账号目录、编辑 Base URL。登录中点击同一按钮可取消(向 codex login 发送 SIGTERM / taskkill),适用于 OAuth 浏览器关闭后应用卡在等待回调的场景。 +- 设置页:包含语言、主题、更新地址、版本、许可证、检查更新、GitHub 入口,以及 **Codex CLI 路径**(显示当前路径与来源标签,自动定位失败或路径错误时随时手动指定,写入 `install_state.json` 的 `user_codex_path` 优先级最高)。 - 引导页:展示添加账号、登录、切换账号的基础流程。 - 支持多套浅色和深色主题、中英文界面,以及没有 Tauri API 时的本地预览数据。 -部分设置项和运行时条目目前只完成前端界面,后续再接入后端。 - ## 平台支持 - macOS:原生 Tauri 桌面端,同时保留 `macOS-backup/` 下的兼容脚本。 diff --git a/README.zh-CN.md b/README.zh-CN.md index 474d699..2f5ae88 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -7,14 +7,11 @@ Codex 账号切换工具是一个本地桌面应用,用来在同一台机器 ## 当前功能 - 仪表盘:显示当前账号、账号总数、可用账号和待登录账号数量。 -- 账号页:每页 4 张账号卡片,支持切换、登录刷新、重命名、删除或清空、打开账号目录、编辑 Base URL。登录中点击同一按钮可取消(向 codex login 发送 SIGTERM / taskkill),适用于 OAuth 浏览器关闭后应用卡在等待回调的场景。 -- 运行时页:先放置运行时可视化界面,后续再接入更多后端能力。 -- 设置页:包含语言、主题、端口、开机自启占位、更新地址、配置备份、版本、许可证、检查更新、GitHub 入口,以及 **Codex CLI 路径**(显示当前路径与来源标签,自动定位失败或路径错误时随时手动指定,写入 `install_state.json` 的 `user_codex_path` 优先级最高)。 +- 账号页:每页 8 个账号条目(横向单行布局:账号名 + 套餐 / 5 小时与周额度 / 操作按钮),支持切换、登录刷新、重命名、删除或清空、打开账号目录、编辑 Base URL。登录中点击同一按钮可取消(向 codex login 发送 SIGTERM / taskkill),适用于 OAuth 浏览器关闭后应用卡在等待回调的场景。 +- 设置页:包含语言、主题、更新地址、版本、许可证、检查更新、GitHub 入口,以及 **Codex CLI 路径**(显示当前路径与来源标签,自动定位失败或路径错误时随时手动指定,写入 `install_state.json` 的 `user_codex_path` 优先级最高)。 - 引导页:展示添加账号、登录、切换账号的基础流程。 - 支持多套浅色和深色主题、中英文界面,以及没有 Tauri API 时的本地预览数据。 -部分设置项和运行时条目目前只完成前端界面,后续再接入后端。 - ## 平台支持 - macOS:原生 Tauri 桌面端,同时保留 `macOS-backup/` 下的兼容脚本。 diff --git a/package-lock.json b/package-lock.json index 856104e..3331562 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "codex_switch", - "version": "1.5.9", + "version": "1.5.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "codex_switch", - "version": "1.5.9", + "version": "1.5.10", "dependencies": { "@tauri-apps/api": "2.10.1" }, diff --git a/package.json b/package.json index 871d27d..8eaeae6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "codex_switch", "private": true, - "version": "1.5.9", + "version": "1.5.10", "type": "module", "scripts": { "dev": "vite", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 135ce2e..e8ae64d 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -466,7 +466,7 @@ dependencies = [ [[package]] name = "codex_switch" -version = "1.5.9" +version = "1.5.10" dependencies = [ "base64 0.22.1", "chrono", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index f672aa4..acc6730 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "codex_switch" -version = "1.5.9" +version = "1.5.10" description = "Native Tauri control panel for Codex account switching" authors = ["Cmochance"] edition = "2021" diff --git a/src-tauri/mac/front/index.html b/src-tauri/mac/front/index.html index b165115..371656b 100644 --- a/src-tauri/mac/front/index.html +++ b/src-tauri/mac/front/index.html @@ -12,7 +12,6 @@ @@ -97,7 +96,6 @@

Control D
-

Profiles

Profiles

@@ -116,37 +114,6 @@

Profiles

-
-
-

Runtime

-

Runtime Console

-

Front-end layout for runtime visibility before backend wiring.

-
- -
-
- UI draft - Codex desktop app -

Launch and activation controls will stay connected to the existing platform runtime.

-
-
- Not wired - Shell shim -

Future controls can expose the managed command path without changing profile data.

-
-
- Not wired - Auth refresh -

Queue, retry, and last-run details can be shown here after backend support lands.

-
-
- Not wired - Backup root -

Profile storage and autosave paths can be surfaced here in a later phase.

-
-
-
-
@@ -176,44 +143,15 @@

Runtime Console

- - -
- Launch at login - -
-
+
Codex CLI path -
-

--

-
- -
-
-
-
- Configuration backup -
-
- - - -
-

No backups yet

-

Exported configs include API keys. Keep them only on trusted devices.

+
+

--

+
diff --git a/src-tauri/mac/front/styles.css b/src-tauri/mac/front/styles.css index 4f3ac28..026615d 100644 --- a/src-tauri/mac/front/styles.css +++ b/src-tauri/mac/front/styles.css @@ -175,28 +175,32 @@ button.pager-pill:hover:not(:disabled) { } .profiles-grid { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 14px; + display: flex; + flex-direction: column; + gap: 8px; } .profile-card { - display: flex; - flex-direction: column; - gap: 18px; + display: grid; + grid-template-columns: minmax(0, 1fr) max-content; + grid-template-areas: + "title title" + "quotas actions"; + align-items: center; + row-gap: 10px; + column-gap: 18px; min-width: 0; - min-height: 188px; - padding: 18px; + padding: 14px 18px; border: 1px solid var(--border-accent); - border-radius: var(--radius-profile); - background: - radial-gradient(circle at 100% 0%, rgba(255, 255, 255, 0.52), transparent 16rem), - linear-gradient(180deg, rgba(250, 248, 244, 0.98), rgba(243, 239, 234, 0.98)); - box-shadow: - var(--shadow-card), - inset 0 1px 0 rgba(255, 255, 255, 0.9); + border-radius: var(--radius-metric); + background: linear-gradient(180deg, rgba(250, 248, 244, 0.98), rgba(243, 239, 234, 0.98)); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9); } +.profile-title-wrap { grid-area: title; } +.profile-quota-stack { grid-area: quotas; } +.profile-card-actions { grid-area: actions; } + .profile-card.status-current { border-color: rgba(199, 227, 238, 0.98); } @@ -208,8 +212,10 @@ button.pager-pill:hover:not(:disabled) { .profile-title-wrap { display: flex; - flex-direction: column; - gap: 8px; + flex-direction: row; + align-items: baseline; + flex-wrap: wrap; + gap: 4px 12px; min-width: 0; } @@ -235,14 +241,28 @@ button.pager-pill:hover:not(:disabled) { color: #727684; } -.profile-quota-stack, +.profile-quota-stack { + display: flex; + flex-direction: row; + gap: 24px; + align-items: center; + min-width: 0; +} + .current-quota-stack { display: flex; flex-direction: column; gap: 14px; } -.profile-quota-metric, +.profile-quota-metric { + display: flex; + flex-direction: column; + gap: 4px; + flex: 1; + min-width: 0; +} + .current-quota-metric { display: flex; flex-direction: column; @@ -267,6 +287,14 @@ button.pager-pill:hover:not(:disabled) { min-width: 0; } +.profile-quota-line { + gap: 8px; +} + +.profile-quota-stack .quota-track { + height: 6px; +} + .current-quota-line { gap: 8px; } @@ -292,7 +320,10 @@ button.pager-pill:hover:not(:disabled) { .current-quota-title, .current-quota-value, -.current-quota-refresh { +.current-quota-refresh, +.profile-quota-title, +.profile-quota-value, +.profile-quota-refresh { font-size: 0.78rem; } @@ -338,10 +369,18 @@ button.pager-pill:hover:not(:disabled) { } .profile-card-actions { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 10px; - margin-top: auto; + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: 6px; + margin-top: 0; +} + +.profile-card-actions .profile-action-button { + height: 28px; + padding: 0 10px; + font-size: 0.78rem; + white-space: nowrap; } .profile-action-button, @@ -684,13 +723,29 @@ button.pager-pill:disabled { justify-content: flex-start; } - .profiles-grid, .right-rail { grid-template-columns: 1fr; } - .current-actions, + .profile-card { + grid-template-columns: 1fr; + grid-template-areas: + "title" + "quotas" + "actions"; + } + + .profile-quota-stack { + flex-direction: column; + align-items: stretch; + gap: 8px; + } + .profile-card-actions { + justify-content: flex-start; + } + + .current-actions { grid-template-columns: repeat(2, minmax(0, 1fr)); } @@ -725,7 +780,6 @@ button.pager-pill:disabled { } .current-actions, - .profile-card-actions, .dialog-actions { grid-template-columns: 1fr; } diff --git a/src-tauri/shared/front/base.css b/src-tauri/shared/front/base.css index e80f3e5..ad69c09 100644 --- a/src-tauri/shared/front/base.css +++ b/src-tauri/shared/front/base.css @@ -600,7 +600,7 @@ p { .app-toolbar { display: flex; align-items: center; - justify-content: flex-end; + justify-content: center; gap: 18px; padding: 2px 2px 0; } @@ -981,6 +981,21 @@ p { gap: 10px; } +.settings-cli-inline { + display: flex; + align-items: center; + gap: 12px; + min-width: 0; +} + +.settings-value--inline { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + .settings-action-button { display: inline-flex; align-items: center; @@ -1928,28 +1943,32 @@ button.pager-pill:hover:not(:disabled) { } .profiles-grid { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 14px; + display: flex; + flex-direction: column; + gap: 8px; } .profile-card { - display: flex; - flex-direction: column; - gap: 18px; + display: grid; + grid-template-columns: minmax(0, 1fr) max-content; + grid-template-areas: + "title title" + "quotas actions"; + align-items: center; + row-gap: 10px; + column-gap: 18px; min-width: 0; - min-height: 188px; - padding: 18px; + padding: 14px 18px; border: 1px solid var(--border-accent); - border-radius: var(--radius-profile); - background: - radial-gradient(circle at 100% 0%, rgba(255, 255, 255, 0.52), transparent 16rem), - linear-gradient(180deg, rgba(250, 248, 244, 0.98), rgba(243, 239, 234, 0.98)); - box-shadow: - var(--shadow-card), - inset 0 1px 0 rgba(255, 255, 255, 0.9); + border-radius: var(--radius-metric); + background: linear-gradient(180deg, rgba(250, 248, 244, 0.98), rgba(243, 239, 234, 0.98)); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9); } +.profile-title-wrap { grid-area: title; } +.profile-quota-stack { grid-area: quotas; } +.profile-card-actions { grid-area: actions; } + .profile-card.status-current { border-color: rgba(199, 227, 238, 0.98); } @@ -1961,8 +1980,10 @@ button.pager-pill:hover:not(:disabled) { .profile-title-wrap { display: flex; - flex-direction: column; - gap: 8px; + flex-direction: row; + align-items: baseline; + flex-wrap: wrap; + gap: 4px 12px; min-width: 0; } @@ -2020,14 +2041,28 @@ button.pager-pill:hover:not(:disabled) { color: #727684; } -.profile-quota-stack, +.profile-quota-stack { + display: flex; + flex-direction: row; + gap: 24px; + align-items: center; + min-width: 0; +} + .current-quota-stack { display: flex; flex-direction: column; gap: 14px; } -.profile-quota-metric, +.profile-quota-metric { + display: flex; + flex-direction: column; + gap: 4px; + flex: 1; + min-width: 0; +} + .current-quota-metric { display: flex; flex-direction: column; @@ -2052,6 +2087,14 @@ button.pager-pill:hover:not(:disabled) { min-width: 0; } +.profile-quota-line { + gap: 10px; +} + +.profile-quota-stack .quota-track { + height: 6px; +} + .current-quota-line { gap: 8px; } @@ -2075,6 +2118,12 @@ button.pager-pill:hover:not(:disabled) { justify-self: center; } +.profile-quota-title, +.profile-quota-value, +.profile-quota-refresh { + font-size: 0.78rem; +} + .current-quota-title, .current-quota-value, .current-quota-refresh { @@ -2123,15 +2172,15 @@ button.pager-pill:hover:not(:disabled) { } .profile-card-actions { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 10px; - margin-top: auto; + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: 6px; + margin-top: 0; } .profile-card-actions--windows { - grid-template-columns: repeat(5, minmax(0, 1fr)); - gap: 8px; + gap: 6px; } .profile-action-button, @@ -2165,12 +2214,17 @@ button.pager-pill:hover:not(:disabled) { font-size: 0.82rem; } -.profile-card-actions--windows .profile-action-button { - padding: 0 8px; +.profile-card-actions .profile-action-button { + height: 28px; + padding: 0 10px; font-size: 0.78rem; white-space: nowrap; } +.profile-card-actions--windows .profile-action-button { + padding: 0 8px; +} + .ghost-button, .primary-button { height: 42px; @@ -2581,13 +2635,29 @@ button.pager-pill:disabled { justify-content: flex-start; } - .profiles-grid, .right-rail { grid-template-columns: 1fr; } - .current-actions, + .profile-card { + grid-template-columns: 1fr; + grid-template-areas: + "title" + "quotas" + "actions"; + } + + .profile-quota-stack { + flex-direction: column; + align-items: stretch; + gap: 8px; + } + .profile-card-actions { + justify-content: flex-start; + } + + .current-actions { grid-template-columns: repeat(2, minmax(0, 1fr)); } @@ -2622,7 +2692,6 @@ button.pager-pill:disabled { } .current-actions, - .profile-card-actions, .theme-options, .dialog-actions { grid-template-columns: 1fr; diff --git a/src-tauri/shared/front/render.ts b/src-tauri/shared/front/render.ts index e6de075..fc9feba 100644 --- a/src-tauri/shared/front/render.ts +++ b/src-tauri/shared/front/render.ts @@ -13,7 +13,7 @@ import { state } from "@front-shared/state"; import { getThemeOption, isThemeId } from "@front-shared/theme"; const isWindowsUiTarget = __CODEX_UI_TARGET__ === "windows"; -const shellRoutes: readonly ShellRoute[] = ["dashboard", "profiles", "runtime", "settings", "guide"]; +const shellRoutes: readonly ShellRoute[] = ["dashboard", "profiles", "settings", "guide"]; function isShellRoute(value: string): value is ShellRoute { return shellRoutes.includes(value as ShellRoute); diff --git a/src-tauri/shared/front/state.ts b/src-tauri/shared/front/state.ts index 86a76bb..b8b6e01 100644 --- a/src-tauri/shared/front/state.ts +++ b/src-tauri/shared/front/state.ts @@ -13,7 +13,7 @@ export const state = { route: "dashboard" as ShellRoute, locale: "en" as Locale, theme: "classic" as ThemeId, - pageSize: 4, + pageSize: 8, snapshot: null as ProfilesSnapshotResponse | null, currentQuota: null as QuotaSummary | null, }; diff --git a/src-tauri/shared/front/tauri.ts b/src-tauri/shared/front/tauri.ts index 7efe09b..b0d7c9e 100644 --- a/src-tauri/shared/front/tauri.ts +++ b/src-tauri/shared/front/tauri.ts @@ -143,7 +143,7 @@ let previewCurrentCard: CurrentCard = { let previewCurrentQuota: QuotaSummary = quota(84, "3小时后刷新", 61, "2天4小时后刷新"); let previewSnapshot: ProfilesSnapshotResponse = { - page_size: 4, + page_size: 8, profiles: clone(previewProfiles), current_card: clone(previewCurrentCard), current_quota_card: clone(previewCurrentQuota), @@ -159,7 +159,7 @@ function mockAction(message: string, path: string | null = null): Promise PathBuf { if let Some(path) = env::var_os("USERPROFILE") { diff --git a/src-tauri/win/front/index.html b/src-tauri/win/front/index.html index 783888b..c4bfe79 100644 --- a/src-tauri/win/front/index.html +++ b/src-tauri/win/front/index.html @@ -31,7 +31,6 @@ @@ -116,7 +115,6 @@

Control D
-

Profiles

Profiles

@@ -135,37 +133,6 @@

Profiles

-
-
-

Runtime

-

Runtime Console

-

Front-end layout for runtime visibility before backend wiring.

-
- -
-
- UI draft - Codex desktop app -

Launch and activation controls will stay connected to the existing platform runtime.

-
-
- Not wired - Shell shim -

Future controls can expose the managed command path without changing profile data.

-
-
- Not wired - Auth refresh -

Queue, retry, and last-run details can be shown here after backend support lands.

-
-
- Not wired - Backup root -

Profile storage and autosave paths can be surfaced here in a later phase.

-
-
-
-
@@ -195,44 +162,15 @@

Runtime Console

- - -
- Launch at login - -
-
+
Codex CLI path -
-

--

-
- -
-
-
-
- Configuration backup -
-
- - - -
-

No backups yet

-

Exported configs include API keys. Keep them only on trusted devices.

+
+

--

+
diff --git a/src-tauri/win/front/styles.css b/src-tauri/win/front/styles.css index 383ca4e..7feaeec 100644 --- a/src-tauri/win/front/styles.css +++ b/src-tauri/win/front/styles.css @@ -175,28 +175,32 @@ button.pager-pill:hover:not(:disabled) { } .profiles-grid { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 14px; + display: flex; + flex-direction: column; + gap: 8px; } .profile-card { - display: flex; - flex-direction: column; - gap: 18px; + display: grid; + grid-template-columns: minmax(0, 1fr) max-content; + grid-template-areas: + "title title" + "quotas actions"; + align-items: center; + row-gap: 10px; + column-gap: 18px; min-width: 0; - min-height: 188px; - padding: 18px; + padding: 14px 18px; border: 1px solid var(--border-accent); - border-radius: var(--radius-profile); - background: - radial-gradient(circle at 100% 0%, rgba(255, 255, 255, 0.52), transparent 16rem), - linear-gradient(180deg, rgba(250, 248, 244, 0.98), rgba(243, 239, 234, 0.98)); - box-shadow: - var(--shadow-card), - inset 0 1px 0 rgba(255, 255, 255, 0.9); + border-radius: var(--radius-metric); + background: linear-gradient(180deg, rgba(250, 248, 244, 0.98), rgba(243, 239, 234, 0.98)); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9); } +.profile-title-wrap { grid-area: title; } +.profile-quota-stack { grid-area: quotas; } +.profile-card-actions { grid-area: actions; } + .profile-card.status-current { border-color: rgba(199, 227, 238, 0.98); } @@ -208,8 +212,10 @@ button.pager-pill:hover:not(:disabled) { .profile-title-wrap { display: flex; - flex-direction: column; - gap: 8px; + flex-direction: row; + align-items: baseline; + flex-wrap: wrap; + gap: 4px 12px; min-width: 0; } @@ -235,14 +241,28 @@ button.pager-pill:hover:not(:disabled) { color: #727684; } -.profile-quota-stack, +.profile-quota-stack { + display: flex; + flex-direction: row; + gap: 24px; + align-items: center; + min-width: 0; +} + .current-quota-stack { display: flex; flex-direction: column; gap: 14px; } -.profile-quota-metric, +.profile-quota-metric { + display: flex; + flex-direction: column; + gap: 4px; + flex: 1; + min-width: 0; +} + .current-quota-metric { display: flex; flex-direction: column; @@ -267,6 +287,14 @@ button.pager-pill:hover:not(:disabled) { min-width: 0; } +.profile-quota-line { + gap: 8px; +} + +.profile-quota-stack .quota-track { + height: 6px; +} + .current-quota-line { gap: 8px; } @@ -292,7 +320,10 @@ button.pager-pill:hover:not(:disabled) { .current-quota-title, .current-quota-value, -.current-quota-refresh { +.current-quota-refresh, +.profile-quota-title, +.profile-quota-value, +.profile-quota-refresh { font-size: 0.78rem; } @@ -338,10 +369,18 @@ button.pager-pill:hover:not(:disabled) { } .profile-card-actions { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 10px; - margin-top: auto; + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: 6px; + margin-top: 0; +} + +.profile-card-actions .profile-action-button { + height: 28px; + padding: 0 10px; + font-size: 0.78rem; + white-space: nowrap; } .profile-action-button, @@ -684,13 +723,29 @@ button.pager-pill:disabled { justify-content: flex-start; } - .profiles-grid, .right-rail { grid-template-columns: 1fr; } - .current-actions, + .profile-card { + grid-template-columns: 1fr; + grid-template-areas: + "title" + "quotas" + "actions"; + } + + .profile-quota-stack { + flex-direction: column; + align-items: stretch; + gap: 8px; + } + .profile-card-actions { + justify-content: flex-start; + } + + .current-actions { grid-template-columns: repeat(2, minmax(0, 1fr)); } @@ -725,7 +780,6 @@ button.pager-pill:disabled { } .current-actions, - .profile-card-actions, .dialog-actions { grid-template-columns: 1fr; }