Anupriya commited on
Commit
a5d3fab
·
1 Parent(s): 62d3c8a

duplicate removed

Browse files
src/app/app.module.ts CHANGED
@@ -25,12 +25,9 @@ import { RootRedirectComponent } from './root-redirect/root-redirect.component';
25
  import { HeaderComponent } from './shared/header/header.component';
26
  import { SignInComponent } from './sign-in/sign-in.component';
27
  import { PronunciationComponent } from './pronunciation/pronunciation.component';
28
- import { PronunciationVideoComponent } from './pronunciationvideo/pronunciationvideo.component';
29
- import { PronunciationRaggComponent } from './pronunciationragg/pronunciationragg.component';
30
-
31
  import { FooterComponent } from './footer/footer.component';
32
- // If you have AppButtonComponent, import it here as well
33
- // import { AppButtonComponent } from './app-button/app-button.component';
34
 
35
  @NgModule({
36
  declarations: [
@@ -39,18 +36,7 @@ import { FooterComponent } from './footer/footer.component';
39
  AuthenticationComponent,
40
  AuthComponent,
41
  RootRedirectComponent,
42
- PronunciationComponent,
43
- PronunciationVideoComponent,
44
- PronunciationRaggComponent,
45
- FooterComponent,
46
- //GenerateQuestionsComponent,
47
- //VocabularyBuilderComponent,
48
- //FindwordComponent,
49
- //HeaderComponent,
50
- //SignInComponent,
51
- //ReadingComponent,
52
- //WritingComponent,
53
- // AppButtonComponent
54
  ],
55
  imports: [
56
  BrowserModule,
@@ -61,7 +47,16 @@ import { FooterComponent } from './footer/footer.component';
61
  MatDialogModule,
62
  MatSlideToggleModule,
63
  MatIconModule,
64
- MatCardModule
 
 
 
 
 
 
 
 
 
65
  ],
66
  providers: [],
67
  bootstrap: [AppComponent]
 
25
  import { HeaderComponent } from './shared/header/header.component';
26
  import { SignInComponent } from './sign-in/sign-in.component';
27
  import { PronunciationComponent } from './pronunciation/pronunciation.component';
 
 
 
28
  import { FooterComponent } from './footer/footer.component';
29
+ import { ButtonComponent } from './shared/button/button.component';
30
+
31
 
32
  @NgModule({
33
  declarations: [
 
36
  AuthenticationComponent,
37
  AuthComponent,
38
  RootRedirectComponent,
39
+ PronunciationComponent,
 
 
 
 
 
 
 
 
 
 
 
40
  ],
41
  imports: [
42
  BrowserModule,
 
47
  MatDialogModule,
48
  MatSlideToggleModule,
49
  MatIconModule,
50
+ MatCardModule,
51
+ FooterComponent,
52
+ GenerateQuestionsComponent,
53
+ VocabularyBuilderComponent,
54
+ FindwordComponent,
55
+ HeaderComponent,
56
+ SignInComponent,
57
+ ReadingComponent,
58
+ WritingComponent,
59
+ ButtonComponent
60
  ],
61
  providers: [],
62
  bootstrap: [AppComponent]
src/app/auth/auth.component.css CHANGED
@@ -1,4 +1,4 @@
1
- .py-learn-text {
2
  font-size: 4vw;
3
  font-weight: 600;
4
  color: #073879;
@@ -33,9 +33,9 @@
33
  width: 66vw;
34
  height: 600px;
35
  background-color: white;
36
- border-radius: 24px;
37
  /*box-shadow: #ffffff 0px 5px 15px;*/
38
- box-shadow: #ffffff 1px 1px 51px;
39
  overflow: hidden;
40
  }
41
 
@@ -87,9 +87,9 @@ h2 {
87
  input[type="text"],
88
  input[type="password"] {
89
  width: 100%;
90
- padding: 16px;
91
  /* margin: 12px 0; */
92
- border: 1px solid #dadce0;
93
  border-radius: 6px;
94
  font-size: 18px;
95
  margin-bottom: 1vw;
@@ -160,11 +160,11 @@ button {
160
 
161
  .footer-link a:hover {
162
  text-decoration: underline;
163
- }
164
 
165
 
166
  /* Positioning the social media icons at the top-right corner */
167
- .social-media-icons {
168
  position: absolute;
169
  top: 1vw;
170
  right: 2vw;
@@ -179,33 +179,33 @@ button {
179
  }
180
 
181
  .social-icon img:hover {
182
- transform: scale(1.1); /* Slight zoom effect on hover */
183
- }
184
 
185
  .language-grade-container {
186
  display: flex;
187
- gap: 13vw; /* Gap between Language and Grade sections */
188
- align-items: center;
189
  }
190
 
191
  .language-switcher,
192
  .grade-switcher {
193
  display: flex;
194
  align-items: center;
195
- gap: 0.5vw; /* Gap between label and select box */
196
- }
197
 
198
  .language-label, .grade-label {
199
- color: #007bff; /* Blue for Language label */
200
- font-size: 1vw;
201
  font-weight: bold;
202
  }
203
 
204
 
205
 
206
- .dropdown-select {
207
  /* padding: 0.5vw; */
208
- font-size: 1vw;
209
- border-radius: 5px;
210
  /* border: 1px solid #000; */
211
- }
 
1
+ /*.py-learn-text {
2
  font-size: 4vw;
3
  font-weight: 600;
4
  color: #073879;
 
33
  width: 66vw;
34
  height: 600px;
35
  background-color: white;
36
+ border-radius: 24px;*/
37
  /*box-shadow: #ffffff 0px 5px 15px;*/
38
+ /*box-shadow: #ffffff 1px 1px 51px;
39
  overflow: hidden;
40
  }
41
 
 
87
  input[type="text"],
88
  input[type="password"] {
89
  width: 100%;
90
+ padding: 16px;*/
91
  /* margin: 12px 0; */
92
+ /*border: 1px solid #dadce0;
93
  border-radius: 6px;
94
  font-size: 18px;
95
  margin-bottom: 1vw;
 
160
 
161
  .footer-link a:hover {
162
  text-decoration: underline;
163
+ }*/
164
 
165
 
166
  /* Positioning the social media icons at the top-right corner */
167
+ /*.social-media-icons {
168
  position: absolute;
169
  top: 1vw;
170
  right: 2vw;
 
179
  }
180
 
181
  .social-icon img:hover {
182
+ transform: scale(1.1);*/ /* Slight zoom effect on hover */
183
+ /*}
184
 
185
  .language-grade-container {
186
  display: flex;
187
+ gap: 13vw;*/ /* Gap between Language and Grade sections */
188
+ /*align-items: center;
189
  }
190
 
191
  .language-switcher,
192
  .grade-switcher {
193
  display: flex;
194
  align-items: center;
195
+ gap: 0.5vw;*/ /* Gap between label and select box */
196
+ /*}
197
 
198
  .language-label, .grade-label {
199
+ color: #007bff;*/ /* Blue for Language label */
200
+ /*font-size: 1vw;
201
  font-weight: bold;
202
  }
203
 
204
 
205
 
206
+ .dropdown-select {*/
207
  /* padding: 0.5vw; */
208
+ /*font-size: 1vw;
209
+ border-radius: 5px;*/
210
  /* border: 1px solid #000; */
211
+ /*}*/
src/app/auth/auth.component.html CHANGED
@@ -1,20 +1,20 @@
1
- <div class="login-wrapper">
2
- <div class="login-container">
3
  <!-- Left side image and logo -->
4
- <div class="login-image">
5
  <img src="assets/images/login/lion.png" alt="Login Illustration" class="bgImage" />
6
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" class="logo" />
7
- </div>
8
 
9
  <!-- Right side form -->
10
- <div class="login-box">
11
  <div class="logo-header">
12
- <span class="py-learn-text">Py- Learn</span>
13
  <!-- Added self-learning system text here -->
14
- <div class="self-learning-system">(A Self-Learning System)</div>
15
  </div>
16
 
17
- <h2>Login</h2>
18
  <!--<p class="subtitle">Use your Pykara account</p>-->
19
  <!--<input type="text" [(ngModel)]="username" placeholder="Username or Email" />
20
 
@@ -31,7 +31,7 @@
31
 
32
  <button (click)="login()">Login</button>-->
33
 
34
- <form (ngSubmit)="login()" #loginForm="ngForm" autocomplete="on">
35
  <input type="text" name="username" [(ngModel)]="username" placeholder="Username or Email" required />
36
 
37
  <div class="password-field">
@@ -82,11 +82,11 @@
82
 
83
  <div class="footer-link">
84
  <a href="https://pykara.ai" target="_blank">www.pykara.ai</a>
85
- </div>
86
 
87
 
88
  <!-- Social Media Icons at the top-right -->
89
- <div class="social-media-icons">
90
  <a href="https://www.youtube.com/@PykaraTechnologies/videos" target="_blank" class="social-icon">
91
 
92
  <img src="assets/images/home/youtube-icon.png" alt="YouTube">
@@ -98,4 +98,4 @@
98
  </div>
99
 
100
 
101
- </div>
 
1
+ <!--<div class="login-wrapper">
2
+ <div class="login-container">-->
3
  <!-- Left side image and logo -->
4
+ <!--<div class="login-image">
5
  <img src="assets/images/login/lion.png" alt="Login Illustration" class="bgImage" />
6
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" class="logo" />
7
+ </div>-->
8
 
9
  <!-- Right side form -->
10
+ <!--<div class="login-box">
11
  <div class="logo-header">
12
+ <span class="py-learn-text">Py- Learn</span>-->
13
  <!-- Added self-learning system text here -->
14
+ <!--<div class="self-learning-system">(A Self-Learning System)</div>
15
  </div>
16
 
17
+ <h2>Login</h2>-->
18
  <!--<p class="subtitle">Use your Pykara account</p>-->
19
  <!--<input type="text" [(ngModel)]="username" placeholder="Username or Email" />
20
 
 
31
 
32
  <button (click)="login()">Login</button>-->
33
 
34
+ <!--<form (ngSubmit)="login()" #loginForm="ngForm" autocomplete="on">
35
  <input type="text" name="username" [(ngModel)]="username" placeholder="Username or Email" required />
36
 
37
  <div class="password-field">
 
82
 
83
  <div class="footer-link">
84
  <a href="https://pykara.ai" target="_blank">www.pykara.ai</a>
85
+ </div>-->
86
 
87
 
88
  <!-- Social Media Icons at the top-right -->
89
+ <!--<div class="social-media-icons">
90
  <a href="https://www.youtube.com/@PykaraTechnologies/videos" target="_blank" class="social-icon">
91
 
92
  <img src="assets/images/home/youtube-icon.png" alt="YouTube">
 
98
  </div>
99
 
100
 
101
+ </div>-->
src/app/auth/auth.component.ts CHANGED
@@ -9,64 +9,64 @@ type GradeLevel = 'lowergrade' | 'midgrade' | 'highergrade';
9
  })
10
  export class AuthComponent {
11
 
12
- username: string = '';
13
- password: string = '';
14
- errorMessage: string = '';
15
- showPassword: boolean = false;
16
 
17
- constructor(private authService: AuthService, private router: Router) { }
18
 
19
- //ngOnInit(): void {
20
- // this.authService.checkSession();
21
- //}
22
- // ✅ Handle Login
23
- login(): void {
24
- this.authService.login(this.username, this.password).subscribe(
25
- (response) => {
26
- // 1) Prefer grade coming from backend if it exists
27
- let level = this.normalizeGrade(
28
- (response?.gradeLevel ?? response?.grade ?? response?.role ?? '')
29
- );
30
 
31
- // 2) Otherwise derive it from the USERNAME exactly as you requested
32
- if (!level) level = this.normalizeGrade(this.username);
33
 
34
- // 3) Persist for ApiService -> sets X-User per request
35
- if (!level) level = 'highergrade'; // final fallback (optional)
36
- localStorage.setItem('gradeLevel', level);
37
 
38
- // 4) Proceed as before
39
- this.authService.setLoggedIn(true);
40
- this.authService.startAutoRefresh();
41
 
42
- const redirectUrl = localStorage.getItem('redirectAfterLogin') || '/home';
43
- localStorage.removeItem('redirectAfterLogin');
44
- this.router.navigate([redirectUrl]);
45
- },
46
- () => {
47
- this.errorMessage = 'Invalid username or password';
48
- }
49
- );
50
- }
51
 
52
 
53
- private normalizeGrade(v: string): GradeLevel | '' {
54
- const s = (v || '').trim().toLowerCase();
55
- if (s === 'lowergrade' || s === 'lower' || s === 'low' || s === 'l') return 'lowergrade';
56
- if (s === 'midgrade' || s === 'mid' || s === 'm') return 'midgrade';
57
- if (s === 'highergrade' || s === 'higher' || s === 'high' || s === 'h') return 'highergrade';
58
- return '';
59
- }
60
 
61
- // ✅ Check if user is logged in
62
- isLoggedIn(): boolean {
63
- return this.authService.isLoggedIn();
64
- }
65
 
66
 
67
- togglePasswordVisibility(): void {
68
- this.showPassword = !this.showPassword;
69
- }
70
 
71
 
72
  }
 
9
  })
10
  export class AuthComponent {
11
 
12
+ //username: string = '';
13
+ //password: string = '';
14
+ //errorMessage: string = '';
15
+ //showPassword: boolean = false;
16
 
17
+ //constructor(private authService: AuthService, private router: Router) { }
18
 
19
+ ////ngOnInit(): void {
20
+ //// this.authService.checkSession();
21
+ ////}
22
+ //// ✅ Handle Login
23
+ //login(): void {
24
+ // this.authService.login(this.username, this.password).subscribe(
25
+ // (response) => {
26
+ // // 1) Prefer grade coming from backend if it exists
27
+ // let level = this.normalizeGrade(
28
+ // (response?.gradeLevel ?? response?.grade ?? response?.role ?? '')
29
+ // );
30
 
31
+ // // 2) Otherwise derive it from the USERNAME exactly as you requested
32
+ // if (!level) level = this.normalizeGrade(this.username);
33
 
34
+ // // 3) Persist for ApiService -> sets X-User per request
35
+ // if (!level) level = 'highergrade'; // final fallback (optional)
36
+ // localStorage.setItem('gradeLevel', level);
37
 
38
+ // // 4) Proceed as before
39
+ // this.authService.setLoggedIn(true);
40
+ // this.authService.startAutoRefresh();
41
 
42
+ // const redirectUrl = localStorage.getItem('redirectAfterLogin') || '/home';
43
+ // localStorage.removeItem('redirectAfterLogin');
44
+ // this.router.navigate([redirectUrl]);
45
+ // },
46
+ // () => {
47
+ // this.errorMessage = 'Invalid username or password';
48
+ // }
49
+ // );
50
+ //}
51
 
52
 
53
+ //private normalizeGrade(v: string): GradeLevel | '' {
54
+ // const s = (v || '').trim().toLowerCase();
55
+ // if (s === 'lowergrade' || s === 'lower' || s === 'low' || s === 'l') return 'lowergrade';
56
+ // if (s === 'midgrade' || s === 'mid' || s === 'm') return 'midgrade';
57
+ // if (s === 'highergrade' || s === 'higher' || s === 'high' || s === 'h') return 'highergrade';
58
+ // return '';
59
+ //}
60
 
61
+ //// ✅ Check if user is logged in
62
+ //isLoggedIn(): boolean {
63
+ // return this.authService.isLoggedIn();
64
+ //}
65
 
66
 
67
+ //togglePasswordVisibility(): void {
68
+ // this.showPassword = !this.showPassword;
69
+ //}
70
 
71
 
72
  }
src/app/authentication/authentication.component.css CHANGED
@@ -1,25 +1,25 @@
1
 
2
- .py-learn-text {
3
  font-size: 4vw;
4
  font-weight: 600;
5
  color: #073879;
6
  font-family: Amonk_Outline;
7
- }
8
 
9
 
10
 
11
 
12
  /* Wrapper for the full screen */
13
- .login-wrapper {
14
  height: 100vh;
15
  display: flex;
16
  justify-content: center;
17
  align-items: center;
18
  background-color: #05234b;
19
- }
20
 
21
  /* Container for left and right split */
22
- .login-container {
23
  display: flex;
24
  width: 1100px;
25
  height: 600px;
@@ -27,10 +27,10 @@
27
  border-radius: 24px;
28
  box-shadow: #ffffff 0px 5px 15px;
29
  overflow: hidden;
30
- }
31
 
32
  /* Left section (image) */
33
- .login-image {
34
  flex: 1;
35
  background-color: #e8f0fe;
36
  display: flex;
@@ -39,12 +39,12 @@
39
 
40
  .bgImage {
41
  width: 100%;
42
- height: 66vh;
43
  /*opacity: 0.5;*/
44
- }
45
 
46
  /* Right section (form) */
47
- .login-box {
48
  flex: 1;
49
  padding: 60px;
50
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
@@ -118,8 +118,8 @@ button {
118
 
119
  .password-field input {
120
  width: 100%;
121
- padding-right: 40px; /* space for the icon */
122
- }
123
 
124
  .toggle-password {
125
  position: absolute;
@@ -130,4 +130,4 @@ button {
130
  font-size: 1.2vw;
131
  color: #555;
132
  user-select: none;
133
- }
 
1
 
2
+ /*.py-learn-text {
3
  font-size: 4vw;
4
  font-weight: 600;
5
  color: #073879;
6
  font-family: Amonk_Outline;
7
+ }*/
8
 
9
 
10
 
11
 
12
  /* Wrapper for the full screen */
13
+ /*.login-wrapper {
14
  height: 100vh;
15
  display: flex;
16
  justify-content: center;
17
  align-items: center;
18
  background-color: #05234b;
19
+ }*/
20
 
21
  /* Container for left and right split */
22
+ /*.login-container {
23
  display: flex;
24
  width: 1100px;
25
  height: 600px;
 
27
  border-radius: 24px;
28
  box-shadow: #ffffff 0px 5px 15px;
29
  overflow: hidden;
30
+ }*/
31
 
32
  /* Left section (image) */
33
+ /*.login-image {
34
  flex: 1;
35
  background-color: #e8f0fe;
36
  display: flex;
 
39
 
40
  .bgImage {
41
  width: 100%;
42
+ height: 66vh;*/
43
  /*opacity: 0.5;*/
44
+ /*}*/
45
 
46
  /* Right section (form) */
47
+ /*.login-box {
48
  flex: 1;
49
  padding: 60px;
50
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
 
118
 
119
  .password-field input {
120
  width: 100%;
121
+ padding-right: 40px;*/ /* space for the icon */
122
+ /*}
123
 
124
  .toggle-password {
125
  position: absolute;
 
130
  font-size: 1.2vw;
131
  color: #555;
132
  user-select: none;
133
+ }*/
src/app/authentication/authentication.component.html CHANGED
@@ -1,13 +1,13 @@
1
- <div class="login-wrapper">
2
- <div class="login-container">
3
  <!-- Left side image -->
4
- <div class="login-image">
5
  <img src="assets/images/lion1.png" alt="Login Illustration" class="bgImage"/>
6
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" class="logo" />
7
- </div>
8
 
9
  <!-- Right side form -->
10
- <div class="login-box">
11
 
12
  <div class="logo-header">
13
  <span class="py-learn-text">Py Learn</span>
@@ -23,9 +23,9 @@
23
  [(ngModel)]="password"
24
  placeholder="Password" />
25
  <span class="toggle-password" (click)="togglePasswordVisibility()">
26
- <i class="{{ showPassword ? 'fas fa-eye' : 'fas fa-eye-slash' }}"></i>
27
  <!-- {{ showPassword ? '👁️' : '🙈' }}-->
28
- </span>
29
  </div>
30
 
31
  <p *ngIf="errorMessage" class="error">{{ errorMessage }}</p>
@@ -44,4 +44,4 @@
44
  </div>
45
  </div>
46
  </div>
47
- </div>
 
1
+ <!--<div class="login-wrapper">
2
+ <div class="login-container">-->
3
  <!-- Left side image -->
4
+ <!--<div class="login-image">
5
  <img src="assets/images/lion1.png" alt="Login Illustration" class="bgImage"/>
6
  <img src="assets/images/pykara-logo.png" alt="Pykara Logo" class="logo" />
7
+ </div>-->
8
 
9
  <!-- Right side form -->
10
+ <!--<div class="login-box">
11
 
12
  <div class="logo-header">
13
  <span class="py-learn-text">Py Learn</span>
 
23
  [(ngModel)]="password"
24
  placeholder="Password" />
25
  <span class="toggle-password" (click)="togglePasswordVisibility()">
26
+ <i class="{{ showPassword ? 'fas fa-eye' : 'fas fa-eye-slash' }}"></i>-->
27
  <!-- {{ showPassword ? '👁️' : '🙈' }}-->
28
+ <!--</span>
29
  </div>
30
 
31
  <p *ngIf="errorMessage" class="error">{{ errorMessage }}</p>
 
44
  </div>
45
  </div>
46
  </div>
47
+ </div>-->
src/app/authentication/authentication.component.ts CHANGED
@@ -14,33 +14,33 @@ export class AuthenticationComponent {
14
 
15
  constructor(private authService: AuthenticationService, private router: Router) { }
16
 
17
- // ✅ Login functionality
18
- login(): void {
19
- this.authService.login(this.username, this.password).subscribe(
20
- (response: any) => {
21
- // Directly access the tokens from the response body
22
- const token = response.access_token; // Access the access token directly from the body
23
- this.authService.storeToken(token);
24
- this.router.navigate(['/home']); // Redirect to the home page or dashboard after successful login
25
- },
26
- (error) => {
27
- this.errorMessage = 'Invalid username or password'; // Show error message if login fails
28
- }
29
- );
30
- }
31
-
32
-
33
- // ✅ Check if the user is logged in (token is stored in localStorage)
34
- get isLoggedIn(): boolean {
35
- return this.authService.isLoggedIn();
36
- }
37
-
38
-
39
- showPassword: boolean = false;
40
-
41
- togglePasswordVisibility(): void {
42
- this.showPassword = !this.showPassword;
43
- }
44
 
45
 
46
 
 
14
 
15
  constructor(private authService: AuthenticationService, private router: Router) { }
16
 
17
+ //// ✅ Login functionality
18
+ //login(): void {
19
+ // this.authService.login(this.username, this.password).subscribe(
20
+ // (response: any) => {
21
+ // // Directly access the tokens from the response body
22
+ // const token = response.access_token; // Access the access token directly from the body
23
+ // this.authService.storeToken(token);
24
+ // this.router.navigate(['/home']); // Redirect to the home page or dashboard after successful login
25
+ // },
26
+ // (error) => {
27
+ // this.errorMessage = 'Invalid username or password'; // Show error message if login fails
28
+ // }
29
+ // );
30
+ //}
31
+
32
+
33
+ //// ✅ Check if the user is logged in (token is stored in localStorage)
34
+ //get isLoggedIn(): boolean {
35
+ // return this.authService.isLoggedIn();
36
+ //}
37
+
38
+
39
+ //showPassword: boolean = false;
40
+
41
+ //togglePasswordVisibility(): void {
42
+ // this.showPassword = !this.showPassword;
43
+ //}
44
 
45
 
46
 
src/app/footer/footer.component.css CHANGED
@@ -72,7 +72,6 @@ footer {
72
  text-align: center;
73
  width: 100%;
74
  position: relative;
75
- margin-top: 28vw;
76
  font-size: 18px;
77
  font-weight: 700;
78
  font-family: Inter, Segoe UI, -apple-system, BlinkMacSystemFont, sans-serif;
 
72
  text-align: center;
73
  width: 100%;
74
  position: relative;
 
75
  font-size: 18px;
76
  font-weight: 700;
77
  font-family: Inter, Segoe UI, -apple-system, BlinkMacSystemFont, sans-serif;
src/app/footer/footer.component.ts CHANGED
@@ -1,10 +1,13 @@
1
  import { Component } from '@angular/core';
2
  import { BrandService } from '../shared/brand.service';
 
3
 
4
  @Component({
5
  selector: 'app-footer',
6
  templateUrl: './footer.component.html',
7
- styleUrls: ['./footer.component.css']
 
 
8
  })
9
  export class FooterComponent {
10
  showPrivacyPopup = false;
 
1
  import { Component } from '@angular/core';
2
  import { BrandService } from '../shared/brand.service';
3
+ import { CommonModule } from '@angular/common';
4
 
5
  @Component({
6
  selector: 'app-footer',
7
  templateUrl: './footer.component.html',
8
+ styleUrls: ['./footer.component.css'],
9
+ standalone: true,
10
+ imports: [CommonModule]
11
  })
12
  export class FooterComponent {
13
  showPrivacyPopup = false;
src/app/home/home.component.css CHANGED
@@ -1,14 +1,25 @@
1
  .hero {
2
- background: url('/assets/images/home/background.png') no-repeat;
3
  flex: 1;
 
 
 
4
  }
5
 
6
  .hero-text {
7
  color: white;
8
  text-align: left;
9
- max-width: 50%;
 
 
 
 
 
 
 
 
10
  position: relative;
11
- transform: translate(1vw, 17vw);
 
12
  }
13
 
14
  h1 {
@@ -241,7 +252,6 @@ h1 {
241
  padding: 3vw 2vw;
242
  background-color: #f9f9f9;
243
  position: relative;
244
- top: 30vw;
245
  }
246
 
247
  .section-title {
 
1
  .hero {
 
2
  flex: 1;
3
+ display: flex;
4
+ flex-direction: column;
5
+ position: relative;
6
  }
7
 
8
  .hero-text {
9
  color: white;
10
  text-align: left;
11
+ height: 100vh;
12
+ display: flex;
13
+ flex-direction: column;
14
+ justify-content: center;
15
+ padding-left: 1vw;
16
+ background-image: url('/assets/images/home/background.png');
17
+ background-repeat: no-repeat;
18
+ background-position: center center;
19
+ background-size: cover;
20
  position: relative;
21
+ top: 5vw;
22
+ padding-bottom: 5vw;
23
  }
24
 
25
  h1 {
 
252
  padding: 3vw 2vw;
253
  background-color: #f9f9f9;
254
  position: relative;
 
255
  }
256
 
257
  .section-title {
src/app/home/home.component.html CHANGED
@@ -73,8 +73,8 @@
73
  <h1>{{ brand.name }}</h1>
74
  <h2>A Self-Learning System</h2>
75
  <p>
76
- It is a personalized self-learning system helps students to improve their language skills through interactive and customized exercises.
77
- With engaging activities and instant feedback, learning becomes easy and enjoyable!
78
  </p>
79
  </div>
80
 
 
73
  <h1>{{ brand.name }}</h1>
74
  <h2>A Self-Learning System</h2>
75
  <p>
76
+ It is a personalized self-learning system helps students to improve their language skills through interactive<br />and customized exercises.
77
+ With engaging activities and instant feedback,<br />learning becomes easy and enjoyable!
78
  </p>
79
  </div>
80
 
src/app/reading/reading.component.css CHANGED
@@ -706,8 +706,14 @@
706
 
707
  .icon-img {
708
  width: 4.5vw;
 
 
709
  }
710
 
 
 
 
 
711
 
712
  .passage-text .highlight {
713
  background-color: yellow;
 
706
 
707
  .icon-img {
708
  width: 4.5vw;
709
+ cursor: pointer;
710
+ transition: transform 0.3s;
711
  }
712
 
713
+ .icon-img:hover, .icon-img:focus {
714
+ transform: scale(1.1);
715
+ }
716
+
717
 
718
  .passage-text .highlight {
719
  background-color: yellow;
src/app/sign-in/sign-in.component.css CHANGED
@@ -15,65 +15,6 @@
15
  backdrop-filter: blur(16px);
16
  }
17
 
18
- /* Ensure no solid white background is set anywhere */
19
-
20
- .signin-header {
21
- width: 420px;
22
- max-width: 95vw;
23
- display: flex;
24
- justify-content: flex-end;
25
- align-items: flex-start;
26
- padding: 0;
27
- position: absolute;
28
- top: -28px;
29
- right: 12px;
30
- pointer-events: none;
31
- z-index: 2;
32
- }
33
- .signin-logo {
34
- display: flex;
35
- align-items: center;
36
- gap: 12px;
37
- pointer-events: auto;
38
- }
39
- .signin-login-link {
40
- font-size: 1.1rem;
41
- color: #fff;
42
- margin-top: 0;
43
- pointer-events: auto;
44
- background: #18314a;
45
- border-radius: 0 0 12px 12px;
46
- padding: 8px 18px 4px 18px;
47
- box-shadow: 0 2px 8px #0002;
48
- position: relative;
49
- right: 0;
50
- top: 0;
51
- }
52
- .signin-login-link a {
53
- color: #1de9b6;
54
- text-decoration: underline;
55
- margin-left: 6px;
56
- font-weight: 600;
57
- cursor: pointer;
58
- }
59
- .signin-box {
60
- margin: 0 auto;
61
- /* Center the box horizontally and vertically */
62
- position: relative;
63
- left: 0;
64
- right: 0;
65
- top: 0;
66
- bottom: 0;
67
- background: #18314a;
68
- border-radius: 22px;
69
- box-shadow: 0 12px 48px #000a;
70
- padding: 48px 38px 32px 38px;
71
- width: 420px;
72
- max-width: 95vw;
73
- display: flex;
74
- flex-direction: column;
75
- align-items: center;
76
- }
77
  .signin-title {
78
  color: #38bdf8;
79
  font-size: 2.1rem;
@@ -83,51 +24,60 @@
83
  letter-spacing: 1px;
84
  text-shadow: 0 2px 8px #0008;
85
  }
 
86
  form {
87
  width: 100%;
88
  }
 
89
  .signin-row {
90
  display: flex;
91
  gap: 24px;
92
  margin-bottom: 18px;
93
  }
 
94
  .signin-field {
95
  flex: 1;
96
  display: flex;
97
  flex-direction: column;
98
  }
99
- .signin-field label {
100
- color: #fff;
101
- font-weight: 600;
102
- margin-bottom: 6px;
103
- font-size: 1rem;
104
- letter-spacing: 0.5px;
105
- }
106
- .signin-field input {
107
- background: #fff;
108
- color: #18314a;
109
- border: none;
110
- border-radius: 8px;
111
- padding: 12px 14px;
112
- font-size: 1rem;
113
- margin-bottom: 2px;
114
- box-shadow: 0 1px 4px #0002;
115
- transition: border 0.2s, box-shadow 0.2s;
116
- }
117
- .signin-field input:focus {
118
- outline: 2px solid #1de9b6;
119
- border-color: #1de9b6;
120
- box-shadow: 0 0 0 2px #1de9b688;
121
- }
122
- .signin-field input::placeholder {
123
- color: #b0b8c1;
124
- opacity: 1;
125
- }
126
- .signin-field small.error {
127
- color: #ff5252;
128
- font-size: 0.85rem;
129
- margin-top: 4px;
130
- }
 
 
 
 
 
 
131
  .signin-options-row {
132
  display: flex;
133
  justify-content: space-between;
@@ -135,6 +85,7 @@ form {
135
  margin-bottom: 2vw;
136
  margin-top: -8px;
137
  }
 
138
  .remember-me {
139
  display: flex;
140
  align-items: center;
@@ -142,22 +93,26 @@ form {
142
  font-size: 1rem;
143
  color: #b0b8c1;
144
  }
 
145
  .remember-me input[type="checkbox"] {
146
  accent-color: #38bdf8;
147
  width: 16px;
148
  height: 16px;
149
  }
 
150
  .forgot-password {
151
  font-size: 1rem;
152
  }
 
153
  .forgot-link {
154
  color: #38bdf8;
155
  text-decoration: underline;
156
  font-weight: 500;
157
  cursor: pointer;
158
  }
 
159
  .signin-btn {
160
- width:100%;
161
  background: #18314a;
162
  color: #fff;
163
  border: none;
@@ -169,19 +124,18 @@ form {
169
  cursor: pointer;
170
  transition: background 0.2s, color 0.2s;
171
  }
 
172
  .signin-btn:hover {
173
  background: #38bdf8;
174
  }
 
175
  .signin-footer {
176
  color: #b0b8c1;
177
  font-size: 0.95rem;
178
  text-align: center;
179
  margin-top: 8px;
180
  }
181
- .signin-footer .footer-sep {
182
- display: block;
183
- height: 16px;
184
- }
185
  .signin-footer a {
186
  color: #38bdf8;
187
  text-decoration: underline;
@@ -189,6 +143,7 @@ form {
189
  font-weight: 600;
190
  cursor: pointer;
191
  }
 
192
  .signin-close {
193
  position: absolute;
194
  top: 18px;
@@ -209,43 +164,12 @@ form {
209
  transition: background 0.2s, color 0.2s;
210
  box-shadow: 0 2px 8px #0005;
211
  }
 
212
  .signin-close:hover {
213
  background: #38bdf8;
214
  color: #18314a;
215
  }
216
 
217
- @media (max-width: 700px) {
218
- .signin-box {
219
- padding: 18px 6vw 18px 6vw;
220
- width: 98vw;
221
- }
222
- .signin-header {
223
- flex-direction: column;
224
- align-items: flex-start;
225
- width: 98vw;
226
- padding: 0 0 12px 0;
227
- }
228
- .signin-title {
229
- font-size: 1.3rem;
230
- }
231
- .signin-row {
232
- flex-direction: column;
233
- gap: 0;
234
- }
235
- }
236
- .ai-particle-bg {
237
- position: absolute;
238
- inset: 0;
239
- pointer-events: none;
240
- z-index: 0;
241
- background: url('/assets/particles.svg');
242
- opacity: 0.18;
243
- animation: particleDrift 18s linear infinite;
244
- }
245
- @keyframes particleDrift {
246
- 0% { background-position: 0 0; }
247
- 100% { background-position: 120px 80px; }
248
- }
249
  .spinner {
250
  display: inline-block;
251
  width: 18px;
@@ -259,113 +183,15 @@ form {
259
  }
260
 
261
  @keyframes spin {
262
- 0% { transform: rotate(0deg);}
263
- 100% { transform: rotate(360deg);}
264
- }
265
 
266
- .py-logo-glow {
267
- width: 54px;
268
- height: 54px;
269
- border-radius: 50%;
270
- box-shadow: 0 0 24px #38bdf8, 0 0 12px #13bfa6;
271
- animation: logoGlow 3.5s ease-in-out infinite alternate;
272
- }
273
- @keyframes logoGlow {
274
- 0% { box-shadow: 0 0 12px #38bdf8, 0 0 6px #13bfa6; }
275
- 100% { box-shadow: 0 0 32px #38bdf8, 0 0 18px #13bfa6; }
276
- }
277
- .ai-scan-line {
278
- display: none;
279
- }
280
- .ai-slide-in {
281
- animation: slideInBox 0.8s cubic-bezier(.39,.58,.57,1) both;
282
- }
283
- @keyframes slideInBox {
284
- 0% { opacity: 0; transform: translateY(40px) scale(0.98); }
285
- 100% { opacity: 1; transform: translateY(0) scale(1); }
286
- }
287
- .lock-icon {
288
- color: #38bdf8;
289
- font-size: 1.2em;
290
- margin-right: 8px;
291
- vertical-align: middle;
292
- }
293
- .signin-tagline {
294
- color: #b0b8c1;
295
- font-size: 1.08em;
296
- text-align: center;
297
- margin-bottom: 8px;
298
- font-weight: 600;
299
- }
300
- .signin-welcome {
301
- color: #38bdf8;
302
- font-size: 1.05em;
303
- text-align: center;
304
- margin-bottom: 18px;
305
- font-weight: 600;
306
- }
307
- .switch {
308
- position: relative;
309
- display: inline-block;
310
- width: 38px;
311
- height: 22px;
312
- }
313
- .switch input {
314
- opacity: 0;
315
- width: 0;
316
- height: 0;
317
- }
318
- .slider {
319
- position: absolute;
320
- cursor: pointer;
321
- top: 0; left: 0; right: 0; bottom: 0;
322
- background: #b0b8c1;
323
- border-radius: 22px;
324
- transition: .4s;
325
- }
326
- .switch input:checked + .slider {
327
- background: #38bdf8;
328
- }
329
- .slider:before {
330
- position: absolute;
331
- content: "";
332
- height: 16px;
333
- width: 16px;
334
- left: 3px;
335
- bottom: 3px;
336
- background: #fff;
337
- border-radius: 50%;
338
- transition: .4s;
339
- }
340
- .switch input:checked + .slider:before {
341
- transform: translateX(16px);
342
- }
343
- .signin-hint {
344
- color: #b0b8c1;
345
- font-size: 0.95em;
346
- text-align: right;
347
- margin-bottom: 8px;
348
- }
349
- .ai-pulse {
350
- animation: aiPulseGlow 1.5s infinite alternate;
351
- }
352
- @keyframes aiPulseGlow {
353
- 0% { box-shadow: 0 2px 12px #38bdf844; }
354
- 100% { box-shadow: 0 2px 24px #38bdf888; }
355
- }
356
- .signin-session-tip {
357
- color: #b0b8c1;
358
- font-size: 0.95em;
359
- text-align: center;
360
- margin-bottom: 8px;
361
- }
362
- .signin-security-note {
363
- color: #ff5252;
364
- font-size: 0.95em;
365
- font-weight: 600;
366
- display: block;
367
- margin-bottom: 4px;
368
  }
 
369
  .signin-error-toast {
370
  background: transparent;
371
  color: #ff5252;
@@ -377,14 +203,33 @@ form {
377
  text-align: center;
378
  animation: shakeError 0.3s cubic-bezier(.39,.58,.57,1);
379
  }
 
380
  @keyframes shakeError {
381
- 0% { transform: translateX(0); }
382
- 20% { transform: translateX(-8px); }
383
- 40% { transform: translateX(8px); }
384
- 60% { transform: translateX(-8px); }
385
- 80% { transform: translateX(8px); }
386
- 100% { transform: translateX(0); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
387
  }
 
388
  .forgot-modal-bg {
389
  position: fixed;
390
  inset: 0;
@@ -395,10 +240,17 @@ form {
395
  justify-content: center;
396
  animation: fadeInModalBg 0.4s;
397
  }
 
398
  @keyframes fadeInModalBg {
399
- from { opacity: 0; }
400
- to { opacity: 1; }
 
 
 
 
 
401
  }
 
402
  .forgot-modal {
403
  background: #fff;
404
  border-radius: 18px;
@@ -413,21 +265,32 @@ form {
413
  align-items: center;
414
  animation: fadeInModal 0.4s;
415
  }
 
416
  @keyframes fadeInModal {
417
- from { opacity: 0; transform: scale(0.98); }
418
- to { opacity: 1; transform: scale(1); }
 
 
 
 
 
 
 
419
  }
 
420
  .forgot-modal h3 {
421
  color: #38bdf8;
422
  margin: 12px 0 8px 0;
423
  font-size: 1.4em;
424
  font-weight: 700;
425
  }
 
426
  .forgot-modal p {
427
  color: #23272b;
428
  font-size: 1.08em;
429
  margin-bottom: 18px;
430
  }
 
431
  .forgot-modal input[type="email"] {
432
  background: #f4f6fa;
433
  color: #18314a;
@@ -439,6 +302,7 @@ form {
439
  box-shadow: 0 1px 4px #0002;
440
  width: 100%;
441
  }
 
442
  .modal-close {
443
  width: 23%;
444
  background: #18314a;
@@ -458,49 +322,6 @@ form {
458
  background: #38bdf8;
459
  color: #18314a;
460
  }
461
- .google-signin-row {
462
- width: 100%;
463
- display: flex;
464
- justify-content: center;
465
- margin-bottom: 12px;
466
- }
467
- #google-btn-div {
468
- width: 100%;
469
- display: flex;
470
- justify-content: center;
471
- }
472
- #google-btn-div > div {
473
- width: 100%;
474
- min-width: 0;
475
- border-radius: 8px !important;
476
- padding: 14px 0 !important;
477
- font-size: 1.1rem !important;
478
- font-weight: 700 !important;
479
- box-shadow: 0 2px 8px #0003 !important;
480
- background: #fff !important;
481
- color: #18314a !important;
482
- border: none !important;
483
- margin: 0 !important;
484
- display: flex;
485
- align-items: center;
486
- justify-content: center;
487
- }
488
- .g-signin2 {
489
- width: 100%;
490
- min-width: 0;
491
- border-radius: 8px !important;
492
- padding: 14px 0 !important;
493
- font-size: 1.1rem !important;
494
- font-weight: 700 !important;
495
- box-shadow: 0 2px 8px #0003 !important;
496
- background: #fff !important;
497
- color: #18314a !important;
498
- border: none !important;
499
- margin: 0 !important;
500
- display: flex;
501
- align-items: center;
502
- justify-content: center;
503
- }
504
 
505
  .eye-toggle {
506
  position: absolute;
@@ -518,282 +339,95 @@ form {
518
  opacity: 0.7;
519
  transition: color 0.2s, opacity 0.2s;
520
  }
 
521
  #password {
522
  padding-right: 40px;
523
  }
524
 
525
- .password-label {
526
- display: inline-flex;
527
- align-items: center;
528
- gap: 8px;
 
 
 
 
529
  }
530
- .password-label .eye-toggle {
531
- position: static;
532
- right: auto;
533
- top: auto;
534
- background: none;
535
- border: none;
536
- font-size: 1rem;
537
- color: #888;
538
- opacity: 0.9;
539
- padding: 0 4px;
 
 
540
  }
541
- .password-label .eye-toggle:hover {
542
- color: #555;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
543
  opacity: 1;
544
  }
545
 
546
- /* --- UI DESIGN UPDATE TO MATCH SCREENSHOT --- */
547
- .auth-box {
548
- display: grid;
549
- grid-template-columns: 1fr 1fr;
550
- width: 820px;
551
- max-width: 98vw;
552
- min-width: 340px;
553
- border-radius: 18px;
554
- box-shadow: 0 8px 32px #0002;
555
  overflow: hidden;
556
- background: none;
557
  }
558
 
559
- .panel-left {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
560
  background: #fff;
561
- color: #222;
562
  display: flex;
563
  flex-direction: column;
564
  align-items: center;
565
- justify-content: center;
566
- padding: 48px 32px;
567
  }
568
- .panel-left .signin-title {
569
- font-size: 2.1rem;
570
- font-weight: 800;
571
- margin-bottom: 12px;
572
- text-align: center;
573
- color: #222;
574
- }
575
- .panel-left .signin-desc {
576
- font-size: 1.05rem;
577
- margin-bottom: 24px;
578
- text-align: center;
579
- color: #555;
580
- }
581
- .panel-left .signin-btn {
582
- background: var(--primary-cyan-mid);
583
- color: #fff;
584
- border: none;
585
- border-radius: 999px;
586
- padding: 12px 32px;
587
- font-size: 1.1rem;
588
- font-weight: 700;
589
- cursor: pointer;
590
- transition: background 0.2s, color 0.2s;
591
- box-shadow: 0 2px 8px rgba(0,0,0,0.2);
592
- }
593
- .panel-left .signin-btn:hover {
594
- background: var(--primary-cyan-dark);
595
- color: #fff;
596
- }
597
-
598
- .panel-right {
599
- background: linear-gradient(135deg, var(--primary-cyan-dark) 0%, var(--primary-cyan-mid) 100%);
600
- color: #fff;
601
- display: flex;
602
- flex-direction: column;
603
- align-items: center;
604
- justify-content: center;
605
- padding: 48px 32px;
606
- }
607
- .panel-right .signup-title {
608
- font-size: 2rem;
609
- font-weight: 800;
610
- margin-bottom: 18px;
611
- text-align: left;
612
- color: #fff;
613
- }
614
- .panel-right .signup-desc {
615
- font-size: 1.05rem;
616
- margin-bottom: 24px;
617
- text-align: center;
618
- color: #fff;
619
- }
620
- .panel-right .signup-btn {
621
- background: none;
622
- color: #fff;
623
- border: 2px solid #fff;
624
- border-radius: 999px;
625
- padding: 12px 32px;
626
- font-size: 1.1rem;
627
- font-weight: 700;
628
- cursor: pointer;
629
- transition: background 0.2s, color 0.2s;
630
- box-shadow: none;
631
- }
632
-
633
-
634
- /* Input fields and buttons for left panel */
635
- .panel-left .signin-field input,
636
- .panel-left .signin-field select {
637
- background: #f5f5f5;
638
- color: #222;
639
- border: 1px solid #ddd;
640
- border-radius: 8px;
641
- padding: 12px 14px;
642
- font-size: 1rem;
643
- margin-bottom: 2px;
644
- box-shadow: 0 1px 4px #0001;
645
- transition: border 0.2s, box-shadow 0.2s;
646
- }
647
- .panel-left .signin-field input:focus,
648
- .panel-left .signin-field select:focus {
649
- outline: 2px solid #ff416c;
650
- border-color: #ff416c;
651
- box-shadow: 0 0 0 2px #ff416c44;
652
- }
653
-
654
- /* Social buttons row for left panel */
655
- .panel-left .social-row {
656
- display: flex;
657
- gap: 12px;
658
- margin-bottom: 18px;
659
- justify-content: center;
660
- }
661
- .panel-left .social-btn {
662
- width: 38px;
663
- height: 38px;
664
- border-radius: 50%;
665
- background: #f5f5f5;
666
- display: flex;
667
- align-items: center;
668
- justify-content: center;
669
- font-size: 1.3em;
670
- color: var(--primary-cyan-dark);
671
- border: none;
672
- cursor: pointer;
673
- box-shadow: 0 2px 8px #0001;
674
- transition: background 0.2s, color 0.2s;
675
- }
676
- .panel-left .social-btn:hover {
677
- background: var(--primary-cyan-dark);
678
- color: #fff;
679
- }
680
-
681
- /* Professional shadow and rounded corners for the whole box */
682
- .auth-box {
683
- box-shadow: 0 8px 32px #0002;
684
- border-radius: 18px;
685
- }
686
-
687
- /* Ensure identical size and prevent clipping */
688
- .auth-box {
689
- display: grid;
690
- grid-template-columns: 420px 600px; /* match sign-up columns */
691
- width: 1020px; /* increased to accommodate both panels */
692
- height: 620px; /* increased height to avoid overflow */
693
- max-width: 98vw;
694
- min-width: 340px;
695
- border-radius: 18px;
696
- box-shadow: 0 8px 32px #0002;
697
- overflow: visible; /* ensure no content is clipped */
698
- background: none;
699
- position: relative;
700
- box-sizing: border-box;
701
- }
702
-
703
- /* Reduce right panel width to make it less large */
704
- .auth-box {
705
- display: grid;
706
- grid-template-columns: 360px 840px; /* reduced right panel from 600px to 520px */
707
- width: 850px; /* adjusted total width to match columns */
708
- height: 820px;
709
- max-width: 98vw;
710
- min-width: 340px;
711
- border-radius: 18px;
712
- box-shadow: 0 8px 32px #0002;
713
- overflow: visible; /* ensure no content is clipped */
714
- background: none;
715
- position: relative;
716
- box-sizing: border-box;
717
- justify-content:end;
718
- align-items:baseline;
719
- justify-items:start;
720
- }
721
-
722
- /* Ensure panels occupy full height and use box-sizing */
723
- .panel-left, .panel-right {
724
- height: 100%;
725
- box-sizing: border-box;
726
- }
727
-
728
- /* Card viewport and sliding inner container */
729
- .auth-card {
730
- width: 1140px; /* viewport width remains */
731
- height: 700px; /* increased height to accommodate content and remove scroll */
732
- perspective: none;
733
- overflow: hidden;
734
- border-radius: 12px;
735
- box-shadow: 0 8px 24px rgba(0,0,0,0.12), #ffffff 1px 1px 51px; /* added white glow */
736
- margin: 0 auto;
737
- }
738
-
739
- .card-inner {
740
- width:200%; /* contains both faces side-by-side */
741
- height:100%;
742
- display: flex; /* place front and back side-by-side */
743
- /* much slower transition so flip is clearly visible to users */
744
- transition: transform 0.7s cubic-bezier(.22, .9, .32,1);
745
- will-change: transform;
746
- }
747
-
748
- .auth-card.flipped .card-inner {
749
- transform: translate3d(-50%,0,0);
750
- }
751
- .auth-card:not(.flipped) .card-inner {
752
- transform: translate3d(0,0,0);
753
- }
754
-
755
- /* panel fade with proper syntax */
756
- .card-front .main-panel,
757
- .card-back .main-panel {
758
- transition: opacity 1s ease 0.15s;
759
- }
760
- .card-front[aria-hidden="true"] .main-panel,
761
- .card-back[aria-hidden="true"] .main-panel {
762
- opacity:0;
763
- }
764
- .card-front[aria-hidden="false"] .main-panel,
765
- .card-back[aria-hidden="false"] .main-panel {
766
- opacity:1;
767
- }
768
-
769
- /* faces: each takes 50% of the inner width (i.e. the viewport) */
770
- .card-front, .card-back {
771
- width: 50%;
772
- height: 100%;
773
- flex: 0 0 50%;
774
- box-sizing: border-box;
775
- position: relative; /* allow absolute children inside */
776
- overflow: hidden;
777
- }
778
-
779
- /* layout inside each face: side-panel + main-panel split */
780
- .card-content {
781
- display: flex;
782
- height: 100%;
783
- flex-direction: row-reverse;
784
- }
785
- .side-panel { width: 48%; display:flex; align-items:center; justify-content:center; }
786
- .main-panel { width: 55%; padding: 48px 48px; box-sizing:border-box; background:#fff; overflow: visible; display:flex; flex-direction:column; align-items:center; }
787
-
788
- /* center logo header */
789
- .logo-header {
790
- display: flex;
791
- flex-direction: column;
792
- align-items: center;
793
- justify-content: center;
794
  text-align: center;
795
  margin-bottom: 8px;
796
  }
 
797
  .py-learn-text {
798
  font-size: 3vw;
799
  font-weight: 600;
@@ -801,6 +435,7 @@ form {
801
  font-family: Amonk_Outline;
802
  margin-bottom: 1vw;
803
  }
 
804
  .self-learning-system {
805
  font-size: 1.2vw;
806
  font-weight: bolder;
@@ -808,46 +443,47 @@ form {
808
  margin-top: -.8vw;
809
  }
810
 
811
- .side-right {
812
- background: linear-gradient(135deg,#137ec4 0%,#137ec4 100%);
813
  }
814
- .side-left {
815
- background: linear-gradient(135deg, #137ec4 0%, #38bdf8 100%);
 
816
  }
817
- .side-inner { color:#fff; text-align:center; padding: 32px; }
818
- .side-inner h3 { font-size: 1.6rem; margin-bottom:12px; }
819
- .side-text { opacity: 0.95; }
820
- .panel-cta { background:none; border:2px solid #fff; color:#fff; padding:10px 22px; border-radius:999px; cursor:pointer; margin-top:12px; }
821
 
822
- /* Ensure sign-in text colors for white main panel */
823
- .card-front .main-panel .signin-title { color: #222; }
824
- .card-back .main-panel .signup-title { color: #222; }
 
 
825
 
826
- /* Maintain previous smaller-screen behavior (stack panels) */
827
- @media (max-width: 900px){
828
- .auth-card{ width:92vw; height:auto; }
829
- .card-inner{ width: 200%; /* still double width but we'll stack */ }
830
- .card-content{ flex-direction: column; }
831
- .side-panel{ width:100%; height:200px; }
832
- .main-panel{ width:100%; overflow: visible; }
833
- }
834
 
835
- /* keep existing control styles unchanged (inputs/buttons/etc.) */
 
 
 
 
 
 
 
836
 
837
- /* minimal overwrite of previous rules that used absolute positioning */
838
- .m, .signin-close, .card-back .signin-close { position: absolute; top: 5px; right: 5px; z-index: 10; }
 
 
 
839
 
840
- /* accessibility: hide offscreen face from assistive tech when sliding */
841
  .card-front[aria-hidden="true"], .card-back[aria-hidden="true"] {
842
  pointer-events: none;
843
  }
844
 
845
- /* Change right panel gradient to blue/cyan */
846
  .side-panel.side-right {
847
  background: linear-gradient(135deg, #1d608b 0%, #1d608b 100%);
848
  }
849
 
850
- /* Info box styling for right panel */
851
  .side-info-box {
852
  position: absolute;
853
  top: 164px;
@@ -857,58 +493,13 @@ form {
857
  z-index: 2;
858
  text-align: left;
859
  }
860
- .side-info-title {
861
- font-size: 1.35rem;
862
- font-weight: 800;
863
- color: #fff;
864
- margin-bottom: 6px;
865
- letter-spacing: 0.5px;
866
- }
867
- .side-info-desc {
868
- font-size: 1.08rem;
869
- color: #e0f7fa;
870
- margin-bottom: 8px;
871
- }
872
- .side-info-link {
873
- color: #fff;
874
- font-weight: 700;
875
- text-decoration: underline;
876
- cursor: pointer;
877
- transition: color 0.2s;
878
- }
879
- .side-info-link:hover {
880
- color: #23395d;
881
- }
882
 
883
- /* Ensure info box is above image */
884
  .side-panel {
885
  position: relative;
886
  }
887
 
888
- /* Google button row spacing */
889
- .google-signin-row {
890
- width: 100%;
891
- display: flex;
892
- justify-content: center;
893
- margin-bottom: 12px;
894
- }
895
- #google-btn-div {
896
- width: 100%;
897
- display: flex;
898
- justify-content: center;
899
- }
900
- .g-signin2 {
901
-
902
- margin: 0 auto;
903
- }
904
-
905
- /* Ensure main-panel text is black (readable on white background) */
906
  .card-front .main-panel,
907
  .card-front .main-panel .signin-title,
908
- .card-front .main-panel .signin-tagline,
909
- .card-front .main-panel .signin-welcome,
910
- .card-front .main-panel .signin-session-tip,
911
- .card-front .main-panel .signin-hint,
912
  .card-front .main-panel .signin-footer,
913
  .card-front .main-panel label,
914
  .card-front .main-panel .signin-field small,
@@ -916,34 +507,36 @@ form {
916
  color: #23395d !important;
917
  }
918
 
919
- /* Ensure required field errors are red on the front main panel */
920
- .card-front .main-panel .signin-field small.error {
921
- color: #ff5252 !important;
922
- }
 
 
 
923
 
924
- /* Keep links styled but darken slightly for contrast */
925
- .card-front .main-panel a {
926
- color: #0b57a4 !important;
927
- }
928
  .signin-divider-row {
929
- display: flex;
930
- align-items: center;
931
- justify-content: center;
932
- width:100%;
933
- margin:12px 018px 0;
934
  }
 
935
  .divider {
936
- flex:1;
937
- height:1px;
938
- background: #b0b8c1;
939
- margin:08px;
940
  }
 
941
  .divider-or {
942
- color: #23395d;
943
- font-size:1.08em;
944
- font-weight:600;
945
- margin:08px;
946
  }
 
947
  .google-btn {
948
  width: 100%;
949
  height: 45px;
@@ -963,311 +556,128 @@ form {
963
  gap: 12px;
964
  transition: background 0.2s, color 0.2s;
965
  }
 
966
  .google-btn:hover {
967
  background: #38bdf8;
968
  }
 
969
  .google-logo {
970
- width:24px;
971
- height:24px;
972
- }
973
- .fact-rotator {
974
- font-size:1.18rem;
975
- font-weight:700;
976
- color: #fff;
977
- margin-bottom:8px;
978
- min-height:32px;
979
- text-align: left;
980
- transition: opacity 0.6s;
981
- letter-spacing:0.5px;
982
- animation: fadeFact0.6s;
983
- }
984
- @keyframes fadeFact {
985
- from { opacity:0; }
986
- to { opacity:1; }
987
  }
 
988
  .side-panel.side-left {
989
  position: relative;
990
  overflow: hidden;
991
  background: #1d608b; /* Strong blue for contrast */
992
  min-height: 400px;
993
  }
 
994
  .side-img {
995
- position: absolute;
996
- top:0; left:0;
997
- width:100%; height:100%;
998
- object-fit: cover;
999
- z-index:0;
1000
- }
1001
- .side-bg-shapes {
1002
- position: absolute;
1003
- top:0; left:0; right:0; bottom:0;
1004
- width:100%; height:100%;
1005
- z-index:1;
1006
- pointer-events: none;
1007
- }
1008
- .bg-circle {
1009
- position: absolute;
1010
- border-radius:50%;
1011
- opacity:0.85;
1012
- }
1013
- .circle1 {
1014
- width: 120px;
1015
- height: 120px;
1016
- top: 18px;
1017
- left: 18px;
1018
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1019
- }
1020
- .circle2 {
1021
- width: 80px;
1022
- height: 80px;
1023
- top: 71%;
1024
- left: 113px;
1025
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1026
- }
1027
-
1028
- .circle3 {
1029
- width: 48px;
1030
- height: 48px;
1031
- top: 80%;
1032
- left: 70%;
1033
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1034
- }
1035
-
1036
- .circle4 {
1037
- width: 160px;
1038
- height: 160px;
1039
- top: 70px;
1040
- right: 204px;
1041
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1042
- opacity: 0.7;
1043
  }
1044
 
1045
- .circle5 {
1046
- width: 36px;
1047
- height: 36px;
1048
  top: 30%;
1049
- left: 80%;
1050
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1051
- opacity: 0.6;
1052
- }
1053
-
1054
- .circle6 {
1055
- width: 60px;
1056
- height: 60px;
1057
- bottom: 12%;
1058
- right: 18%;
1059
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1060
- opacity: 0.5;
1061
- }
1062
-
1063
- .circle7 {
1064
- width: 54px;
1065
- height: 54px;
1066
- top: 10%;
1067
- right: 10%;
1068
- background: #18314a;
1069
- opacity: 0.8;
1070
- }
1071
-
1072
- .circle8 {
1073
- width: 32px;
1074
- height: 32px;
1075
- bottom: 20%;
1076
- left: 60%;
1077
- background: #14263c;
1078
- opacity: 0.8;
1079
  }
1080
 
1081
- .circle9 {
1082
- width: 44px;
1083
- height: 44px;
1084
- top: 75%;
1085
- left: 40%;
1086
- background: #18314a;
1087
- opacity: 0.7;
1088
  }
1089
 
1090
- .circle10 {
1091
- width: 28px;
1092
- height: 28px;
1093
- top: 15%;
1094
- left: 60%;
1095
- background: #14263c;
1096
- opacity: 0.9;
1097
  }
1098
 
1099
- .circle11 {
1100
- width: 38px;
1101
- height: 38px;
1102
- bottom: 10%;
1103
- right: 10%;
1104
  background: #18314a;
1105
- opacity: 0.7;
1106
- }
1107
-
1108
- .circle12 {
1109
- width: 22px;
1110
- height: 22px;
1111
- top: 85%;
1112
- right: 20%;
1113
- background: #14263c;
1114
- opacity: 0.8;
1115
- }
1116
-
1117
- /* New large solid circles for sign-in page background */
1118
- .circle-large1 {
1119
- width:220px;
1120
- height:220px;
1121
- top:40px;
1122
- left:60px;
1123
- background: #137ec4;
1124
- opacity:0.45;
1125
- z-index:0;
1126
- }
1127
- .circle-large2 {
1128
- width:180px;
1129
- height:180px;
1130
- bottom:40px;
1131
- right:40px;
1132
- background: #38bdf8;
1133
- opacity:0.35;
1134
- z-index:0;
1135
- }
1136
- .circle-large3 {
1137
- width:140px;
1138
- height:140px;
1139
- top:60%;
1140
- left:60%;
1141
- background: #18314a;
1142
- opacity:0.25;
1143
- z-index:0;
1144
- }
1145
- .circle-large4 {
1146
- width:100px;
1147
- height:100px;
1148
- bottom:11%;
1149
- left:5%;
1150
- background: #13bfa6;
1151
- opacity:0.52;
1152
- z-index:0;
1153
- }
1154
-
1155
- /* Add more white rings for contrast */
1156
- .bg-ring {
1157
- position: absolute;
1158
- border-radius:50%;
1159
- border:6px solid #fff;
1160
- background: none;
1161
- opacity:0.8;
1162
- z-index:1;
1163
- }
1164
- .ring1 { width:90px; height:90px; bottom:24px; left:18px; }
1165
- .ring2 { width:48px; height:48px; top:60px; right:32px; }
1166
- .ring3 { width:72px; height:72px; top:10%; left:70%; border-color: #fff; opacity:0.7; }
1167
- .ring4 { width:110px; height:110px; bottom:2%; right:43%; border-color: #fff; opacity:0.5; }
1168
- .ring5 { width:38px; height:38px; top:75%; left:10%; border-color: #fff; opacity:0.8; }
1169
- .ring6 { width:64px; height:64px; top:49%; right:20%; border-color: #fff; opacity:0.7; }
1170
- .ring7 { width:120px; height:120px; top:14%; left:49%; border-color: #fff; opacity:0.6; }
1171
- .ring8 { width:80px; height:80px; bottom:20%; right:30%; border-color: #fff; opacity:0.7; }
1172
- .ring9 { width:60px; height:60px; top:65%; left:36%; border-color: #fff; opacity:0.7; }
1173
-
1174
- .side-welcome-overlay {
1175
- position: absolute;
1176
- top:30%;
1177
- left:50px;
1178
- width:93%;
1179
- text-align: start;
1180
- z-index:2;
1181
- padding:024px;
1182
- pointer-events: auto;
1183
- }
1184
- .welcome-back-title {
1185
- font-size:2.1rem;
1186
- font-weight:800;
1187
- color: #fff;
1188
- margin-bottom:8px;
1189
-
1190
  }
1191
- .welcome-back-desc {
1192
- font-size:1rem;
1193
- color: #e0f7fa;
1194
- margin-bottom:18px;
1195
 
1196
- }
1197
- .action-btn {
1198
- width:21%;
1199
- background: #18314a;
1200
- color: #fff;
1201
- border: none;
1202
- border-radius:8px;
1203
- padding:14px 0;
1204
- font-size:1.1rem;
1205
- font-weight:700;
1206
- margin-top:18px;
1207
- margin-bottom:0;
1208
- display: inline-block;
1209
- letter-spacing:0.5px;
1210
- box-shadow:02px 8px #0003;
1211
- cursor: pointer;
1212
- transition: background 0.2s, color 0.2s;
1213
- }
1214
- .action-btn:hover {
1215
- background: #38bdf8;
1216
- color: #18314a;
1217
- }
1218
-
1219
- /* Place reveal icon inline when inside the password label */
1220
- .password-label {
1221
- display: inline-flex;
1222
- align-items: center;
1223
- gap: 8px;
1224
- }
1225
 
1226
- /* Wrap for input with trailing icon */
1227
  .input-with-icon {
1228
  position: relative;
1229
  display: flex;
1230
  align-items: center;
1231
  }
1232
- .input-with-icon input {
1233
- width: 100%;
1234
- padding-right: 42px; /* space for the icon */
1235
- }
1236
- .input-with-icon .eye-toggle {
1237
- position: absolute;
1238
- right: 12px;
1239
- top: 50%;
1240
- transform: translateY(-50%);
1241
- background: none;
1242
- border: none;
1243
- font-size: 1.2em;
1244
- color: #888;
1245
- cursor: pointer;
1246
- line-height: 1;
1247
- padding: 0;
1248
- opacity: 0.8;
1249
- }
1250
- .input-with-icon .eye-toggle:hover {
1251
- opacity: 1;
1252
- color: #555;
1253
- }
1254
 
1255
- /* add invalid input red outline */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1256
  .signin-field input.invalid {
1257
  border: 1px solid #ff5252;
1258
  }
1259
 
1260
- /* === Readability enhancements for left image overlay (scoped) === */
1261
- .side-panel.side-left { position: relative; }
1262
- .side-panel.side-left::before {
1263
- content: "";
1264
- position: absolute;
1265
- inset: 0;
1266
- background: linear-gradient(205deg, rgba(5,25,46,0.85) 8%, rgba(5,25,46,0.70) 40%, rgba(5,25,46,0.35) 75%);
1267
- z-index: 1; /* sits above the image, below text card */
1268
- pointer-events: none;
1269
  }
1270
- /* Frosted glass card for the welcome text */
 
 
 
 
 
 
 
 
 
1271
  .side-panel.side-left .side-welcome-overlay {
1272
  position: absolute;
1273
  top: 44%;
@@ -1282,93 +692,43 @@ form {
1282
  box-shadow: 0 4px 20px -4px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(255, 255, 255, 0.05);
1283
  max-width: 429px;
1284
  width: auto;
1285
-
1286
  text-align: center;
1287
  }
1288
- /* Strengthen text contrast */
1289
- .side-panel.side-left .welcome-back-desc,
1290
- .side-panel.side-left .welcome-back-title { text-shadow: 0 2px 6px rgba(0,0,0,0.6); }
1291
- /* Refine button inside overlay only */
1292
- .side-panel.side-left .action-btn {
1293
- background: #38bdf8;
1294
- color: #082a47;
1295
- border: 1px solid #4fd3ff;
1296
- box-shadow: 0 0 0 1px rgba(255,255,255,0.06), 0 6px 18px -4px rgba(0,0,0,0.55);
1297
- padding: 10px 28px;
1298
- width: auto; /* shrink to content */
1299
- margin-top: 4px;
1300
- letter-spacing: 0.6px;
1301
- transition: background .25s, box-shadow .25s, transform .25s;
1302
- }
1303
- .side-panel.side-left .action-btn:hover {
1304
- background: #4fd3ff;
1305
- box-shadow: 0 0 0 1px rgba(255,255,255,0.08), 0 8px 22px -6px rgba(0,0,0,0.6);
1306
- transform: translateY(-2px);
1307
- }
1308
- .side-panel.side-left .action-btn:active { transform: translateY(0); }
1309
- .side-panel.side-left .action-btn:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
1310
- /* Responsive adjustment so card stays readable on narrow screens */
1311
- @media (max-width: 900px) {
1312
- .side-panel.side-left .side-welcome-overlay {
1313
- left: 50%;
1314
- top: auto;
1315
- bottom: 20px;
1316
- transform: translateX(-50%);
1317
- max-width: 92%;
1318
- padding: 18px 20px 22px;
1319
  }
1320
- }
1321
- /* === End readability enhancements === */
1322
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1323
 
1324
- /* === Readability enhancements for right image overlay (scoped) === */
1325
- .side-panel.side-right { position: relative; overflow:hidden; }
1326
- .side-panel.side-right::before {
1327
- content: "";
1328
- position: absolute;
1329
- inset: 0;
1330
- background: linear-gradient(205deg, rgba(5,25,46,0.85) 10%, rgba(5,25,46,0.70) 45%, rgba(5,25,46,0.32) 78%);
1331
- z-index: 1; /* above image, below info card */
1332
- pointer-events: none;
1333
- }
1334
- .side-panel.side-right .side-info-box {
1335
- position: absolute;
1336
- top: 38%;
1337
- left: 7%;
1338
- z-index: 2;
1339
- background: rgba(15, 40, 70, 0.55);
1340
- backdrop-filter: blur(6px) saturate(140%);
1341
- -webkit-backdrop-filter: blur(6px) saturate(140%);
1342
- padding: 20px 24px 24px;
1343
- border-radius: 18px;
1344
- border: 1px solid rgba(255, 255, 255, 0.15);
1345
- box-shadow: 0 4px 20px -4px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(255, 255, 255, 0.05);
1346
- max-width: 469px;
1347
- /* width: auto; */
1348
- text-align: center;
1349
- }
1350
- .side-panel.side-right .welcome-back-title,
1351
- .side-panel.side-right .welcome-back-desc { text-shadow: 0 2px 6px rgba(0,0,0,0.6); }
1352
- .side-panel.side-right .action-btn {
1353
- background: #38bdf8;
1354
- color: #082a47;
1355
- border: 1px solid #4fd3ff;
1356
- box-shadow: 0 0 0 1px rgba(255,255,255,0.06), 0 6px 18px -4px rgba(0,0,0,0.55);
1357
- padding: 10px 28px;
1358
- width: auto;
1359
- margin-top: 4px;
1360
- letter-spacing: 0.6px;
1361
- transition: background .25s, box-shadow .25s, transform .25s;
1362
- }
1363
- .side-panel.side-right .action-btn:hover {
1364
- background: #4fd3ff;
1365
- box-shadow: 0 0 0 1px rgba(255,255,255,0.08), 0 8px 22px -6px rgba(0,0,0,0.6);
1366
- transform: translateY(-2px);
1367
- }
1368
- .side-panel.side-right .action-btn:active { transform: translateY(0); }
1369
- .side-panel.side-right .action-btn:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
1370
  @media (max-width: 900px) {
1371
- .side-panel.side-right .side-info-box {
1372
  left: 50%;
1373
  top: auto;
1374
  bottom: 20px;
@@ -1377,354 +737,23 @@ form {
1377
  padding: 18px 20px 22px;
1378
  }
1379
  }
 
1380
  .side-panel.side-right {
1381
  position: relative;
1382
  overflow: hidden;
1383
- background: #1d608b; /* Strong blue for contrast */
1384
- min-height: 400px;
1385
- }
1386
- .side-img {
1387
- position: absolute;
1388
- top:0; left:0;
1389
- width:100%; height:100%;
1390
- object-fit: cover;
1391
- z-index:0;
1392
- }
1393
- .side-bg-shapes {
1394
- position: absolute;
1395
- top:0; left:0; right:0; bottom:0;
1396
- width:100%; height:100%;
1397
- z-index:1;
1398
- pointer-events: none;
1399
- }
1400
- .bg-circle {
1401
- position: absolute;
1402
- border-radius:50%;
1403
- opacity:0.85;
1404
- }
1405
- .circle1 {
1406
- width: 120px;
1407
- height: 120px;
1408
- top: 18px;
1409
- left: 18px;
1410
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1411
- }
1412
- .circle2 {
1413
- width: 80px;
1414
- height: 80px;
1415
- top: 71%;
1416
- left: 113px;
1417
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1418
- }
1419
-
1420
- .circle3 {
1421
- width: 48px;
1422
- height: 48px;
1423
- top: 80%;
1424
- left: 70%;
1425
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1426
- }
1427
-
1428
- .circle4 {
1429
- width: 160px;
1430
- height: 160px;
1431
- top: 70px;
1432
- right: 204px;
1433
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1434
- opacity: 0.7;
1435
- }
1436
-
1437
- .circle5 {
1438
- width: 36px;
1439
- height: 36px;
1440
- top: 30%;
1441
- left: 80%;
1442
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1443
- opacity: 0.6;
1444
- }
1445
-
1446
- .circle6 {
1447
- width: 60px;
1448
- height: 60px;
1449
- bottom: 12%;
1450
- right: 18%;
1451
- background: linear-gradient(135deg, #38bdf8 80%, #137ec4 100%);
1452
- opacity: 0.5;
1453
  }
1454
 
1455
- .circle7 {
1456
- width: 54px;
1457
- height: 54px;
1458
- top: 10%;
1459
- right: 10%;
1460
- background: #18314a;
1461
- opacity: 0.8;
1462
- }
1463
-
1464
- .circle8 {
1465
- width: 32px;
1466
- height: 32px;
1467
- bottom: 20%;
1468
- left: 60%;
1469
- background: #14263c;
1470
- opacity: 0.8;
1471
- }
1472
-
1473
- .circle9 {
1474
- width: 44px;
1475
- height: 44px;
1476
- top: 75%;
1477
- left: 40%;
1478
- background: #18314a;
1479
- opacity: 0.7;
1480
- }
1481
-
1482
- .circle10 {
1483
- width: 28px;
1484
- height: 28px;
1485
- top: 15%;
1486
- left: 60%;
1487
- background: #14263c;
1488
- opacity: 0.9;
1489
- }
1490
-
1491
- .circle11 {
1492
- width: 38px;
1493
- height: 38px;
1494
- bottom: 10%;
1495
- right: 10%;
1496
- background: #18314a;
1497
- opacity: 0.7;
1498
- }
1499
-
1500
- .circle12 {
1501
- width: 22px;
1502
- height: 22px;
1503
- top: 85%;
1504
- right: 20%;
1505
- background: #14263c;
1506
- opacity: 0.8;
1507
- }
1508
-
1509
- /* New large solid circles for sign-in page background */
1510
- .circle-large1 {
1511
- width:220px;
1512
- height:220px;
1513
- top:40px;
1514
- left:60px;
1515
- background: #137ec4;
1516
- opacity:0.45;
1517
- z-index:0;
1518
- }
1519
- .circle-large2 {
1520
- width:180px;
1521
- height:180px;
1522
- bottom:40px;
1523
- right:40px;
1524
- background: #38bdf8;
1525
- opacity:0.35;
1526
- z-index:0;
1527
- }
1528
- .circle-large3 {
1529
- width:140px;
1530
- height:140px;
1531
- top:60%;
1532
- left:60%;
1533
- background: #18314a;
1534
- opacity:0.25;
1535
- z-index:0;
1536
- }
1537
- .circle-large4 {
1538
- width:100px;
1539
- height:100px;
1540
- bottom:11%;
1541
- left:5%;
1542
- background: #13bfa6;
1543
- opacity:0.52;
1544
- z-index:0;
1545
- }
1546
-
1547
- /* Add more white rings for contrast */
1548
- .bg-ring {
1549
- position: absolute;
1550
- border-radius:50%;
1551
- border:6px solid #fff;
1552
- background: none;
1553
- opacity:0.8;
1554
- z-index:1;
1555
- }
1556
- .ring1 { width:90px; height:90px; bottom:24px; left:18px; }
1557
- .ring2 { width:48px; height:48px; top:60px; right:32px; }
1558
- .ring3 { width:72px; height:72px; top:10%; left:70%; border-color: #fff; opacity:0.7; }
1559
- .ring4 { width:110px; height:110px; bottom:2%; right:43%; border-color: #fff; opacity:0.5; }
1560
- .ring5 { width:38px; height:38px; top:75%; left:10%; border-color: #fff; opacity:0.8; }
1561
- .ring6 { width:64px; height:64px; top:49%; right:20%; border-color: #fff; opacity:0.7; }
1562
- .ring7 { width:120px; height:120px; top:14%; left:49%; border-color: #fff; opacity:0.6; }
1563
- .ring8 { width:80px; height:80px; bottom:20%; right:30%; border-color: #fff; opacity:0.7; }
1564
- .ring9 { width:60px; height:60px; top:65%; left:36%; border-color: #fff; opacity:0.7; }
1565
-
1566
- .side-welcome-overlay {
1567
- position: absolute;
1568
- top:30%;
1569
- left:50px;
1570
- width:93%;
1571
- text-align: start;
1572
- z-index:2;
1573
- padding:024px;
1574
- pointer-events: auto;
1575
- }
1576
- .welcome-back-title {
1577
- font-size:2.1rem;
1578
- font-weight:800;
1579
- color: #fff;
1580
- margin-bottom:8px;
1581
-
1582
- }
1583
- .welcome-back-desc {
1584
- font-size:1rem;
1585
- color: #e0f7fa;
1586
- margin-bottom:18px;
1587
-
1588
- }
1589
- .action-btn {
1590
- width:21%;
1591
- background: #18314a;
1592
- color: #fff;
1593
- border: none;
1594
- border-radius:8px;
1595
- padding:14px 0;
1596
- font-size:1.1rem;
1597
- font-weight:700;
1598
- margin-top:18px;
1599
- margin-bottom:0;
1600
- display: inline-block;
1601
- letter-spacing:0.5px;
1602
- box-shadow:02px 8px #0003;
1603
- cursor: pointer;
1604
- transition: background 0.2s, color 0.2s;
1605
- }
1606
- .action-btn:hover {
1607
- background: #38bdf8;
1608
- color: #18314a;
1609
- }
1610
-
1611
- /* Place reveal icon inline when inside the password label */
1612
- .password-label {
1613
- display: inline-flex;
1614
- align-items: center;
1615
- gap: 8px;
1616
- }
1617
-
1618
- /* Wrap for input with trailing icon */
1619
- .input-with-icon {
1620
- position: relative;
1621
- display: flex;
1622
- align-items: center;
1623
- }
1624
- .input-with-icon input {
1625
- width: 100%;
1626
- padding-right: 42px; /* space for the icon */
1627
- }
1628
- .input-with-icon .eye-toggle {
1629
- position: absolute;
1630
- right: 12px;
1631
- top: 50%;
1632
- transform: translateY(-50%);
1633
- background: none;
1634
- border: none;
1635
- font-size: 1.2em;
1636
- color: #888;
1637
- cursor: pointer;
1638
- line-height: 1;
1639
- padding: 0;
1640
- opacity: 0.8;
1641
- }
1642
- .input-with-icon .eye-toggle:hover {
1643
- opacity: 1;
1644
- color: #555;
1645
- }
1646
-
1647
- /* add invalid input red outline */
1648
- .signin-field input.invalid {
1649
- border: 1px solid #ff5252;
1650
- }
1651
-
1652
- /* === Readability enhancements for left image overlay (scoped) === */
1653
- .side-panel.side-left { position: relative; }
1654
- .side-panel.side-left::before {
1655
- content: "";
1656
- position: absolute;
1657
- inset: 0;
1658
- background: linear-gradient(205deg, rgba(5,25,46,0.85) 8%, rgba(5,25,46,0.70) 40%, rgba(5,25,46,0.35) 75%);
1659
- z-index: 1; /* sits above the image, below text card */
1660
- pointer-events: none;
1661
- }
1662
- /* Frosted glass card for the welcome text */
1663
- .side-panel.side-left .side-welcome-overlay {
1664
  position: absolute;
1665
- top: 44%;
1666
- left: 10%;
1667
- z-index: 2;
1668
- background: rgba(15, 40, 70, 0.55);
1669
- backdrop-filter: blur(6px) saturate(140%);
1670
- -webkit-backdrop-filter: blur(6px) saturate(140%);
1671
- padding: 20px 24px 24px;
1672
- border-radius: 18px;
1673
- border: 1px solid rgba(255, 255, 255, 0.15);
1674
- box-shadow: 0 4px 20px -4px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(255, 255, 255, 0.05);
1675
- max-width: 429px;
1676
- width: auto;
1677
-
1678
- text-align: center;
1679
  }
1680
- /* Strengthen text contrast */
1681
- .side-panel.side-left .welcome-back-desc,
1682
- .side-panel.side-left .welcome-back-title { text-shadow: 0 2px 6px rgba(0,0,0,0.6); }
1683
- /* Refine button inside overlay only */
1684
- .side-panel.side-left .action-btn {
1685
- background: #38bdf8;
1686
- color: #082a47;
1687
- border: 1px solid #4fd3ff;
1688
- box-shadow: 0 0 0 1px rgba(255,255,255,0.06), 0 6px 18px -4px rgba(0,0,0,0.55);
1689
- padding: 10px 28px;
1690
- width: auto; /* shrink to content */
1691
- margin-top: 4px;
1692
- letter-spacing: 0.6px;
1693
- transition: background .25s, box-shadow .25s, transform .25s;
1694
- }
1695
- .side-panel.side-left .action-btn:hover {
1696
- background: #4fd3ff;
1697
- box-shadow: 0 0 0 1px rgba(255,255,255,0.08), 0 8px 22px -6px rgba(0,0,0,0.6);
1698
- transform: translateY(-2px);
1699
- }
1700
- .side-panel.side-left .action-btn:active { transform: translateY(0); }
1701
- .side-panel.side-left .action-btn:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
1702
- /* Responsive adjustment so card stays readable on narrow screens */
1703
- @media (max-width: 900px) {
1704
- .side-panel.side-left .side-welcome-overlay {
1705
- left: 50%;
1706
- top: auto;
1707
- bottom: 20px;
1708
- transform: translateX(-50%);
1709
- max-width: 92%;
1710
- padding: 18px 20px 22px;
1711
- }
1712
- }
1713
- /* === End readability enhancements === */
1714
-
1715
 
1716
- /* === Readability enhancements for right image overlay (scoped) === */
1717
- .side-panel.side-right { position: relative; overflow:hidden; }
1718
- .side-panel.side-right::before {
1719
- content: "";
1720
- position: absolute;
1721
- inset: 0;
1722
- background: linear-gradient(205deg, rgba(5,25,46,0.85) 10%, rgba(5,25,46,0.70) 45%, rgba(5,25,46,0.32) 78%);
1723
- z-index: 1; /* above image, below info card */
1724
- pointer-events: none;
1725
- }
1726
- .side-panel.side-right .side-info-box {
1727
- position: absolute;
1728
  top: 38%;
1729
  left: 7%;
1730
  z-index: 2;
@@ -1736,29 +765,41 @@ form {
1736
  border: 1px solid rgba(255, 255, 255, 0.15);
1737
  box-shadow: 0 4px 20px -4px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(255, 255, 255, 0.05);
1738
  max-width: 469px;
1739
- /* width: auto; */
1740
  text-align: center;
1741
- }
1742
- .side-panel.side-right .welcome-back-title,
1743
- .side-panel.side-right .welcome-back-desc { text-shadow: 0 2px 6px rgba(0,0,0,0.6); }
1744
- .side-panel.side-right .action-btn {
1745
- background: #38bdf8;
1746
- color: #082a47;
1747
- border: 1px solid #4fd3ff;
1748
- box-shadow: 0 0 0 1px rgba(255,255,255,0.06), 0 6px 18px -4px rgba(0,0,0,0.55);
1749
- padding: 10px 28px;
1750
- width: auto;
1751
- margin-top: 4px;
1752
- letter-spacing: 0.6px;
1753
- transition: background .25s, box-shadow .25s, transform .25s;
1754
- }
1755
- .side-panel.side-right .action-btn:hover {
1756
- background: #4fd3ff;
1757
- box-shadow: 0 0 0 1px rgba(255,255,255,0.08), 0 8px 22px -6px rgba(0,0,0,0.6);
1758
- transform: translateY(-2px);
1759
- }
1760
- .side-panel.side-right .action-btn:active { transform: translateY(0); }
1761
- .side-panel.side-right .action-btn:focus-visible { outline: 2px solid #fff; outline-offset: 3px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
1762
  @media (max-width: 900px) {
1763
  .side-panel.side-right .side-info-box {
1764
  left: 50%;
@@ -1770,16 +811,21 @@ form {
1770
  }
1771
  }
1772
 
1773
- /* Top-left brand logo inside popup */
1774
  .signin-brand-logo {
1775
  position: absolute;
1776
  top: 18px;
1777
  left: 24px;
1778
  z-index: 1200;
1779
-
1780
  }
1781
- .signin-brand-logo .brand-link { display:flex; align-items:center; gap:10px; text-decoration:none; }
1782
- .brand-logo-img { /* width: 42px; */
 
 
 
 
 
 
 
1783
  height: 42px;
1784
  display: block;
1785
  filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.4));
@@ -1789,16 +835,37 @@ form {
1789
  border-radius: 1vw;
1790
  margin: 0.5vw;
1791
  }
1792
- .brand-text { font-size:1.05rem; font-weight:700; letter-spacing:0.6px; color:#fff; text-shadow:0 2px 6px rgba(0,0,0,0.6); font-family:inherit; }
1793
- .signin-brand-logo:hover .brand-text { color:#4fd3ff; }
1794
 
1795
- @media (max-width:700px){
1796
- .signin-brand-logo { top:10px; left:10px; padding:6px 12px 6px 8px; }
1797
- .brand-logo-img { width:34px; height:34px; }
1798
- .brand-text { font-size:0.9rem; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1799
  }
1800
 
1801
- /* Bottom-right watermark */
1802
  .signin-watermark {
1803
  text-decoration: none;
1804
  position: absolute;
@@ -1808,14 +875,17 @@ form {
1808
  font-weight: 600;
1809
  letter-spacing: 0.5px;
1810
  color: #ffffff;
1811
-
1812
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
1813
  }
1814
- @media (max-width:700px){
1815
- .signin-watermark { bottom:8px; right:12px; font-size:0.65rem; }
 
 
 
 
 
1816
  }
1817
 
1818
- /* Social Media Icons Top-Right for Sign-In (Home Style) */
1819
  .social-icons.signin-social-icons {
1820
  position: absolute;
1821
  top: 18px;
@@ -1824,66 +894,77 @@ form {
1824
  display: flex;
1825
  gap: 18px;
1826
  }
1827
- .social-icons.signin-social-icons .social-icon {
1828
- width: 42px;
1829
- height: 42px;
1830
- display: inline-flex;
1831
- align-items: center;
1832
- justify-content: center;
1833
- border-radius: 50%;
1834
- background-color: #fff;
1835
- color: #38bdf8;
1836
- font-size: 18px;
1837
- box-shadow: 0 0 0 1px #214055, 0 4px 14px #0006;
1838
- transition: background-color 0.25s, color 0.25s, transform 0.25s, box-shadow 0.25s;
1839
- text-decoration: none;
1840
- }
1841
- .social-icons.signin-social-icons .social-icon.facebook {
1842
- color: #1877f2;
1843
- }
1844
- .social-icons.signin-social-icons .social-icon.youtube {
1845
- color: #ff0000;
1846
- }
1847
- .social-icons.signin-social-icons .social-icon.linkedin {
1848
- color: #0a66c2;
1849
- }
1850
- .social-icons.signin-social-icons .social-icon.instagram {
1851
- color: #fd5949;
1852
- }
1853
- .social-icons.signin-social-icons .social-icon.facebook:hover {
1854
- background-color: #1877f2;
1855
- color: #fff;
1856
- }
1857
- .social-icons.signin-social-icons .social-icon.youtube:hover {
1858
- background-color: #ff0000;
1859
- color: #fff;
1860
- }
1861
- .social-icons.signin-social-icons .social-icon.linkedin:hover {
1862
- background-color: #0a66c2;
1863
- color: #fff;
1864
- }
1865
- .social-icons.signin-social-icons .social-icon.instagram:hover {
1866
- background: radial-gradient(circle at 30% 110%, #fdf497 0%, #fd5949 45%, #d6249f 60%, #285aeb 90%);
1867
- color: #fff;
1868
- filter: brightness(1.15);
1869
- box-shadow: 0 6px 22px rgba(253, 89, 73, .6);
1870
- }
1871
- .social-icons.signin-social-icons .social-icon.website:hover {
1872
- background-color: #009688;
1873
- color: #fff;
1874
- transform: translateY(-4px);
1875
- box-shadow: 0 6px 20px #00968888, 0 0 0 2px #009688 inset;
1876
- }
1877
- @media (max-width:700px){
 
 
 
 
 
 
 
 
 
 
 
1878
  .social-icons.signin-social-icons {
1879
  top: 10px;
1880
  right: 10px;
1881
  gap: 10px;
1882
  }
1883
- .social-icons.signin-social-icons .social-icon {
1884
- width: 28px;
1885
- height: 28px;
1886
- font-size: 1em;
1887
- }
1888
- }
1889
 
 
 
 
 
 
 
 
15
  backdrop-filter: blur(16px);
16
  }
17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  .signin-title {
19
  color: #38bdf8;
20
  font-size: 2.1rem;
 
24
  letter-spacing: 1px;
25
  text-shadow: 0 2px 8px #0008;
26
  }
27
+
28
  form {
29
  width: 100%;
30
  }
31
+
32
  .signin-row {
33
  display: flex;
34
  gap: 24px;
35
  margin-bottom: 18px;
36
  }
37
+
38
  .signin-field {
39
  flex: 1;
40
  display: flex;
41
  flex-direction: column;
42
  }
43
+
44
+ .signin-field label {
45
+ color: #fff;
46
+ font-weight: 600;
47
+ margin-bottom: 6px;
48
+ font-size: 1rem;
49
+ letter-spacing: 0.5px;
50
+ }
51
+
52
+ .signin-field input {
53
+ background: #fff;
54
+ color: #18314a;
55
+ border: none;
56
+ border-radius: 8px;
57
+ padding: 12px 14px; /* KEEP THIS */
58
+ font-size: 1rem; /* KEEP THIS */
59
+ margin-bottom: 2px;
60
+ box-shadow: 0 1px 4px #0002;
61
+ transition: border 0.2s, box-shadow 0.2s;
62
+ }
63
+
64
+ .signin-field input:focus {
65
+ outline: 2px solid #1de9b6;
66
+ border-color: #1de9b6;
67
+ box-shadow: 0 0 0 2px #1de9b688;
68
+ }
69
+
70
+ .signin-field input::placeholder {
71
+ color: #b0b8c1;
72
+ opacity: 1;
73
+ }
74
+
75
+ .signin-field small.error {
76
+ color: #ff5252;
77
+ font-size: 0.85rem;
78
+ margin-top: 4px;
79
+ }
80
+
81
  .signin-options-row {
82
  display: flex;
83
  justify-content: space-between;
 
85
  margin-bottom: 2vw;
86
  margin-top: -8px;
87
  }
88
+
89
  .remember-me {
90
  display: flex;
91
  align-items: center;
 
93
  font-size: 1rem;
94
  color: #b0b8c1;
95
  }
96
+
97
  .remember-me input[type="checkbox"] {
98
  accent-color: #38bdf8;
99
  width: 16px;
100
  height: 16px;
101
  }
102
+
103
  .forgot-password {
104
  font-size: 1rem;
105
  }
106
+
107
  .forgot-link {
108
  color: #38bdf8;
109
  text-decoration: underline;
110
  font-weight: 500;
111
  cursor: pointer;
112
  }
113
+
114
  .signin-btn {
115
+ width: 100%;
116
  background: #18314a;
117
  color: #fff;
118
  border: none;
 
124
  cursor: pointer;
125
  transition: background 0.2s, color 0.2s;
126
  }
127
+
128
  .signin-btn:hover {
129
  background: #38bdf8;
130
  }
131
+
132
  .signin-footer {
133
  color: #b0b8c1;
134
  font-size: 0.95rem;
135
  text-align: center;
136
  margin-top: 8px;
137
  }
138
+
 
 
 
139
  .signin-footer a {
140
  color: #38bdf8;
141
  text-decoration: underline;
 
143
  font-weight: 600;
144
  cursor: pointer;
145
  }
146
+
147
  .signin-close {
148
  position: absolute;
149
  top: 18px;
 
164
  transition: background 0.2s, color 0.2s;
165
  box-shadow: 0 2px 8px #0005;
166
  }
167
+
168
  .signin-close:hover {
169
  background: #38bdf8;
170
  color: #18314a;
171
  }
172
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  .spinner {
174
  display: inline-block;
175
  width: 18px;
 
183
  }
184
 
185
  @keyframes spin {
186
+ 0% {
187
+ transform: rotate(0deg);
188
+ }
189
 
190
+ 100% {
191
+ transform: rotate(360deg);
192
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  }
194
+
195
  .signin-error-toast {
196
  background: transparent;
197
  color: #ff5252;
 
203
  text-align: center;
204
  animation: shakeError 0.3s cubic-bezier(.39,.58,.57,1);
205
  }
206
+
207
  @keyframes shakeError {
208
+ 0% {
209
+ transform: translateX(0);
210
+ }
211
+
212
+ 20% {
213
+ transform: translateX(-8px);
214
+ }
215
+
216
+ 40% {
217
+ transform: translateX(8px);
218
+ }
219
+
220
+ 60% {
221
+ transform: translateX(-8px);
222
+ }
223
+
224
+ 80% {
225
+ transform: translateX(8px);
226
+ }
227
+
228
+ 100% {
229
+ transform: translateX(0);
230
+ }
231
  }
232
+
233
  .forgot-modal-bg {
234
  position: fixed;
235
  inset: 0;
 
240
  justify-content: center;
241
  animation: fadeInModalBg 0.4s;
242
  }
243
+
244
  @keyframes fadeInModalBg {
245
+ from {
246
+ opacity: 0;
247
+ }
248
+
249
+ to {
250
+ opacity: 1;
251
+ }
252
  }
253
+
254
  .forgot-modal {
255
  background: #fff;
256
  border-radius: 18px;
 
265
  align-items: center;
266
  animation: fadeInModal 0.4s;
267
  }
268
+
269
  @keyframes fadeInModal {
270
+ from {
271
+ opacity: 0;
272
+ transform: scale(0.98);
273
+ }
274
+
275
+ to {
276
+ opacity: 1;
277
+ transform: scale(1);
278
+ }
279
  }
280
+
281
  .forgot-modal h3 {
282
  color: #38bdf8;
283
  margin: 12px 0 8px 0;
284
  font-size: 1.4em;
285
  font-weight: 700;
286
  }
287
+
288
  .forgot-modal p {
289
  color: #23272b;
290
  font-size: 1.08em;
291
  margin-bottom: 18px;
292
  }
293
+
294
  .forgot-modal input[type="email"] {
295
  background: #f4f6fa;
296
  color: #18314a;
 
302
  box-shadow: 0 1px 4px #0002;
303
  width: 100%;
304
  }
305
+
306
  .modal-close {
307
  width: 23%;
308
  background: #18314a;
 
322
  background: #38bdf8;
323
  color: #18314a;
324
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
325
 
326
  .eye-toggle {
327
  position: absolute;
 
339
  opacity: 0.7;
340
  transition: color 0.2s, opacity 0.2s;
341
  }
342
+
343
  #password {
344
  padding-right: 40px;
345
  }
346
 
347
+ .auth-card {
348
+ width: 1140px; /* viewport width remains */
349
+ height: 700px; /* increased height to accommodate content and remove scroll */
350
+ perspective: none;
351
+ overflow: hidden;
352
+ border-radius: 12px;
353
+ box-shadow: 0 8px 24px rgba(0,0,0,0.12), #ffffff 1px 1px 51px; /* added white glow */
354
+ margin: 0 auto;
355
  }
356
+
357
+ .card-inner {
358
+ width: 200%; /* contains both faces side-by-side */
359
+ height: 100%;
360
+ display: flex; /* place front and back side-by-side */
361
+ /* much slower transition so flip is clearly visible to users */
362
+ transition: transform 0.7s cubic-bezier(.22, .9, .32,1);
363
+ will-change: transform;
364
+ }
365
+
366
+ .auth-card.flipped .card-inner {
367
+ transform: translate3d(-50%,0,0);
368
  }
369
+
370
+ .auth-card:not(.flipped) .card-inner {
371
+ transform: translate3d(0,0,0);
372
+ }
373
+
374
+ .card-front .main-panel,
375
+ .card-back .main-panel {
376
+ transition: opacity 1s ease 0.15s;
377
+ }
378
+
379
+ .card-front[aria-hidden="true"] .main-panel,
380
+ .card-back[aria-hidden="true"] .main-panel {
381
+ opacity: 0;
382
+ }
383
+
384
+ .card-front[aria-hidden="false"] .main-panel,
385
+ .card-back[aria-hidden="false"] .main-panel {
386
  opacity: 1;
387
  }
388
 
389
+ .card-front, .card-back {
390
+ width: 50%;
391
+ height: 100%;
392
+ flex: 0 0 50%;
393
+ box-sizing: border-box;
394
+ position: relative; /* allow absolute children inside */
 
 
 
395
  overflow: hidden;
 
396
  }
397
 
398
+ .card-content {
399
+ display: flex;
400
+ height: 100%;
401
+ flex-direction: row-reverse;
402
+ }
403
+
404
+ .side-panel {
405
+ width: 48%;
406
+ display: flex;
407
+ align-items: center;
408
+ justify-content: center;
409
+ }
410
+
411
+ .main-panel {
412
+ width: 55%;
413
+ padding: 48px 48px;
414
+ box-sizing: border-box;
415
  background: #fff;
416
+ overflow: visible;
417
  display: flex;
418
  flex-direction: column;
419
  align-items: center;
 
 
420
  }
421
+
422
+ .logo-header {
423
+ display: flex;
424
+ flex-direction: column;
425
+ align-items: center;
426
+ justify-content: center;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
  text-align: center;
428
  margin-bottom: 8px;
429
  }
430
+
431
  .py-learn-text {
432
  font-size: 3vw;
433
  font-weight: 600;
 
435
  font-family: Amonk_Outline;
436
  margin-bottom: 1vw;
437
  }
438
+
439
  .self-learning-system {
440
  font-size: 1.2vw;
441
  font-weight: bolder;
 
443
  margin-top: -.8vw;
444
  }
445
 
446
+ .card-front .main-panel .signin-title {
447
+ color: #222;
448
  }
449
+
450
+ .card-back .main-panel .signup-title {
451
+ color: #222;
452
  }
 
 
 
 
453
 
454
+ @media (max-width: 900px) {
455
+ .auth-card {
456
+ width: 92vw;
457
+ height: auto;
458
+ }
459
 
460
+ .card-inner {
461
+ width: 200%; /* still double width but we'll stack */
462
+ }
 
 
 
 
 
463
 
464
+ .card-content {
465
+ flex-direction: column;
466
+ }
467
+
468
+ .side-panel {
469
+ width: 100%;
470
+ height: 200px;
471
+ }
472
 
473
+ .main-panel {
474
+ width: 100%;
475
+ overflow: visible;
476
+ }
477
+ }
478
 
 
479
  .card-front[aria-hidden="true"], .card-back[aria-hidden="true"] {
480
  pointer-events: none;
481
  }
482
 
 
483
  .side-panel.side-right {
484
  background: linear-gradient(135deg, #1d608b 0%, #1d608b 100%);
485
  }
486
 
 
487
  .side-info-box {
488
  position: absolute;
489
  top: 164px;
 
493
  z-index: 2;
494
  text-align: left;
495
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
496
 
 
497
  .side-panel {
498
  position: relative;
499
  }
500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
501
  .card-front .main-panel,
502
  .card-front .main-panel .signin-title,
 
 
 
 
503
  .card-front .main-panel .signin-footer,
504
  .card-front .main-panel label,
505
  .card-front .main-panel .signin-field small,
 
507
  color: #23395d !important;
508
  }
509
 
510
+ .card-front .main-panel .signin-field small.error {
511
+ color: #ff5252 !important;
512
+ }
513
+
514
+ .card-front .main-panel a {
515
+ color: #0b57a4 !important;
516
+ }
517
 
 
 
 
 
518
  .signin-divider-row {
519
+ display: flex;
520
+ align-items: center;
521
+ justify-content: center;
522
+ width: 100%;
523
+ margin: 12px 018px 0;
524
  }
525
+
526
  .divider {
527
+ flex: 1;
528
+ height: 1px;
529
+ background: #b0b8c1;
530
+ margin: 08px;
531
  }
532
+
533
  .divider-or {
534
+ color: #23395d;
535
+ font-size: 1.08em;
536
+ font-weight: 600;
537
+ margin: 08px;
538
  }
539
+
540
  .google-btn {
541
  width: 100%;
542
  height: 45px;
 
556
  gap: 12px;
557
  transition: background 0.2s, color 0.2s;
558
  }
559
+
560
  .google-btn:hover {
561
  background: #38bdf8;
562
  }
563
+
564
  .google-logo {
565
+ width: 24px;
566
+ height: 24px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
567
  }
568
+
569
  .side-panel.side-left {
570
  position: relative;
571
  overflow: hidden;
572
  background: #1d608b; /* Strong blue for contrast */
573
  min-height: 400px;
574
  }
575
+
576
  .side-img {
577
+ position: absolute;
578
+ top: 0;
579
+ left: 0;
580
+ width: 100%;
581
+ height: 100%;
582
+ object-fit: cover;
583
+ z-index: 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
584
  }
585
 
586
+ .side-welcome-overlay {
587
+ position: absolute;
 
588
  top: 30%;
589
+ left: 50px;
590
+ width: 93%;
591
+ text-align: start;
592
+ z-index: 2;
593
+ padding: 024px;
594
+ pointer-events: auto;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
595
  }
596
 
597
+ .welcome-back-title {
598
+ font-size: 2.1rem;
599
+ font-weight: 800;
600
+ color: #fff;
601
+ margin-bottom: 8px;
 
 
602
  }
603
 
604
+ .welcome-back-desc {
605
+ font-size: 1rem;
606
+ color: #e0f7fa;
607
+ margin-bottom: 18px;
 
 
 
608
  }
609
 
610
+ .action-btn {
611
+ width: 21%;
 
 
 
612
  background: #18314a;
613
+ color: #fff;
614
+ border: none;
615
+ border-radius: 8px;
616
+ padding: 14px 0;
617
+ font-size: 1.1rem;
618
+ font-weight: 700;
619
+ margin-top: 18px;
620
+ margin-bottom: 0;
621
+ display: inline-block;
622
+ letter-spacing: 0.5px;
623
+ box-shadow: 02px 8px #0003;
624
+ cursor: pointer;
625
+ transition: background 0.2s, color 0.2s;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
626
  }
 
 
 
 
627
 
628
+ .action-btn:hover {
629
+ background: #38bdf8;
630
+ color: #18314a;
631
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
632
 
 
633
  .input-with-icon {
634
  position: relative;
635
  display: flex;
636
  align-items: center;
637
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
638
 
639
+ .input-with-icon input {
640
+ width: 100%;
641
+ padding-right: 42px; /* space for the icon */
642
+ }
643
+
644
+ .input-with-icon .eye-toggle {
645
+ position: absolute;
646
+ right: 12px;
647
+ top: 50%;
648
+ transform: translateY(-50%);
649
+ background: none;
650
+ border: none;
651
+ font-size: 1.2em;
652
+ color: #888;
653
+ cursor: pointer;
654
+ line-height: 1;
655
+ padding: 0;
656
+ opacity: 0.8;
657
+ }
658
+
659
+ .input-with-icon .eye-toggle:hover {
660
+ opacity: 1;
661
+ color: #555;
662
+ }
663
+
664
  .signin-field input.invalid {
665
  border: 1px solid #ff5252;
666
  }
667
 
668
+ .side-panel.side-left {
669
+ position: relative;
 
 
 
 
 
 
 
670
  }
671
+
672
+ .side-panel.side-left::before {
673
+ content: "";
674
+ position: absolute;
675
+ inset: 0;
676
+ background: linear-gradient(205deg, rgba(5,25,46,0.85) 8%, rgba(5,25,46,0.70) 40%, rgba(5,25,46,0.35) 75%);
677
+ z-index: 1; /* sits above the image, below text card */
678
+ pointer-events: none;
679
+ }
680
+
681
  .side-panel.side-left .side-welcome-overlay {
682
  position: absolute;
683
  top: 44%;
 
692
  box-shadow: 0 4px 20px -4px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(255, 255, 255, 0.05);
693
  max-width: 429px;
694
  width: auto;
 
695
  text-align: center;
696
  }
697
+
698
+ .side-panel.side-left .welcome-back-desc,
699
+ .side-panel.side-left .welcome-back-title {
700
+ text-shadow: 0 2px 6px rgba(0,0,0,0.6);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
701
  }
 
 
702
 
703
+ .side-panel.side-left .action-btn {
704
+ background: #38bdf8;
705
+ color: #082a47;
706
+ border: 1px solid #4fd3ff;
707
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.06), 0 6px 18px -4px rgba(0,0,0,0.55);
708
+ padding: 10px 28px;
709
+ width: auto; /* shrink to content */
710
+ margin-top: 4px;
711
+ letter-spacing: 0.6px;
712
+ transition: background .25s, box-shadow .25s, transform .25s;
713
+ }
714
+
715
+ .side-panel.side-left .action-btn:hover {
716
+ background: #4fd3ff;
717
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.08), 0 8px 22px -6px rgba(0,0,0,0.6);
718
+ transform: translateY(-2px);
719
+ }
720
+
721
+ .side-panel.side-left .action-btn:active {
722
+ transform: translateY(0);
723
+ }
724
+
725
+ .side-panel.side-left .action-btn:focus-visible {
726
+ outline: 2px solid #fff;
727
+ outline-offset: 3px;
728
+ }
729
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
730
  @media (max-width: 900px) {
731
+ .side-panel.side-left .side-welcome-overlay {
732
  left: 50%;
733
  top: auto;
734
  bottom: 20px;
 
737
  padding: 18px 20px 22px;
738
  }
739
  }
740
+
741
  .side-panel.side-right {
742
  position: relative;
743
  overflow: hidden;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
744
  }
745
 
746
+ .side-panel.side-right::before {
747
+ content: "";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
748
  position: absolute;
749
+ inset: 0;
750
+ background: linear-gradient(205deg, rgba(5,25,46,0.85) 10%, rgba(5,25,46,0.70) 45%, rgba(5,25,46,0.32) 78%);
751
+ z-index: 1; /* above image, below info card */
752
+ pointer-events: none;
 
 
 
 
 
 
 
 
 
 
753
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
 
755
+ .side-panel.side-right .side-info-box {
756
+ position: absolute;
 
 
 
 
 
 
 
 
 
 
757
  top: 38%;
758
  left: 7%;
759
  z-index: 2;
 
765
  border: 1px solid rgba(255, 255, 255, 0.15);
766
  box-shadow: 0 4px 20px -4px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(255, 255, 255, 0.05);
767
  max-width: 469px;
 
768
  text-align: center;
769
+ }
770
+
771
+ .side-panel.side-right .welcome-back-title,
772
+ .side-panel.side-right .welcome-back-desc {
773
+ text-shadow: 0 2px 6px rgba(0,0,0,0.6);
774
+ }
775
+
776
+ .side-panel.side-right .action-btn {
777
+ background: #38bdf8;
778
+ color: #082a47;
779
+ border: 1px solid #4fd3ff;
780
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.06), 0 6px 18px -4px rgba(0,0,0,0.55);
781
+ padding: 10px 28px;
782
+ width: auto;
783
+ margin-top: 4px;
784
+ letter-spacing: 0.6px;
785
+ transition: background .25s, box-shadow .25s, transform .25s;
786
+ }
787
+
788
+ .side-panel.side-right .action-btn:hover {
789
+ background: #4fd3ff;
790
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.08), 0 8px 22px -6px rgba(0,0,0,0.6);
791
+ transform: translateY(-2px);
792
+ }
793
+
794
+ .side-panel.side-right .action-btn:active {
795
+ transform: translateY(0);
796
+ }
797
+
798
+ .side-panel.side-right .action-btn:focus-visible {
799
+ outline: 2px solid #fff;
800
+ outline-offset: 3px;
801
+ }
802
+
803
  @media (max-width: 900px) {
804
  .side-panel.side-right .side-info-box {
805
  left: 50%;
 
811
  }
812
  }
813
 
 
814
  .signin-brand-logo {
815
  position: absolute;
816
  top: 18px;
817
  left: 24px;
818
  z-index: 1200;
 
819
  }
820
+
821
+ .signin-brand-logo .brand-link {
822
+ display: flex;
823
+ align-items: center;
824
+ gap: 10px;
825
+ text-decoration: none;
826
+ }
827
+
828
+ .brand-logo-img {
829
  height: 42px;
830
  display: block;
831
  filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.4));
 
835
  border-radius: 1vw;
836
  margin: 0.5vw;
837
  }
 
 
838
 
839
+ .brand-text {
840
+ font-size: 1.05rem;
841
+ font-weight: 700;
842
+ letter-spacing: 0.6px;
843
+ color: #fff;
844
+ text-shadow: 0 2px 6px rgba(0,0,0,0.6);
845
+ font-family: inherit;
846
+ }
847
+
848
+ .signin-brand-logo:hover .brand-text {
849
+ color: #4fd3ff;
850
+ }
851
+
852
+ @media (max-width:700px) {
853
+ .signin-brand-logo {
854
+ top: 10px;
855
+ left: 10px;
856
+ padding: 6px 12px 6px 8px;
857
+ }
858
+
859
+ .brand-logo-img {
860
+ width: 34px;
861
+ height: 34px;
862
+ }
863
+
864
+ .brand-text {
865
+ font-size: 0.9rem;
866
+ }
867
  }
868
 
 
869
  .signin-watermark {
870
  text-decoration: none;
871
  position: absolute;
 
875
  font-weight: 600;
876
  letter-spacing: 0.5px;
877
  color: #ffffff;
 
878
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
879
  }
880
+
881
+ @media (max-width:700px) {
882
+ .signin-watermark {
883
+ bottom: 8px;
884
+ right: 12px;
885
+ font-size: 0.65rem;
886
+ }
887
  }
888
 
 
889
  .social-icons.signin-social-icons {
890
  position: absolute;
891
  top: 18px;
 
894
  display: flex;
895
  gap: 18px;
896
  }
897
+
898
+ .social-icons.signin-social-icons .social-icon {
899
+ width: 42px;
900
+ height: 42px;
901
+ display: inline-flex;
902
+ align-items: center;
903
+ justify-content: center;
904
+ border-radius: 50%;
905
+ background-color: #fff;
906
+ color: #38bdf8;
907
+ font-size: 18px;
908
+ box-shadow: 0 0 0 1px #214055, 0 4px 14px #0006;
909
+ transition: background-color 0.25s, color 0.25s, transform 0.25s, box-shadow 0.25s;
910
+ text-decoration: none;
911
+ }
912
+
913
+ .social-icons.signin-social-icons .social-icon.facebook {
914
+ color: #1877f2;
915
+ }
916
+
917
+ .social-icons.signin-social-icons .social-icon.youtube {
918
+ color: #ff0000;
919
+ }
920
+
921
+ .social-icons.signin-social-icons .social-icon.linkedin {
922
+ color: #0a66c2;
923
+ }
924
+
925
+ .social-icons.signin-social-icons .social-icon.instagram {
926
+ color: #fd5949;
927
+ }
928
+
929
+ .social-icons.signin-social-icons .social-icon.facebook:hover {
930
+ background-color: #1877f2;
931
+ color: #fff;
932
+ }
933
+
934
+ .social-icons.signin-social-icons .social-icon.youtube:hover {
935
+ background-color: #ff0000;
936
+ color: #fff;
937
+ }
938
+
939
+ .social-icons.signin-social-icons .social-icon.linkedin:hover {
940
+ background-color: #0a66c2;
941
+ color: #fff;
942
+ }
943
+
944
+ .social-icons.signin-social-icons .social-icon.instagram:hover {
945
+ background: radial-gradient(circle at 30% 110%, #fdf497 0%, #fd5949 45%, #d6249f 60%, #285aeb 90%);
946
+ color: #fff;
947
+ filter: brightness(1.15);
948
+ box-shadow: 0 6px 22px rgba(253, 89, 73, .6);
949
+ }
950
+
951
+ .social-icons.signin-social-icons .social-icon.website:hover {
952
+ background-color: #009688;
953
+ color: #fff;
954
+ transform: translateY(-4px);
955
+ box-shadow: 0 6px 20px #00968888, 0 0 0 2px #009688 inset;
956
+ }
957
+
958
+ @media (max-width:700px) {
959
  .social-icons.signin-social-icons {
960
  top: 10px;
961
  right: 10px;
962
  gap: 10px;
963
  }
 
 
 
 
 
 
964
 
965
+ .social-icons.signin-social-icons .social-icon {
966
+ width: 28px;
967
+ height: 28px;
968
+ font-size: 1em;
969
+ }
970
+ }
src/app/sign-up/sign-up.component.css CHANGED
@@ -4,60 +4,6 @@
4
  min-height: 100vh;
5
  }
6
 
7
- .signup-bg {
8
- min-height: 100vh;
9
- display: flex;
10
- align-items: center;
11
- justify-content: center;
12
- background: #f7fafd;
13
- }
14
-
15
- .signup-container {
16
- display: flex;
17
- width: 100vw;
18
- max-width: 1200px;
19
- min-height: 600px;
20
- border-radius: 0;
21
- box-shadow: none;
22
- overflow: hidden;
23
- align-items: center;
24
- justify-content: center;
25
- }
26
-
27
- .signup-panel-right {
28
- display: flex;
29
- align-items: center;
30
- justify-content: center;
31
- padding: 32px 0;
32
- }
33
-
34
- .signup-panel-right {
35
- flex: 1 1 0;
36
- background: #f7fafd;
37
- }
38
-
39
- .create-card {
40
- background: #fff;
41
- width: 90%;
42
- max-width: 540px;
43
- display: flex;
44
- flex-direction: column;
45
- align-items: center;
46
- padding: 38px 38px 28px 38px;
47
- border-radius: 18px;
48
- box-shadow: 0 12px 48px rgba(2, 6, 23, 0.18), 0 0 0 2px rgba(56, 189, 248, 0.08);
49
- margin: 0 auto;
50
- }
51
-
52
- .create-title {
53
- font-size: 2.1rem;
54
- font-weight: 900;
55
- text-align: center;
56
- margin-bottom: 28px;
57
- letter-spacing: 0.6px;
58
- color: #23395d;
59
- }
60
-
61
  .signup-title.center-title {
62
  text-align: center;
63
  margin-bottom: 32px;
@@ -182,18 +128,6 @@
182
  color: #fff;
183
  }
184
 
185
- .create-login-link {
186
- grid-column: 1 / -1;
187
- text-align: center;
188
- color: #137ec4;
189
- margin-top: 0px;
190
- }
191
-
192
- .create-login-link a {
193
- color: #137ec4;
194
- font-weight: 700;
195
- }
196
-
197
  .create-footer {
198
  grid-column: 1 / -1;
199
  text-align: center;
@@ -208,80 +142,6 @@
208
  margin-top: 0px;
209
  }
210
 
211
- .welcome-info-box {
212
- position: absolute;
213
- top: 32px;
214
- left: 0;
215
- width: 100%;
216
- padding: 0 32px;
217
- z-index: 2;
218
- text-align: left;
219
- }
220
-
221
- .welcome-info-title {
222
- font-size: 1.35rem;
223
- font-weight: 800;
224
- color: #fff;
225
- margin-bottom: 6px;
226
- letter-spacing: 0.5px;
227
- }
228
-
229
- .welcome-info-desc {
230
- font-size: 1.08rem;
231
- color: #e0f7fa;
232
- margin-bottom: 8px;
233
- }
234
-
235
- .welcome-info-link {
236
- color: #fff;
237
- font-weight: 700;
238
- text-decoration: underline;
239
- cursor: pointer;
240
- transition: color 0.2s;
241
- }
242
-
243
- .welcome-info-link:hover {
244
- color: #23395d;
245
- }
246
-
247
- /* Extra whitespace and centering for small screens */
248
- @media (max-width: 900px) {
249
- .signup-container {
250
- flex-direction: column;
251
- width: 98vw;
252
- align-items: center;
253
- justify-content: center;
254
- }
255
-
256
- .signup-panel-right {
257
- padding: 18px 6vw;
258
- }
259
-
260
- .create-card {
261
- padding: 18px 6vw;
262
- margin: 0 auto;
263
- }
264
-
265
- .create-form {
266
- grid-template-columns: 1fr;
267
- gap: 18px;
268
- }
269
-
270
- .create-btn {
271
- width: 100%;
272
- }
273
- }
274
-
275
- @media (max-width: 600px) {
276
- .create-card {
277
- padding: 10px 2vw;
278
- }
279
-
280
- .signup-panel-right {
281
- padding: 10px 2vw;
282
- }
283
- }
284
-
285
  .signin-close {
286
  position: absolute;
287
  top: 5px;
@@ -308,7 +168,6 @@
308
  color: #18314a;
309
  }
310
 
311
- /* Eye toggle inside password fields: match sign-in positioning */
312
  .form-field .eye-toggle {
313
  position: absolute;
314
  right: 12px;
@@ -334,338 +193,24 @@
334
  outline: none;
335
  }
336
 
337
- /* Ensure button SVG scales nicely */
338
- .form-field .eye-toggle svg {
339
- width: 22px;
340
- height: 22px;
341
- }
342
-
343
- /* Small screen tweak: move eye toggle slightly up if spacing differs */
344
- @media (max-width: 700px) {
345
- .form-field .eye-toggle {
346
- top: 28px;
347
- }
348
- }
349
-
350
- .fact-rotator {
351
- font-size: 1.18rem;
352
- font-weight: 700;
353
- color: #fff;
354
- margin-bottom: 18px;
355
- min-height: 32px;
356
- text-align: center;
357
- transition: opacity 0.6s;
358
- letter-spacing: 0.5px;
359
- animation: fadeFact 0.6s;
360
- }
361
-
362
- @keyframes fadeFact {
363
- from {
364
- opacity: 0;
365
- }
366
-
367
- to {
368
- opacity: 1;
369
- }
370
- }
371
-
372
- .side-panel.side-right {
373
- position: relative;
374
- overflow: hidden;
375
- display: flex;
376
- align-items: center;
377
- justify-content: center;
378
- background: linear-gradient(135deg, #38bdf8 0%, #7b2ff2 100%);
379
- min-height: 100%;
380
- }
381
-
382
- .side-panel.side-left {
383
- position: relative;
384
- overflow: hidden;
385
- display: flex;
386
- align-items: center;
387
- justify-content: center;
388
-
389
- min-height: 100%;
390
- }
391
-
392
- .wave-bg {
393
- position: absolute;
394
- inset: 0;
395
- width: 100%;
396
- height: 100%;
397
- z-index: 1;
398
- overflow: hidden;
399
- }
400
-
401
- .wave-svg {
402
- position: absolute;
403
- top: 0;
404
- left: 0;
405
- width: 100%;
406
- height: 100%;
407
- z-index: 1;
408
- }
409
-
410
- .circle {
411
- position: absolute;
412
  border-radius: 50%;
413
- background: linear-gradient(135deg, #38bdf8 0%, #7b2ff2 100%);
414
- opacity: 0.85;
415
- }
416
-
417
- .circle1 {
418
- width: 90px;
419
- height: 90px;
420
- top: 80px;
421
- left: 60px;
422
- box-shadow: 0 0 32px #7b2ff2aa;
423
- }
424
-
425
- .circle2 {
426
- width: 60px;
427
- height: 60px;
428
- top: 220px;
429
- left: 220px;
430
- box-shadow: 0 0 24px #38bdf8aa;
431
- }
432
-
433
- .circle3 {
434
- width: 120px;
435
- height: 120px;
436
- bottom: 40px;
437
- left: 120px;
438
- box-shadow: 0 0 48px #7b2ff2aa;
439
- }
440
-
441
- .circle4 {
442
- width: 36px;
443
- height: 36px;
444
- bottom: 80px;
445
- right: 60px;
446
- box-shadow: 0 0 12px #38bdf8aa;
447
- }
448
-
449
- .welcome-content {
450
- position: relative;
451
- z-index: 2;
452
- width: 100%;
453
- text-align: center;
454
- display: flex;
455
- flex-direction: column;
456
- align-items: center;
457
- justify-content: center;
458
- margin-top: 80px;
459
- }
460
-
461
- .welcome-title {
462
- font-size: 2.2rem;
463
- font-weight: 800;
464
- color: #fff;
465
- margin-bottom: 18px;
466
- text-shadow: 0 2px 16px #0006;
467
- }
468
-
469
- .welcome-subtitle {
470
- font-size: 1.08rem;
471
- color: #e0e7ef;
472
- margin-bottom: 32px;
473
- letter-spacing: 1px;
474
- text-shadow: 0 2px 8px #0004;
475
- }
476
-
477
- .welcome-footer {
478
- font-size: 1.05rem;
479
- color: #fff;
480
- opacity: 0.7;
481
- margin-top: 120px;
482
- letter-spacing: 2px;
483
- }
484
-
485
- /* Glossy info popup for role info */
486
- .role-info-popup-bg {
487
- position: fixed;
488
- inset: 0;
489
- background: rgba(30, 41, 59, 0.55);
490
- backdrop-filter: blur(1px);
491
- z-index: 0;
492
- display: flex;
493
- align-items: center;
494
- justify-content: flex-end;
495
- padding: 48px 56px 48px 24px;
496
- animation: fadeInModalBg 0.3s;
497
- }
498
-
499
- @keyframes fadeInModalBg {
500
- from {
501
- opacity: 0;
502
- }
503
-
504
- to {
505
- opacity: 1;
506
- }
507
  }
508
 
509
- @keyframes popupOpen {
510
  0% {
511
- opacity: 0;
512
- transform: scale(0.92) translateY(24px);
513
  }
514
 
515
  100% {
516
- opacity: 1;
517
- transform: scale(1) translateY(0);
518
- }
519
- }
520
-
521
- .role-info-popup {
522
- background: rgba(255, 255, 255, 0.92);
523
- border-radius: 4px;
524
- box-shadow: 0 8px 32px #38bdf844 0 24px #1e293b88;
525
- padding: 22px 28px 18px 28px;
526
- min-width: 220px;
527
- max-width: 90vw;
528
- text-align: left;
529
- z-index: 3001;
530
- font-size: 0.98em;
531
- color: #23395d;
532
- letter-spacing: 0.2px;
533
- line-height: 1.5;
534
- position: relative;
535
- font-family: inherit;
536
- opacity: 1;
537
- animation: popupOpen 1.2s cubic-bezier(.22, .9, .32, 1) both;
538
- }
539
-
540
- .role-info-popup .close-btn {
541
- position: absolute;
542
- top: 8px;
543
- right: 8px;
544
- width: 24px;
545
- height: 24px;
546
- border: none;
547
- background: #14263c;
548
- color: #fff;
549
- border-radius: 50%;
550
- font-size: 1.1rem;
551
- font-weight: bold;
552
- display: flex;
553
- align-items: center;
554
- justify-content: center;
555
- cursor: pointer;
556
- z-index: 10;
557
- transition: background 0.2s, color 0.2s;
558
- box-shadow: 0 2px 8px #0005;
559
- }
560
-
561
- .role-info-popup .close-btn:hover {
562
- background: #38bdf8;
563
- color: #18314a;
564
- }
565
-
566
- .role-info-btn {
567
- background: none;
568
- border: none;
569
- color: #38bdf8;
570
- font-size: 1.15em;
571
- cursor: pointer;
572
- margin-left: 6px;
573
- vertical-align: middle;
574
- padding: 0;
575
- display: inline-flex;
576
- align-items: center;
577
- justify-content: center;
578
- transition: color 0.2s;
579
- }
580
-
581
- .role-info-btn:hover {
582
- color: #137ec4;
583
  }
584
-
585
- /* Spinner for loading state on buttons */
586
- .spinner {
587
- display: inline-block;
588
- width:18px;
589
- height:18px;
590
- border:3px solid #fff;
591
- border-top:3px solid #38bdf8;
592
- border-radius:50%;
593
- animation: spin0.7s linear infinite;
594
- vertical-align: middle;
595
- margin-right:8px;
596
- }
597
- @keyframes spin {
598
- 0% { transform: rotate(0deg);}
599
- 100% { transform: rotate(360deg);}
600
- }
601
-
602
- /* Info button and floating info popup styles */
603
- .info-btn {
604
- background: #38bdf8;
605
- color: #fff;
606
- border: none;
607
- border-radius:50%;
608
- width:28px;
609
- height:28px;
610
- font-size:1.1rem;
611
- font-weight: bold;
612
- cursor: pointer;
613
- margin-left:8px;
614
- }
615
-
616
- .info-popup-bg {
617
- position: fixed;
618
- inset:0;
619
- background: rgba(30,41,59,0.45);
620
- backdrop-filter: blur(2px);
621
- z-index:;
622
- display: flex;
623
- align-items: center;
624
- justify-content: center;
625
- }
626
-
627
- .info-popup {
628
- background: rgba(255,255,255,0.85);
629
- border-radius: 16px;
630
- box-shadow: 08px 32px #38bdf844,0024px #1e293b88;
631
- padding: 24px 28px 18px 28px;
632
- min-width: 320px;
633
- max-width: 90vw;
634
- text-align: left;
635
- font-size: 0.98rem;
636
- color: #23395d;
637
- position: relative;
638
- font-family: inherit;
639
- left: 840px;
640
- }
641
-
642
- .info-title {
643
- font-size:1.08rem;
644
- font-weight:700;
645
- margin-bottom:8px;
646
- color: #38bdf8;
647
- letter-spacing:0.5px;
648
- }
649
-
650
- .info-text {
651
- font-size:0.95rem;
652
- color: #23395d;
653
- opacity:0.95;
654
- }
655
-
656
- .info-close {
657
- position: absolute;
658
- top:8px;
659
- right:12px;
660
- background: none;
661
- border: none;
662
- font-size:1.5rem;
663
- color: #38bdf8;
664
- cursor: pointer;
665
- font-weight: bold;
666
- opacity:0.7;
667
- transition: opacity 0.2s;
668
- }
669
- .info-close:hover {
670
- opacity:1;
671
  }
 
4
  min-height: 100vh;
5
  }
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  .signup-title.center-title {
8
  text-align: center;
9
  margin-bottom: 32px;
 
128
  color: #fff;
129
  }
130
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  .create-footer {
132
  grid-column: 1 / -1;
133
  text-align: center;
 
142
  margin-top: 0px;
143
  }
144
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  .signin-close {
146
  position: absolute;
147
  top: 5px;
 
168
  color: #18314a;
169
  }
170
 
 
171
  .form-field .eye-toggle {
172
  position: absolute;
173
  right: 12px;
 
193
  outline: none;
194
  }
195
 
196
+ .spinner {
197
+ display: inline-block;
198
+ width: 18px;
199
+ height: 18px;
200
+ border: 3px solid #fff;
201
+ border-top: 3px solid #38bdf8;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  border-radius: 50%;
203
+ animation: spin 0.7s linear infinite;
204
+ vertical-align: middle;
205
+ margin-right: 8px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
206
  }
207
 
208
+ @keyframes spin {
209
  0% {
210
+ transform: rotate(0deg);
 
211
  }
212
 
213
  100% {
214
+ transform: rotate(360deg);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
215
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
216
  }