style(mobile): uppercase button names in mobile hamburger menu and export button

This commit is contained in:
2026-10-14 15:58:49 +07:00
parent 6290e5a8ab
commit a24f000ead
5 changed files with 50 additions and 28 deletions
+10 -10
View File
@@ -6,15 +6,15 @@ export const en: Dict = {
'nav.demo': 'TRY DEMO',
'nav.login': 'LOG IN',
'nav.signup': 'SIGN UP',
'nav.logout': 'Log out',
'nav.account': 'Account',
'nav.theme': 'Theme',
'nav.language': 'Language',
'nav.logout': 'LOG OUT',
'nav.account': 'ACCOUNT',
'nav.theme': 'THEME',
'nav.language': 'LANGUAGE',
// The phone's way back from a tab's strip to the rail that opened it.
'nav.tabs': 'TABS',
'nav.back': 'Back to home',
'nav.menu': 'MENU',
'nav.guest': 'Guest',
'nav.guest': 'GUEST',
// The install offer (see vi.ts).
'install.title': 'Install RecipesCam',
@@ -27,7 +27,7 @@ export const en: Dict = {
'act.redo': 'REDO',
'act.reset': 'RESET',
'act.export': 'EXPORT',
'act.exporting': 'Exporting…',
'act.exporting': 'EXPORTING…',
'act.upscaling': 'Upscaling the photo {done}/{total}…',
'act.cancel': 'Cancel',
@@ -410,7 +410,7 @@ export const en: Dict = {
'lib.immich.linkForget': 'REMOVE THE LINK',
'immich.upload': 'Upload to Immich',
'immich.uploadTitle': 'Upload edited photo to Immich Cloud',
'immich.uploading': 'Uploading…',
'immich.uploading': 'UPLOADING…',
'immich.uploadSuccess': 'Successfully uploaded photo to Immich Cloud!',
'immich.uploadFailed': 'Failed to upload to Immich Cloud: {msg}',
'immich.uploadToCloud': 'Upload to Immich Cloud',
@@ -440,9 +440,9 @@ export const en: Dict = {
'lib.mobile.disconnect': 'DISCONNECT',
'lib.mobile.searchPlaceholder': 'Search on Immich (filename, tag)...',
'nav.admin': 'Admin',
'nav.photos': 'My photos',
'nav.profile': 'Profile',
'nav.admin': 'ADMIN',
'nav.photos': 'MY PHOTOS',
'nav.profile': 'PROFILE',
'nav.library': 'LIBRARY',
'nav.studio': 'Studio',
'adm.title': 'Strip moderation',
+10 -10
View File
@@ -9,21 +9,21 @@ export const vi = {
'nav.demo': 'DÙNG THỬ',
'nav.login': 'ĐĂNG NHẬP',
'nav.signup': 'ĐĂNG KÝ',
'nav.logout': 'Đăng xuất',
'nav.account': 'Tài khoản',
'nav.theme': 'Giao diện',
'nav.language': 'Ngôn ngữ',
'nav.logout': 'ĐĂNG XUẤT',
'nav.account': 'TÀI KHOẢN',
'nav.theme': 'GIAO DIỆN',
'nav.language': 'NGÔN NGỮ',
'nav.tabs': 'TAB',
'nav.back': 'Về trang chủ',
'nav.admin': 'Quản trị',
'nav.photos': 'Ảnh của tôi',
'nav.profile': 'Hồ sơ',
'nav.admin': 'QUẢN TRỊ',
'nav.photos': 'ẢNH CỦA TÔI',
'nav.profile': 'HỒ SƠ',
// The phone's one button in the header's corner: every control the bar
// carries, folded into a panel under it (see TopBar).
'nav.menu': 'MENU',
'nav.library': 'THƯ VIỆN',
'nav.studio': 'Studio',
'nav.guest': 'Khách',
'nav.guest': 'KHÁCH',
// The install offer (src/ui/InstallPrompt.tsx). The only dialog that asks for
// something the visitor did not come for, so the copy sells what they get out of
@@ -38,7 +38,7 @@ export const vi = {
'act.redo': 'LÀM LẠI',
'act.reset': 'ĐẶT LẠI',
'act.export': 'XUẤT ẢNH',
'act.exporting': 'Đang xuất…',
'act.exporting': 'ĐANG XUẤT…',
'act.upscaling': 'Đang phóng to ảnh {done}/{total}…',
'act.cancel': 'Huỷ',
@@ -424,7 +424,7 @@ export const vi = {
'lib.immich.linkForget': 'XOÁ LIÊN KẾT',
'immich.upload': 'Lưu lên Immich',
'immich.uploadTitle': 'Tải ảnh đã sửa lên Immich Cloud',
'immich.uploading': 'Đang tải lên…',
'immich.uploading': 'ĐANG TẢI LÊN…',
'immich.uploadSuccess': 'Đã tải ảnh lên Immich Cloud thành công!',
'immich.uploadFailed': 'Tải lên Immich Cloud thất bại: {msg}',
'immich.uploadToCloud': 'Tải lên Immich Cloud',
+27 -5
View File
@@ -46,6 +46,7 @@
/* The word a button keeps for that panel: the icon-only rules below take the
words out of the row, and the panel is where they are read again. */
.mob-label { display: none; }
[data-key="export-photo"] { text-transform: uppercase; letter-spacing: 0.04em; }
.workspace { display: flex; flex: 1 1 auto; min-height: 0; }
@@ -2192,9 +2193,10 @@ form[data-key='immich-modal'] {
line-height: 1.2;
padding: 4px 10px;
}
/* The names come back. LIBRARY, RESET, SAVE PHOTO, EXPORT and the Immich
button wear their word as text at font-size 0 in the row; the panel draws
it, and their ::before glyph comes along as the mark beside it. */
/* The names come back. LIBRARY, RESET, SAVE PHOTO, EXPORT, IMMICH, THEME,
LANGUAGE, ACCOUNT buttons wear their word as text at font-size 0 in the row;
the panel draws it with unified uppercase formatting across all buttons. */
.bar-menu.open .btn,
.bar-menu.open [data-key="nav-library"],
.bar-menu.open [data-key="reset-look"],
.bar-menu.open [data-key="save-photo"],
@@ -2205,12 +2207,32 @@ form[data-key='immich-modal'] {
padding: 7px 10px;
gap: 6px;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.bar-menu.open [data-key="upload-immich"] > span {
display: inline;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.bar-menu.open [data-key="upload-immich"] > span { display: inline; }
/* The count is only half of what SAVE PHOTO says; the PRO marker rides with
the word it belongs to. */
.bar-menu.open [data-key="save-photo"] .pro { display: inline; }
.bar-menu.open .mob-label { display: inline; margin-left: 6px; font-size: 12px; letter-spacing: 0.06em; }
.bar-menu.open .mob-label {
display: inline;
margin-left: 6px;
font-size: 12px;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.bar-menu.open [data-key="nav-account"] {
text-transform: uppercase;
letter-spacing: 0.06em;
}
.bar-menu.open [data-key="export-photo"] {
text-transform: uppercase;
letter-spacing: 0.06em;
}
/* Four labelled buttons — LIBRARY, RESET, SAVE PHOTO, EXPORT — are most of what
wraps the bar onto a third row on a 390px screen: the row's own content is
990px wide with the words and 716px with icons, and the bar measured 135px
+2 -2
View File
@@ -161,7 +161,7 @@ export function TopBar({
<path d="M50 50 C50 75, 25 90, 10 75 C-5 60, 10 35, 35 35 Z" fill="#34a853" />
<path d="M50 50 C25 50, 10 25, 25 10 C40 -5, 65 10, 65 35 Z" fill="#4285f4" />
</svg>
<span>{uploadingImmich ? (t('immich.uploading') || 'Đang tải lên...') : 'Immich'}</span>
<span>{uploadingImmich ? (t('immich.uploading') || 'ĐANG TẢI LÊN…') : 'IMMICH'}</span>
</button>
) : null}
@@ -292,7 +292,7 @@ export function TopBar({
{user ? (
<>
<Avatar user={user} small />
{user.email.split('@')[0]}
{user.email.split('@')[0].toUpperCase()}
</>
) : (
t('nav.guest')
+1 -1
View File
@@ -1 +1 @@
2f1f0b4c603b55de877fe229e3df8b1fc614f54d405935604558d6e23793e97b recipescam-images.tar.gz
200b894b06829eac11e49895a6d251bdac93acd41ca0ee9862b0b36122a681f0 recipescam-images.tar.gz