diff --git a/.github/.nvmrc b/.github/.nvmrc index 248216ad5b80a..3fe3b1570a518 100644 --- a/.github/.nvmrc +++ b/.github/.nvmrc @@ -1 +1 @@ -24.12.0 +24.13.0 diff --git a/cli/.nvmrc b/cli/.nvmrc index 248216ad5b80a..3fe3b1570a518 100644 --- a/cli/.nvmrc +++ b/cli/.nvmrc @@ -1 +1 @@ -24.12.0 +24.13.0 diff --git a/cli/package.json b/cli/package.json index 99c13db08a072..263a4ff26fa17 100644 --- a/cli/package.json +++ b/cli/package.json @@ -69,6 +69,6 @@ "micromatch": "^4.0.8" }, "volta": { - "node": "24.12.0" + "node": "24.13.0" } } diff --git a/docs/.nvmrc b/docs/.nvmrc index 248216ad5b80a..3fe3b1570a518 100644 --- a/docs/.nvmrc +++ b/docs/.nvmrc @@ -1 +1 @@ -24.12.0 +24.13.0 diff --git a/docs/package.json b/docs/package.json index 4076d089ce2ef..d4c1a3731ad38 100644 --- a/docs/package.json +++ b/docs/package.json @@ -57,6 +57,6 @@ "node": ">=20" }, "volta": { - "node": "24.12.0" + "node": "24.13.0" } } diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 7f8c6d576105b..29b9186307806 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -8,19 +8,19 @@ @tailwind utilities; @font-face { - font-family: 'Overpass'; - src: url('/fonts/overpass/Overpass.ttf') format('truetype-variations'); - font-weight: 1 999; + font-family: 'GoogleSans'; + src: url('/fonts/GoogleSans/GoogleSans.ttf') format('truetype-variations'); + font-weight: 410 900; font-style: normal; ascent-override: 106.25%; size-adjust: 106.25%; } @font-face { - font-family: 'Overpass Mono'; - src: url('/fonts/overpass/OverpassMono.ttf') format('truetype-variations'); - font-weight: 1 999; - font-style: normal; + font-family: 'GoogleSansCode'; + src: url('/fonts/GoogleSansCode/GoogleSansCode.ttf') format('truetype-variations'); + font-weight: 1 900; + font-style: monospace; ascent-override: 106.25%; size-adjust: 106.25%; } @@ -37,7 +37,8 @@ img { /* You can override the default Infima variables here. */ :root { - font-family: 'Overpass', sans-serif; + font-family: 'GoogleSans', sans-serif; + letter-spacing: 0.1px; --ifm-color-primary: #4250af; --ifm-color-primary-dark: #4250af; --ifm-color-primary-darker: #4250af; @@ -48,6 +49,16 @@ img { --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); } +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: 'GoogleSans', sans-serif; + letter-spacing: 0.1px; +} + /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme='dark'] { --ifm-color-primary: #adcbfa; @@ -71,15 +82,22 @@ div[class^='announcementBar_'] { padding: 10px 10px 10px 16px; border-radius: 24px; margin-right: 16px; + font-weight: 500; } .menu__list-item-collapsible { margin-right: 16px; border-radius: 24px; + font-weight: 500; } .menu__link--active { - font-weight: 500; + font-weight: 600; +} + +.table-of-contents__link { + font-size: 14px; + font-weight: 450; } /* workaround for version switcher PR 15894 */ @@ -88,13 +106,14 @@ div[class*='navbar__items'] > li:has(a[class*='version-switcher-34ab39']) { } code { - font-weight: 600; + font-weight: 500; + font-family: 'GoogleSansCode'; } .buy-button { padding: 8px 14px; border: 1px solid transparent; - font-family: 'Overpass', sans-serif; + font-family: 'GoogleSans', sans-serif; font-weight: 500; cursor: pointer; box-shadow: 0 0 5px 2px rgba(181, 206, 254, 0.4); diff --git a/docs/static/fonts/GoogleSans/GoogleSans.ttf b/docs/static/fonts/GoogleSans/GoogleSans.ttf new file mode 100644 index 0000000000000..5d9102f85668b Binary files /dev/null and b/docs/static/fonts/GoogleSans/GoogleSans.ttf differ diff --git a/docs/static/fonts/GoogleSansCode/GoogleSansCode.ttf b/docs/static/fonts/GoogleSansCode/GoogleSansCode.ttf new file mode 100644 index 0000000000000..b68d037edfe48 Binary files /dev/null and b/docs/static/fonts/GoogleSansCode/GoogleSansCode.ttf differ diff --git a/docs/static/fonts/overpass/Overpass-Italic.ttf b/docs/static/fonts/overpass/Overpass-Italic.ttf deleted file mode 100644 index 281dd742bba49..0000000000000 Binary files a/docs/static/fonts/overpass/Overpass-Italic.ttf and /dev/null differ diff --git a/docs/static/fonts/overpass/Overpass.ttf b/docs/static/fonts/overpass/Overpass.ttf deleted file mode 100644 index 1cf730a5ad8e2..0000000000000 Binary files a/docs/static/fonts/overpass/Overpass.ttf and /dev/null differ diff --git a/docs/static/fonts/overpass/OverpassMono.ttf b/docs/static/fonts/overpass/OverpassMono.ttf deleted file mode 100644 index 71ef818b335de..0000000000000 Binary files a/docs/static/fonts/overpass/OverpassMono.ttf and /dev/null differ diff --git a/e2e/.nvmrc b/e2e/.nvmrc index 248216ad5b80a..3fe3b1570a518 100644 --- a/e2e/.nvmrc +++ b/e2e/.nvmrc @@ -1 +1 @@ -24.12.0 +24.13.0 diff --git a/e2e/package.json b/e2e/package.json index c42bf6eddbb85..c3d9a9f183344 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -52,6 +52,6 @@ "vitest": "^3.0.0" }, "volta": { - "node": "24.12.0" + "node": "24.13.0" } } diff --git a/mise.toml b/mise.toml index a4f597662a98a..f020a078d0ff2 100644 --- a/mise.toml +++ b/mise.toml @@ -1,7 +1,7 @@ experimental_monorepo_root = true [tools] -node = "24.12.0" +node = "24.13.0" flutter = "3.35.7" pnpm = "10.27.0" terragrunt = "0.93.10" diff --git a/mobile/fonts/GoogleSans/GoogleSans-Bold.ttf b/mobile/fonts/GoogleSans/GoogleSans-Bold.ttf new file mode 100644 index 0000000000000..71b847f80f8f6 Binary files /dev/null and b/mobile/fonts/GoogleSans/GoogleSans-Bold.ttf differ diff --git a/mobile/fonts/GoogleSans/GoogleSans-Italic.ttf b/mobile/fonts/GoogleSans/GoogleSans-Italic.ttf new file mode 100644 index 0000000000000..1f9059a58c527 Binary files /dev/null and b/mobile/fonts/GoogleSans/GoogleSans-Italic.ttf differ diff --git a/mobile/fonts/GoogleSans/GoogleSans-Medium.ttf b/mobile/fonts/GoogleSans/GoogleSans-Medium.ttf new file mode 100644 index 0000000000000..8b9aebc9528d8 Binary files /dev/null and b/mobile/fonts/GoogleSans/GoogleSans-Medium.ttf differ diff --git a/mobile/fonts/GoogleSans/GoogleSans-Regular.ttf b/mobile/fonts/GoogleSans/GoogleSans-Regular.ttf new file mode 100644 index 0000000000000..cc37c3f38d86c Binary files /dev/null and b/mobile/fonts/GoogleSans/GoogleSans-Regular.ttf differ diff --git a/mobile/fonts/GoogleSans/GoogleSans-SemiBold.ttf b/mobile/fonts/GoogleSans/GoogleSans-SemiBold.ttf new file mode 100644 index 0000000000000..b80284d2ea227 Binary files /dev/null and b/mobile/fonts/GoogleSans/GoogleSans-SemiBold.ttf differ diff --git a/mobile/fonts/GoogleSansCode/GoogleSansCode-Medium.ttf b/mobile/fonts/GoogleSansCode/GoogleSansCode-Medium.ttf new file mode 100644 index 0000000000000..5e7f46b979318 Binary files /dev/null and b/mobile/fonts/GoogleSansCode/GoogleSansCode-Medium.ttf differ diff --git a/mobile/fonts/GoogleSansCode/GoogleSansCode-Regular.ttf b/mobile/fonts/GoogleSansCode/GoogleSansCode-Regular.ttf new file mode 100644 index 0000000000000..5c520addd99ed Binary files /dev/null and b/mobile/fonts/GoogleSansCode/GoogleSansCode-Regular.ttf differ diff --git a/mobile/fonts/GoogleSansCode/GoogleSansCode-SemiBold.ttf b/mobile/fonts/GoogleSansCode/GoogleSansCode-SemiBold.ttf new file mode 100644 index 0000000000000..a03c7f04404e2 Binary files /dev/null and b/mobile/fonts/GoogleSansCode/GoogleSansCode-SemiBold.ttf differ diff --git a/mobile/lib/constants/locales.dart b/mobile/lib/constants/locales.dart index f3c24384b0cc7..e20f037beb558 100644 --- a/mobile/lib/constants/locales.dart +++ b/mobile/lib/constants/locales.dart @@ -51,4 +51,4 @@ const Map locales = { const String translationsPath = 'assets/i18n'; -const List localesNotSupportedByOverpass = [Locale('el', 'GR'), Locale('sr', 'Cyrl')]; +const List localesNotSupportedByAppFont = [Locale('el', 'GR'), Locale('sr', 'Cyrl')]; diff --git a/mobile/lib/pages/common/app_log.page.dart b/mobile/lib/pages/common/app_log.page.dart index 37aec2f13c475..336bf0b605b50 100644 --- a/mobile/lib/pages/common/app_log.page.dart +++ b/mobile/lib/pages/common/app_log.page.dart @@ -100,7 +100,7 @@ class AppLogPage extends HookConsumerWidget { minLeadingWidth: 10, title: Text( truncateLogMessage(logMessage.message, 4), - style: TextStyle(fontSize: 14.0, color: context.colorScheme.onSurface, fontFamily: "Inconsolata"), + style: TextStyle(fontSize: 14.0, color: context.colorScheme.onSurface, fontFamily: "GoogleSansCode"), ), subtitle: Text( "at ${DateFormat("HH:mm:ss.SSS").format(logMessage.createdAt)} in ${logMessage.logger}", diff --git a/mobile/lib/pages/common/app_log_detail.page.dart b/mobile/lib/pages/common/app_log_detail.page.dart index de9604b7ad5c6..890e46888f475 100644 --- a/mobile/lib/pages/common/app_log_detail.page.dart +++ b/mobile/lib/pages/common/app_log_detail.page.dart @@ -57,7 +57,7 @@ class AppLogDetailPage extends HookConsumerWidget { padding: const EdgeInsets.all(8.0), child: SelectableText( text, - style: const TextStyle(fontSize: 12.0, fontWeight: FontWeight.bold, fontFamily: "Inconsolata"), + style: const TextStyle(fontSize: 12.0, fontWeight: FontWeight.bold, fontFamily: "GoogleSansCode"), ), ), ), @@ -88,7 +88,7 @@ class AppLogDetailPage extends HookConsumerWidget { padding: const EdgeInsets.all(8.0), child: SelectableText( logger.toString(), - style: const TextStyle(fontSize: 12.0, fontWeight: FontWeight.bold, fontFamily: "Inconsolata"), + style: const TextStyle(fontSize: 12.0, fontWeight: FontWeight.bold, fontFamily: "GoogleSansCode"), ), ), ), diff --git a/mobile/lib/pages/library/folder/folder.page.dart b/mobile/lib/pages/library/folder/folder.page.dart index 2968bca18e756..497d3e51517e2 100644 --- a/mobile/lib/pages/library/folder/folder.page.dart +++ b/mobile/lib/pages/library/folder/folder.page.dart @@ -234,7 +234,7 @@ class FolderPath extends StatelessWidget { Text( currentFolder.path, style: TextStyle( - fontFamily: 'Inconsolata', + fontFamily: 'GoogleSansCode', fontWeight: FontWeight.bold, fontSize: 14, color: context.colorScheme.onSurface.withAlpha(175), diff --git a/mobile/lib/pages/login/login.page.dart b/mobile/lib/pages/login/login.page.dart index e1d551900f017..5f40b32baa523 100644 --- a/mobile/lib/pages/login/login.page.dart +++ b/mobile/lib/pages/login/login.page.dart @@ -41,7 +41,7 @@ class LoginPage extends HookConsumerWidget { style: TextStyle( color: context.colorScheme.onSurfaceSecondary, fontWeight: FontWeight.bold, - fontFamily: "Inconsolata", + fontFamily: "GoogleSansCode", ), ), const Text(' '), @@ -51,7 +51,7 @@ class LoginPage extends HookConsumerWidget { style: TextStyle( color: context.primaryColor, fontWeight: FontWeight.bold, - fontFamily: "Inconsolata", + fontFamily: "GoogleSansCode", ), ), onTap: () { diff --git a/mobile/lib/presentation/widgets/timeline/scrubber.widget.dart b/mobile/lib/presentation/widgets/timeline/scrubber.widget.dart index 58d7f933e9b59..d31048fbb512e 100644 --- a/mobile/lib/presentation/widgets/timeline/scrubber.widget.dart +++ b/mobile/lib/presentation/widgets/timeline/scrubber.widget.dart @@ -450,7 +450,7 @@ class _SegmentWidget extends StatelessWidget { alignment: Alignment.center, child: Text( _segment.date.year.toString(), - style: context.textTheme.labelMedium?.copyWith(fontFamily: "OverpassMono", fontWeight: FontWeight.w600), + style: context.textTheme.labelMedium?.copyWith(fontFamily: "GoogleSansCode", fontWeight: FontWeight.w600), ), ), ), diff --git a/mobile/lib/theme/theme_data.dart b/mobile/lib/theme/theme_data.dart index 8e3773839c809..006dfb97ec8fd 100644 --- a/mobile/lib/theme/theme_data.dart +++ b/mobile/lib/theme/theme_data.dart @@ -147,9 +147,9 @@ ImmichTheme decolorizeSurfaces({required ImmichTheme theme}) { } String? _getFontFamilyFromLocale(Locale locale) { - if (localesNotSupportedByOverpass.contains(locale)) { + if (localesNotSupportedByAppFont.contains(locale)) { // Let Flutter use the default font return null; } - return 'Overpass'; + return 'GoogleSans'; } diff --git a/mobile/lib/widgets/asset_viewer/advanced_bottom_sheet.dart b/mobile/lib/widgets/asset_viewer/advanced_bottom_sheet.dart index faa058ced4f07..1a3ef3eac3486 100644 --- a/mobile/lib/widgets/asset_viewer/advanced_bottom_sheet.dart +++ b/mobile/lib/widgets/asset_viewer/advanced_bottom_sheet.dart @@ -58,7 +58,7 @@ class AdvancedBottomSheet extends HookConsumerWidget { style: const TextStyle( fontSize: 12.0, fontWeight: FontWeight.bold, - fontFamily: "Inconsolata", + fontFamily: "GoogleSansCode", ), showCursor: true, ), diff --git a/mobile/lib/widgets/backup/upload_progress_bar.dart b/mobile/lib/widgets/backup/upload_progress_bar.dart index 65ff6c758afee..641ed14878c33 100644 --- a/mobile/lib/widgets/backup/upload_progress_bar.dart +++ b/mobile/lib/widgets/backup/upload_progress_bar.dart @@ -36,7 +36,7 @@ class BackupUploadProgressBar extends ConsumerWidget { ), Text( " ${uploadProgress.toStringAsFixed(0)}%", - style: const TextStyle(fontSize: 12, fontFamily: "OverpassMono"), + style: const TextStyle(fontSize: 12, fontFamily: "GoogleSansCode"), ), ], ), diff --git a/mobile/lib/widgets/backup/upload_stats.dart b/mobile/lib/widgets/backup/upload_stats.dart index c9b626c51c903..38f99e53fc183 100644 --- a/mobile/lib/widgets/backup/upload_stats.dart +++ b/mobile/lib/widgets/backup/upload_stats.dart @@ -26,10 +26,10 @@ class BackupUploadStats extends ConsumerWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(uploadFileProgress, style: const TextStyle(fontSize: 10, fontFamily: "OverpassMono")), + Text(uploadFileProgress, style: const TextStyle(fontSize: 10, fontFamily: "GoogleSansCode")), Text( _formatUploadFileSpeed(uploadFileSpeed), - style: const TextStyle(fontSize: 10, fontFamily: "OverpassMono"), + style: const TextStyle(fontSize: 10, fontFamily: "GoogleSansCode"), ), ], ), diff --git a/mobile/lib/widgets/forms/pin_input.dart b/mobile/lib/widgets/forms/pin_input.dart index 88e27f005e1bd..c4f0d8f3b78b8 100644 --- a/mobile/lib/widgets/forms/pin_input.dart +++ b/mobile/lib/widgets/forms/pin_input.dart @@ -43,7 +43,7 @@ class PinInput extends StatelessWidget { final defaultPinTheme = PinTheme( width: getPinSize().width, height: getPinSize().height, - textStyle: TextStyle(fontSize: 24, color: context.colorScheme.onSurface, fontFamily: 'Overpass Mono'), + textStyle: TextStyle(fontSize: 24, color: context.colorScheme.onSurface, fontFamily: 'GoogleSansCode'), decoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(19)), border: Border.all(color: context.colorScheme.surfaceBright), diff --git a/mobile/lib/widgets/settings/beta_sync_settings/entity_count_tile.dart b/mobile/lib/widgets/settings/beta_sync_settings/entity_count_tile.dart index d9a0bae6063b1..6120524d5bbd5 100644 --- a/mobile/lib/widgets/settings/beta_sync_settings/entity_count_tile.dart +++ b/mobile/lib/widgets/settings/beta_sync_settings/entity_count_tile.dart @@ -50,7 +50,7 @@ class EntityCountTile extends StatelessWidget { const Spacer(), RichText( text: TextSpan( - style: const TextStyle(fontSize: 18, fontFamily: 'OverpassMono', fontWeight: FontWeight.w600), + style: const TextStyle(fontSize: 18, fontFamily: 'GoogleSansCode', fontWeight: FontWeight.w600), children: [ TextSpan( text: zeroPadding(count, maxDigits), diff --git a/mobile/lib/widgets/settings/networking_settings/endpoint_input.dart b/mobile/lib/widgets/settings/networking_settings/endpoint_input.dart index a712ce416c851..47e85fd7cca16 100644 --- a/mobile/lib/widgets/settings/networking_settings/endpoint_input.dart +++ b/mobile/lib/widgets/settings/networking_settings/endpoint_input.dart @@ -117,7 +117,7 @@ class EndpointInputState extends ConsumerState { autovalidateMode: AutovalidateMode.onUserInteraction, validator: validateUrl, keyboardType: TextInputType.url, - style: const TextStyle(fontFamily: 'Inconsolata', fontWeight: FontWeight.w600, fontSize: 14), + style: const TextStyle(fontFamily: 'GoogleSansCode', fontWeight: FontWeight.w600, fontSize: 14), decoration: InputDecoration( hintText: 'http(s)://immich.domain.com', contentPadding: const EdgeInsets.all(16), diff --git a/mobile/lib/widgets/settings/networking_settings/local_network_preference.dart b/mobile/lib/widgets/settings/networking_settings/local_network_preference.dart index 21e26c8f1fe62..3f47233eeca21 100644 --- a/mobile/lib/widgets/settings/networking_settings/local_network_preference.dart +++ b/mobile/lib/widgets/settings/networking_settings/local_network_preference.dart @@ -155,7 +155,7 @@ class LocalNetworkPreference extends HookConsumerWidget { style: context.textTheme.labelLarge?.copyWith( fontWeight: FontWeight.bold, color: enabled ? context.primaryColor : context.colorScheme.onSurface.withAlpha(100), - fontFamily: 'Inconsolata', + fontFamily: 'GoogleSansCode', ), ), trailing: IconButton( @@ -175,7 +175,7 @@ class LocalNetworkPreference extends HookConsumerWidget { style: context.textTheme.labelLarge?.copyWith( fontWeight: FontWeight.bold, color: enabled ? context.primaryColor : context.colorScheme.onSurface.withAlpha(100), - fontFamily: 'Inconsolata', + fontFamily: 'GoogleSansCode', ), ), trailing: IconButton( diff --git a/mobile/lib/widgets/settings/networking_settings/networking_settings.dart b/mobile/lib/widgets/settings/networking_settings/networking_settings.dart index 272b83c9aac7e..4acf80af84615 100644 --- a/mobile/lib/widgets/settings/networking_settings/networking_settings.dart +++ b/mobile/lib/widgets/settings/networking_settings/networking_settings.dart @@ -110,7 +110,7 @@ class NetworkingSettings extends HookConsumerWidget { currentEndpoint ?? "--", style: TextStyle( fontSize: 16, - fontFamily: 'Inconsolata', + fontFamily: 'GoogleSansCode', fontWeight: FontWeight.bold, color: context.primaryColor, ), diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 7d484f0c64b86..64d7205444059 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -127,24 +127,26 @@ flutter: assets: - assets/ fonts: - - family: Inconsolata + - family: GoogleSans fonts: - - asset: fonts/Inconsolata-Regular.ttf - - family: Overpass - fonts: - - asset: fonts/overpass/Overpass-Regular.ttf + - asset: fonts/GoogleSans/GoogleSans-Regular.ttf weight: 400 - - asset: fonts/overpass/Overpass-Italic.ttf + - asset: fonts/GoogleSans/GoogleSans-Italic.ttf style: italic - - asset: fonts/overpass/Overpass-Medium.ttf + - asset: fonts/GoogleSans/GoogleSans-Medium.ttf weight: 500 - - asset: fonts/overpass/Overpass-SemiBold.ttf + - asset: fonts/GoogleSans/GoogleSans-SemiBold.ttf weight: 600 - - asset: fonts/overpass/Overpass-Bold.ttf + - asset: fonts/GoogleSans/GoogleSans-Bold.ttf weight: 700 - - family: OverpassMono + - family: GoogleSansCode fonts: - - asset: fonts/overpass/OverpassMono.ttf + - asset: fonts/GoogleSansCode/GoogleSansCode-Regular.ttf + weight: 400 + - asset: fonts/GoogleSansCode/GoogleSansCode-Medium.ttf + weight: 500 + - asset: fonts/GoogleSansCode/GoogleSansCode-SemiBold.ttf + weight: 600 flutter_launcher_icons: image_path_android: 'assets/immich-logo.png' adaptive_icon_background: '#ffffff' diff --git a/open-api/typescript-sdk/.nvmrc b/open-api/typescript-sdk/.nvmrc index 248216ad5b80a..3fe3b1570a518 100644 --- a/open-api/typescript-sdk/.nvmrc +++ b/open-api/typescript-sdk/.nvmrc @@ -1 +1 @@ -24.12.0 +24.13.0 diff --git a/open-api/typescript-sdk/package.json b/open-api/typescript-sdk/package.json index 832093fe23378..69e422cbbeddf 100644 --- a/open-api/typescript-sdk/package.json +++ b/open-api/typescript-sdk/package.json @@ -28,6 +28,6 @@ "directory": "open-api/typescript-sdk" }, "volta": { - "node": "24.12.0" + "node": "24.13.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3a58f9f43e96b..c4de9717b7118 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -738,8 +738,8 @@ importers: specifier: file:../open-api/typescript-sdk version: link:../open-api/typescript-sdk '@immich/ui': - specifier: ^0.56.1 - version: 0.56.1(@sveltejs/kit@2.49.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.3(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1) + specifier: ^0.57.3 + version: 0.57.3(@sveltejs/kit@2.49.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.3(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1) '@mapbox/mapbox-gl-rtl-text': specifier: 0.2.3 version: 0.2.3(mapbox-gl@1.13.3) @@ -3087,8 +3087,8 @@ packages: peerDependencies: svelte: ^5.0.0 - '@immich/ui@0.56.1': - resolution: {integrity: sha512-W4uEQn9pxVKRvIV7sl9p6dU2r7xlVsMFxBeClxtXzSsiJEoE10uZwBIm0L9q17c4TQ/+lk9e/w1e4jNSvFqFwQ==} + '@immich/ui@0.57.3': + resolution: {integrity: sha512-5Y0KmyHRojem1gvX4hbr01GZ35oq22AkYE3CImvg3+jmZQhP0newTiqyVYJsfnEupLZKu5bFIlWykIe8uwMqDQ==} peerDependencies: svelte: ^5.0.0 @@ -15144,7 +15144,7 @@ snapshots: dependencies: svelte: 5.46.1 - '@immich/ui@0.56.1(@sveltejs/kit@2.49.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.3(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)': + '@immich/ui@0.57.3(@sveltejs/kit@2.49.3(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.3(svelte@5.46.1)(vite@7.3.1(@types/node@25.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.7)(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.97.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.46.1)': dependencies: '@immich/svelte-markdown-preprocess': 0.1.0(svelte@5.46.1) '@internationalized/date': 3.10.0 diff --git a/server/.nvmrc b/server/.nvmrc index 248216ad5b80a..3fe3b1570a518 100644 --- a/server/.nvmrc +++ b/server/.nvmrc @@ -1 +1 @@ -24.12.0 +24.13.0 diff --git a/server/package.json b/server/package.json index eee94412094e1..882c7e71ba10b 100644 --- a/server/package.json +++ b/server/package.json @@ -167,7 +167,7 @@ "vitest": "^3.0.0" }, "volta": { - "node": "24.12.0" + "node": "24.13.0" }, "overrides": { "sharp": "^0.34.5" diff --git a/web/.nvmrc b/web/.nvmrc index 248216ad5b80a..3fe3b1570a518 100644 --- a/web/.nvmrc +++ b/web/.nvmrc @@ -1 +1 @@ -24.12.0 +24.13.0 diff --git a/web/package.json b/web/package.json index f2581db97bd37..e02bbefacc375 100644 --- a/web/package.json +++ b/web/package.json @@ -27,7 +27,7 @@ "@formatjs/icu-messageformat-parser": "^3.0.0", "@immich/justified-layout-wasm": "^0.4.3", "@immich/sdk": "file:../open-api/typescript-sdk", - "@immich/ui": "^0.56.1", + "@immich/ui": "^0.57.3", "@mapbox/mapbox-gl-rtl-text": "0.2.3", "@mdi/js": "^7.4.47", "@photo-sphere-viewer/core": "^5.14.0", @@ -107,6 +107,6 @@ "vitest": "^3.0.0" }, "volta": { - "node": "24.12.0" + "node": "24.13.0" } } diff --git a/web/src/app.css b/web/src/app.css index bf7601f63b233..ca4634cfd97bb 100644 --- a/web/src/app.css +++ b/web/src/app.css @@ -49,7 +49,7 @@ } @theme { - --font-immich-mono: Overpass Mono, monospace; + --font-immich-mono: GoogleSansCode, monospace; --spacing-18: 4.5rem; @@ -84,25 +84,25 @@ @layer utilities { @font-face { - font-family: 'Overpass'; - src: url('$lib/assets/fonts/overpass/Overpass.ttf') format('truetype-variations'); - font-weight: 1 999; + font-family: 'GoogleSans'; + src: url('$lib/assets/fonts/GoogleSans/GoogleSans.ttf') format('truetype-variations'); + font-weight: 410 900; font-style: normal; ascent-override: 106.25%; size-adjust: 106.25%; } @font-face { - font-family: 'Overpass Mono'; - src: url('$lib/assets/fonts/overpass/OverpassMono.ttf') format('truetype-variations'); - font-weight: 1 999; + font-family: 'GoogleSansCode'; + src: url('$lib/assets/fonts/GoogleSansCode/GoogleSansCode.ttf') format('truetype-variations'); + font-weight: 1 900; font-style: monospace; - ascent-override: 106.25%; - size-adjust: 106.25%; } :root { - font-family: 'Overpass', sans-serif; + font-family: 'GoogleSans', sans-serif; + letter-spacing: 0.1px; + /* Used by layouts to ensure proper spacing between navbar and content */ --navbar-height: calc(4.5rem + 4px); --navbar-height-md: calc(4.5rem + 4px - 14px); diff --git a/web/src/hooks.server.ts b/web/src/hooks.server.ts index 1606f927966eb..4a08e7bf618c1 100644 --- a/web/src/hooks.server.ts +++ b/web/src/hooks.server.ts @@ -1,12 +1,12 @@ -import overpass from '$lib/assets/fonts/overpass/Overpass.ttf?url'; -import overpassMono from '$lib/assets/fonts/overpass/OverpassMono.ttf?url'; +import GoogleSans from '$lib/assets/fonts/GoogleSans/GoogleSans.ttf?url'; +import GoogleSansCode from '$lib/assets/fonts/GoogleSansCode/GoogleSansCode.ttf?url'; import type { Handle } from '@sveltejs/kit'; // only used during the build to replace the variables from app.html export const handle = (async ({ event, resolve }) => { return resolve(event, { transformPageChunk: ({ html }) => { - return html.replace('%app.font%', overpass).replace('%app.monofont%', overpassMono); + return html.replace('%app.font%', GoogleSans).replace('%app.monofont%', GoogleSansCode); }, }); }) satisfies Handle; diff --git a/web/src/lib/assets/fonts/GoogleSans/GoogleSans.ttf b/web/src/lib/assets/fonts/GoogleSans/GoogleSans.ttf new file mode 100644 index 0000000000000..5d9102f85668b Binary files /dev/null and b/web/src/lib/assets/fonts/GoogleSans/GoogleSans.ttf differ diff --git a/web/src/lib/assets/fonts/GoogleSansCode/GoogleSansCode.ttf b/web/src/lib/assets/fonts/GoogleSansCode/GoogleSansCode.ttf new file mode 100644 index 0000000000000..b68d037edfe48 Binary files /dev/null and b/web/src/lib/assets/fonts/GoogleSansCode/GoogleSansCode.ttf differ diff --git a/web/src/lib/assets/fonts/overpass/Overpass-Italic.ttf b/web/src/lib/assets/fonts/overpass/Overpass-Italic.ttf deleted file mode 100644 index 281dd742bba49..0000000000000 Binary files a/web/src/lib/assets/fonts/overpass/Overpass-Italic.ttf and /dev/null differ diff --git a/web/src/lib/assets/fonts/overpass/Overpass.ttf b/web/src/lib/assets/fonts/overpass/Overpass.ttf deleted file mode 100644 index 1cf730a5ad8e2..0000000000000 Binary files a/web/src/lib/assets/fonts/overpass/Overpass.ttf and /dev/null differ diff --git a/web/src/lib/assets/fonts/overpass/OverpassMono.ttf b/web/src/lib/assets/fonts/overpass/OverpassMono.ttf deleted file mode 100644 index 71ef818b335de..0000000000000 Binary files a/web/src/lib/assets/fonts/overpass/OverpassMono.ttf and /dev/null differ diff --git a/web/src/lib/components/album-page/album-description.svelte b/web/src/lib/components/album-page/album-description.svelte index 2b2a185c5b4b0..00744832a733e 100644 --- a/web/src/lib/components/album-page/album-description.svelte +++ b/web/src/lib/components/album-page/album-description.svelte @@ -31,7 +31,7 @@ {#if isOwned}