From 311e2535c7f4c47ed3ebe5634b53fa7a1deadba2 Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 5 Jul 2026 00:07:31 +0200 Subject: [PATCH] feat: redesign login screen Split-panel login: an animated brand panel with the assembling O-Neko logo, and a form panel wired to the existing theming (dark/light) and i18n (EN/DE) infrastructure. - the logo lives in assets/oneko-animated.svg with its part animations embedded, keeping the template lean - the language pill and theme toggle dispatch the existing NGXS actions (SetLocale, SetThemeMode), so choices apply app-wide as before - real form submit with autocomplete, autofocus and a loading state on the submit button - new login strings added to the en/de dictionaries - Space Grotesk is self-hosted via fontsource, matching the existing font setup --- frontend/package-lock.json | 15 + frontend/package.json | 1 + .../src/app/views/login/login.component.html | 66 ++-- .../src/app/views/login/login.component.scss | 285 ++++++++++++++++-- .../views/login/login.component.theme.scss | 50 ++- .../src/app/views/login/login.component.ts | 38 ++- frontend/src/assets/i18n/de.json | 8 +- frontend/src/assets/i18n/en.json | 8 +- frontend/src/assets/oneko-animated.svg | 56 ++++ .../src/styles/fonts/fontsource-imports.scss | 1 + 10 files changed, 442 insertions(+), 86 deletions(-) create mode 100644 frontend/src/assets/oneko-animated.svg diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 3e39edc0..c1bf1607 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -23,6 +23,7 @@ "@angular/platform-browser-dynamic": "16.2.8", "@angular/router": "16.2.8", "@fontsource-variable/jetbrains-mono": "5.0.16", + "@fontsource-variable/space-grotesk": "^5.2.10", "@fontsource/barlow": "^5.0.8", "@fontsource/varela-round": "^5.0.8", "@mdi/svg": "7.3.67", @@ -3069,6 +3070,15 @@ "resolved": "https://registry.npmjs.org/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.0.16.tgz", "integrity": "sha512-KTQ+QFW/5OALFDg4dgR5CrzsLncDK1FfNEDCkatWRwrsjS4BLkt3AzTcNBcND1MN3Yae63zSgVoy7ihYdCVi+A==" }, + "node_modules/@fontsource-variable/space-grotesk": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@fontsource-variable/space-grotesk/-/space-grotesk-5.2.10.tgz", + "integrity": "sha512-yJQO/o35/hAP3CFnpdFTwQku2yzJOae2HIpBmqkOVoxhhXJaQP3g+b6Jrz7u+eI7A5ZdCIf88uMWpBJdFiGr5w==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@fontsource/barlow": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/@fontsource/barlow/-/barlow-5.0.8.tgz", @@ -17868,6 +17878,11 @@ "resolved": "https://registry.npmjs.org/@fontsource-variable/jetbrains-mono/-/jetbrains-mono-5.0.16.tgz", "integrity": "sha512-KTQ+QFW/5OALFDg4dgR5CrzsLncDK1FfNEDCkatWRwrsjS4BLkt3AzTcNBcND1MN3Yae63zSgVoy7ihYdCVi+A==" }, + "@fontsource-variable/space-grotesk": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@fontsource-variable/space-grotesk/-/space-grotesk-5.2.10.tgz", + "integrity": "sha512-yJQO/o35/hAP3CFnpdFTwQku2yzJOae2HIpBmqkOVoxhhXJaQP3g+b6Jrz7u+eI7A5ZdCIf88uMWpBJdFiGr5w==" + }, "@fontsource/barlow": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/@fontsource/barlow/-/barlow-5.0.8.tgz", diff --git a/frontend/package.json b/frontend/package.json index abf1992a..de312c52 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -26,6 +26,7 @@ "@angular/platform-browser-dynamic": "16.2.8", "@angular/router": "16.2.8", "@fontsource-variable/jetbrains-mono": "5.0.16", + "@fontsource-variable/space-grotesk": "^5.2.10", "@fontsource/barlow": "^5.0.8", "@fontsource/varela-round": "^5.0.8", "@mdi/svg": "7.3.67", diff --git a/frontend/src/app/views/login/login.component.html b/frontend/src/app/views/login/login.component.html index 0dbad458..c685f841 100644 --- a/frontend/src/app/views/login/login.component.html +++ b/frontend/src/app/views/login/login.component.html @@ -1,28 +1,52 @@ -
-