Swetha commited on
Commit
7279a7b
·
1 Parent(s): 0018e97
src/app/intro-page/intro-page.component.css CHANGED
@@ -42,33 +42,52 @@
42
  height: 100vh;
43
  display: flex;
44
  flex-direction: column;
45
- background: url(/assets/4.png) no-repeat center center fixed;
46
  background-size: cover;
47
  color: #e5e7eb;
48
- justify-content: space-around;
49
- gap: 6vw;
50
  }
51
 
52
- /* Topbar */
53
  .topbar {
 
 
 
 
 
 
 
 
 
54
  display: flex;
55
- align-items: center;
56
- justify-content: space-around;
57
- gap: 54vw;
58
  width: 100%;
 
59
  }
60
 
61
  .brand {
62
- display: flex;
63
  align-items: center;
64
- gap: 10px;
 
 
 
65
  }
66
 
67
- .brand__logo {
68
- width: 34px;
69
- height: 34px;
70
- border-radius: 8px;
71
- background: #00ff88;
 
 
 
 
 
 
 
 
 
72
  }
73
 
74
  .brand__name {
@@ -78,6 +97,18 @@
78
  font-weight: lighter;
79
  }
80
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  .actions {
82
  display: flex;
83
  align-items: center;
@@ -123,19 +154,16 @@
123
  background: #0b0f1a;
124
  }
125
 
126
- /*.btn-disabled {
127
- opacity: 0.6;
128
- cursor: not-allowed;
129
- pointer-events: none;
130
- }*/
131
-
132
- .btn-disabled:hover {
133
- border-color: #f3a54c !important;
134
- }
135
 
136
- /* Hero */
137
  .hero {
138
  margin-left: 5vw;
 
 
 
 
139
  }
140
 
141
  .hero__content {
@@ -143,22 +171,25 @@
143
  }
144
 
145
  .hero__title {
146
- margin: 0 0 10px;
147
- font-size: clamp(26px, 4.2vw, 44px);
148
- line-height: 1.12;
149
- font-weight: 800;
150
  }
151
 
152
  .hero__text {
153
  color: #b9c2d0;
154
- margin: 0 0 18px;
155
- font-size: clamp(14px, 2vw, 16px);
 
 
156
  }
157
 
158
  .cta {
159
  display: flex;
160
  gap: 10px;
161
- flex-wrap: wrap;
 
162
  }
163
 
164
  /* Footer */
@@ -170,27 +201,11 @@
170
  font-size: 0.7vw;
171
  }
172
 
 
173
  .footer a {
174
- text-decoration: unset;
175
- align-items: center;
176
- border: 2px solid #f3a54c;
177
- color: white;
178
- border-radius: 2vw;
179
- display: inline-flex;
180
- align-items: center;
181
- border-radius: 8px;
182
- border: 1px solid rgba(255, 255, 255, .25);
183
- background: rgba(11, 15, 26, 0.6);
184
- color: #cfe8ff;
185
- cursor: pointer;
186
- padding: 0 4px;
187
  }
188
 
189
- .footer a i {
190
- margin-right: 2px;
191
- line-height: 1;
192
- }
193
-
194
  .about-btn {
195
  display: inline-flex;
196
  align-items: center;
@@ -227,19 +242,6 @@
227
  border-color: #fff !important;
228
  }
229
 
230
- .brand__logo-img {
231
- background: white;
232
- max-width: 5vw;
233
- height: auto;
234
- border-radius: 1vw;
235
- margin: 0.5vw;
236
- }
237
-
238
- .brand__link {
239
- display: inline-flex;
240
- align-items: center;
241
- }
242
-
243
  /* AUTH Modal overlay */
244
  .modal-backdrop {
245
  position: fixed;
@@ -248,38 +250,95 @@
248
  display: grid;
249
  place-items: center;
250
  z-index: 1000;
 
 
251
  }
252
 
253
- button.modal-close {
254
- border: 3px solid #ff0000;
255
- background: transparent;
256
- color: white;
257
- position: relative;
258
- left: 47vw;
259
- top: 1.8vw;
260
- z-index: 11;
261
- border-radius: 10px;
262
- cursor: pointer;
263
  }
264
 
 
 
 
 
265
 
 
 
 
 
266
 
267
- /* Ensure the auth components fit properly in the modal */
268
- .modal-panel app-sign-in,
269
- .modal-panel app-sign-up {
270
- display: block;
271
- width: 100%;
272
  }
273
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
 
275
- /* ABOUT Modal (new) */
 
 
 
 
 
 
 
276
  .about-backdrop {
277
  position: fixed;
278
  inset: 0;
279
- background: rgb(255 255 255 / 34%);
 
 
280
  z-index: 1100; /* above auth backdrop */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  }
282
 
 
 
 
 
 
283
  .about-modal {
284
  position: fixed;
285
  z-index: 1101; /* above auth modal */
@@ -288,93 +347,559 @@ button.modal-close {
288
  width: min(720px, 92vw);
289
  max-height: 80vh;
290
  overflow: auto;
291
- background: #ffffff;
292
  color: #111;
293
- border-radius: 12px;
294
- box-shadow: 0 20px 50px rgba(0,0,0,.25);
295
  outline: none;
 
296
  }
297
 
298
- .about-modal__header,
299
- .about-modal__footer {
300
- padding: 16px 20px;
301
- border-bottom: 1px solid rgba(0,0,0,.08);
302
- display: flex;
 
 
 
 
 
303
  }
304
 
305
- .about-modal__footer {
306
- border-top: 1px solid rgba(0,0,0,.08);
307
- border-bottom: none;
308
  display: flex;
309
- justify-content: flex-end;
310
- gap: 8px;
 
 
311
  }
312
 
 
 
 
 
 
 
313
  .about-modal__body {
314
- padding: 16px 20px;
315
  line-height: 1.6;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  }
317
 
 
318
  .about-close {
319
  margin-left: auto;
320
  border: none;
321
- background: transparent;
322
- font-size: 20px;
 
 
 
 
323
  cursor: pointer;
324
- color: #111;
 
 
 
 
 
325
  }
326
 
327
- /* Make the embedded auth components look like panels */
328
- /*:host ::ng-deep app-sign-in .auth-page,
329
- :host ::ng-deep app-sign-up .auth-page {
330
- min-height: auto !important;
331
- padding: 0 !important;
332
- background: transparent !important;
333
- }*/
334
 
335
- /*:host ::ng-deep app-sign-in .auth-box,
336
- :host ::ng-deep app-sign-up .auth-box {
337
- width: min(920px, 92vw) !important;
338
- margin: 0 auto !important;
339
- }*/
340
 
341
- /* Optional: if you want a tighter width for Sign-In
342
- :host ::ng-deep app-sign-in .auth-box {
343
- width: min(720px, 92vw) !important;
344
  }
345
- */
346
- .modal-backdrop {
347
- position: fixed;
348
- inset: 0;
349
- background: rgb(255 255 255 / 34%);
350
- display: grid;
351
- place-items: center;
352
- z-index: 1000;
353
- animation: fadeIn 0.2s ease-out;
354
  }
355
 
356
- .modal-panel {
357
- animation: slideIn 0.3s ease-out;
 
358
  }
359
 
360
- @keyframes fadeIn {
361
- from {
362
- opacity: 0;
 
 
 
 
 
 
 
363
  }
364
 
365
- to {
366
- opacity: 1;
 
 
 
 
367
  }
368
  }
369
 
370
- @keyframes slideIn {
371
- from {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
372
  opacity: 0;
373
- transform: translateY(-20px);
374
  }
375
 
376
- to {
377
  opacity: 1;
378
- transform: translateY(0);
 
 
 
 
 
379
  }
380
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  height: 100vh;
43
  display: flex;
44
  flex-direction: column;
45
+ background: url(/assets/11.png) no-repeat center center fixed;
46
  background-size: cover;
47
  color: #e5e7eb;
48
+ justify-content: space-evenly;
49
+ gap: 12vw;
50
  }
51
 
52
+ /* Topbar aligned like QA */
53
  .topbar {
54
+ position: fixed;
55
+ top: 0;
56
+ left: 0;
57
+ z-index: 100;
58
+ background: #000000d4;
59
+ -webkit-backdrop-filter: blur(8px);
60
+ backdrop-filter: blur(8px);
61
+ padding: 17px 97px;
62
+ justify-content: space-between;
63
  display: flex;
 
 
 
64
  width: 100%;
65
+ align-items: center;
66
  }
67
 
68
  .brand {
69
+ display: inline-flex;
70
  align-items: center;
71
+ gap: 1.5vw;
72
+ text-decoration: none;
73
+ cursor: pointer;
74
+ user-select: none;
75
  }
76
 
77
+ /* Match QA brand logo sizing/behavior */
78
+ .brand__logo-img {
79
+ background: #ffffff;
80
+ max-width: 4.2vw;
81
+ min-width: 56px;
82
+ height: auto;
83
+ border-radius: 50%;
84
+ padding: 4px;
85
+ box-shadow: 0 4px 10px rgba(0,0,0,0.25);
86
+ transition: transform .25s ease;
87
+ }
88
+
89
+ .brand:hover .brand__logo-img {
90
+ transform: scale(1.05);
91
  }
92
 
93
  .brand__name {
 
97
  font-weight: lighter;
98
  }
99
 
100
+ /* Color the "Py" like QA */
101
+ .brand__name strong {
102
+ font-weight: unset;
103
+ color: #f3a54c;
104
+ }
105
+
106
+ .brand__link {
107
+ display: inline-flex;
108
+ align-items: center;
109
+ color: white;
110
+ }
111
+
112
  .actions {
113
  display: flex;
114
  align-items: center;
 
154
  background: #0b0f1a;
155
  }
156
 
157
+ .btn-disabled:hover {
158
+ border-color: #f3a54c !important;
159
+ }
 
 
 
 
 
 
160
 
 
161
  .hero {
162
  margin-left: 5vw;
163
+ position: absolute;
164
+ top: 50%;
165
+ left: 16.3%;
166
+ transform: translate(-50%, -16.3%);
167
  }
168
 
169
  .hero__content {
 
171
  }
172
 
173
  .hero__title {
174
+ margin: 0 0 25px;
175
+ font-size: 2.3vw;
176
+ line-height: 1.2;
177
+ font-weight: bold;
178
  }
179
 
180
  .hero__text {
181
  color: #b9c2d0;
182
+ margin: 0 0 34px;
183
+ font-size: 0.9vw;
184
+ font-weight: 500;
185
+ line-height: 1.5vw;
186
  }
187
 
188
  .cta {
189
  display: flex;
190
  gap: 10px;
191
+ flex-direction: row-reverse;
192
+ justify-content: flex-end;
193
  }
194
 
195
  /* Footer */
 
201
  font-size: 0.7vw;
202
  }
203
 
204
+ /* remove styles targeting removed footer link */
205
  .footer a {
206
+ all: unset;
 
 
 
 
 
 
 
 
 
 
 
 
207
  }
208
 
 
 
 
 
 
209
  .about-btn {
210
  display: inline-flex;
211
  align-items: center;
 
242
  border-color: #fff !important;
243
  }
244
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  /* AUTH Modal overlay */
246
  .modal-backdrop {
247
  position: fixed;
 
250
  display: grid;
251
  place-items: center;
252
  z-index: 1000;
253
+ animation: fadeIn 0.2s ease-out;
254
+ backdrop-filter: blur(8px);
255
  }
256
 
257
+ .modal-panel {
258
+ animation: slideIn 0.3s ease-out;
 
 
 
 
 
 
 
 
259
  }
260
 
261
+ @keyframes fadeIn {
262
+ from {
263
+ opacity: 0;
264
+ }
265
 
266
+ to {
267
+ opacity: 1;
268
+ }
269
+ }
270
 
271
+ @keyframes slideIn {
272
+ from {
273
+ opacity: 0;
274
+ transform: translateY(-20px);
 
275
  }
276
 
277
+ to {
278
+ opacity: 1;
279
+ transform: translateY(0);
280
+ }
281
+ }
282
+
283
+ button.modal-close {
284
+ background: white;
285
+ color: black;
286
+ position: relative;
287
+ left: 48.2vw;
288
+ top: 0.7vw;
289
+ z-index: 11;
290
+ border-radius: 50%;
291
+ cursor: pointer;
292
+ font-size: 1vw;
293
+ font-weight: bold;
294
+ }
295
 
296
+ /* Ensure the auth components fit properly in the modal */
297
+ .modal-panel app-sign-in,
298
+ .modal-panel app-sign-up {
299
+ display: block;
300
+ width: 100%;
301
+ }
302
+
303
+ /* Enhanced ABOUT Modal backdrop */
304
  .about-backdrop {
305
  position: fixed;
306
  inset: 0;
307
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.4) 0%, rgba(255, 255, 255, 0.2) 100%);
308
+ backdrop-filter: blur(8px);
309
+ -webkit-backdrop-filter: blur(8px);
310
  z-index: 1100; /* above auth backdrop */
311
+ animation: fadeIn 0.3s ease-out;
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: center;
315
+ }
316
+
317
+ /* Add a subtle pattern/texture to the backdrop */
318
+ .about-backdrop::before {
319
+ content: "";
320
+ position: absolute;
321
+ inset: 0;
322
+ background-image: radial-gradient(circle at 25% 25%, rgba(243, 165, 76, 0.1) 0%, transparent 50%), radial-gradient(circle at 75% 75%, rgba(0, 255, 136, 0.1) 0%, transparent 50%);
323
+ pointer-events: none;
324
+ }
325
+
326
+ /* Add a subtle animation to the backdrop pattern */
327
+ @keyframes subtleShift {
328
+ 0%, 100% {
329
+ transform: translate(0, 0);
330
+ }
331
+
332
+ 50% {
333
+ transform: translate(3px, 3px);
334
+ }
335
  }
336
 
337
+ .about-backdrop::before {
338
+ animation: subtleShift 15s ease-in-out infinite;
339
+ }
340
+
341
+ /* Enhanced about modal */
342
  .about-modal {
343
  position: fixed;
344
  z-index: 1101; /* above auth modal */
 
347
  width: min(720px, 92vw);
348
  max-height: 80vh;
349
  overflow: auto;
350
+ background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);
351
  color: #111;
352
+ border-radius: 16px;
353
+ box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(255, 255, 255, 0.1) inset;
354
  outline: none;
355
+ animation: modalSlideIn 0.3s cubic-bezier(0.16, 1, 0.3, 1);
356
  }
357
 
358
+ @keyframes modalSlideIn {
359
+ from {
360
+ opacity: 0;
361
+ transform: translate(-50%, -48%);
362
+ }
363
+
364
+ to {
365
+ opacity: 1;
366
+ transform: translate(-50%, -50%);
367
+ }
368
  }
369
 
370
+ .about-modal__header {
371
+ padding: 20px 24px;
372
+ border-bottom: 1px solid rgba(0, 0, 0, 0.08);
373
  display: flex;
374
+ align-items: center;
375
+ background: #dedee7;
376
+ color: #0b0f1a;
377
+ border-radius: 16px 16px 0 0;
378
  }
379
 
380
+ .about-modal__header h2 {
381
+ margin: 0;
382
+ font-size: 1.5rem;
383
+ font-weight: 700;
384
+ }
385
+
386
  .about-modal__body {
387
+ padding: 24px;
388
  line-height: 1.6;
389
+ background: #ffffff;
390
+ text-align: justify;
391
+ }
392
+
393
+ .about-modal__body p {
394
+ margin-bottom: 16px;
395
+ }
396
+
397
+ .about-modal__footer {
398
+ padding: 16px 24px;
399
+ border-top: 1px solid rgba(0, 0, 0, 0.08);
400
+ display: flex;
401
+ justify-content: flex-end;
402
+ gap: 12px;
403
+ background: #f8f9fa;
404
+ border-radius: 0 0 16px 16px;
405
  }
406
 
407
+ /* Enhanced close button for the about modal */
408
  .about-close {
409
  margin-left: auto;
410
  border: none;
411
+ color: #000000;
412
+ border: 2px solid #f3a54c;
413
+ width: 28px;
414
+ height: 28px;
415
+ border-radius: 50%;
416
+ font-size: 22px;
417
  cursor: pointer;
418
+ display: flex;
419
+ align-items: center;
420
+ justify-content: center;
421
+ transition: all 0.2s ease;
422
+ font-weight: bold;
423
+ background: transparent;
424
  }
425
 
426
+ .about-close:hover {
427
+ border: 2px solid #00ff88;
428
+ /*transform: scale(0.8);*/
429
+ }
 
 
 
430
 
431
+ .about-close:focus {
432
+ outline: 2px solid #00ff88;
433
+ outline-offset: 2px;
434
+ }
 
435
 
436
+ /* High contrast mode adjustments */
437
+ .page.high-contrast .about-backdrop {
438
+ background: rgba(0, 0, 0, 0.8);
439
  }
440
+
441
+ .page.high-contrast .about-backdrop::before {
442
+ display: none;
443
+ }
444
+
445
+ .page.high-contrast .about-modal {
446
+ border: 2px solid #fff;
447
+ background: #000;
448
+ color: #fff;
449
  }
450
 
451
+ .page.high-contrast .about-modal__header {
452
+ border-bottom: 2px solid #fff;
453
+ background: #000;
454
  }
455
 
456
+ .page.high-contrast .about-modal__footer {
457
+ border-top: 2px solid #fff;
458
+ background: #000;
459
+ }
460
+
461
+ /* Reduced motion support */
462
+ @media (prefers-reduced-motion: reduce) {
463
+ .about-backdrop,
464
+ .about-modal {
465
+ animation: none;
466
  }
467
 
468
+ .about-backdrop::before {
469
+ animation: none;
470
+ }
471
+
472
+ .about-close:hover {
473
+ transform: none;
474
  }
475
  }
476
 
477
+ /* Enhanced tooltip for Get Started when not signed in */
478
+ .tooltip {
479
+ position: relative;
480
+ display: inline-block;
481
+ /* theme tokens */
482
+ --t-bg: #cfe8ff; /* requested background */
483
+ --t-border: #2b3246;
484
+ --t-text: #0b0f1a; /* dark text for contrast */
485
+ --t-shadow: rgba(0,0,0,.25);
486
+ --t-glow: rgba(0,255,136,.18); /* brand neon */
487
+ }
488
+
489
+ /* Bubble positioned to the right of trigger */
490
+ .tooltip__bubble {
491
+ transform: translateY(-50%) translateX(-6px) scale(0.98);
492
+ padding: 10px 14px;
493
+ opacity: 0;
494
+ pointer-events: none;
495
+ transition: opacity .18s ease, transform .18s ease;
496
+ transition-delay: .06s;
497
+ z-index: 20;
498
+ backdrop-filter: blur(6px);
499
+ -webkit-backdrop-filter: blur(6px);
500
+ position: absolute;
501
+ top: 50%;
502
+ left: calc(100% + 12px);
503
+ background: #cfe8ffb5;
504
+ color: var(--t-text);
505
+ padding: 10px 14px;
506
+ border-radius: 12px;
507
+ font-size: 10px;
508
+ transition: opacity .18s ease, transform .18s ease;
509
+ width: max-content;
510
+ }
511
+
512
+ /* subtle top highlight */
513
+ .tooltip__bubble::before {
514
+ content: "";
515
+ position: absolute;
516
+ inset: 0;
517
+ border-radius: inherit;
518
+ pointer-events: none;
519
+ background: radial-gradient(120px 40px at 50% -20px, rgba(255,255,255,.35), transparent 70%);
520
+ }
521
+
522
+ /* Arrow on the left side pointing to trigger */
523
+ .tooltip__bubble::after {
524
+ content: "";
525
+ position: absolute;
526
+ top: 50%;
527
+ left: -16px;
528
+ transform: translateY(-50%);
529
+ border: 8px solid transparent;
530
+ border-right-color: var(--t-bg);
531
+ filter: drop-shadow(0 2px 0 rgba(0,0,0,.12));
532
+ }
533
+
534
+ .tooltip.tooltip--active:hover .tooltip__bubble,
535
+ .tooltip.tooltip--active:focus-within .tooltip__bubble,
536
+ .tooltip.tooltip--active .tooltip__bubble:hover,
537
+ .tooltip.tooltip--active .tooltip__bubble:focus {
538
+ opacity: 1;
539
+ transform: translateY(-50%) translateX(0) scale(1);
540
+ pointer-events: auto;
541
+ animation: tooltip-pop-right .22s cubic-bezier(.2,.8,.25,1);
542
+ }
543
+
544
+ @keyframes tooltip-pop-right {
545
+ 0% {
546
  opacity: 0;
547
+ transform: translateY(-50%) translateX(-10px) scale(.96);
548
  }
549
 
550
+ 60% {
551
  opacity: 1;
552
+ transform: translateY(-50%) translateX(2px) scale(1.02);
553
+ }
554
+
555
+ 100% {
556
+ opacity: 1;
557
+ transform: translateY(-50%) translateX(0) scale(1);
558
  }
559
  }
560
+
561
+ /* High contrast friendly tooltip */
562
+ .page.high-contrast .tooltip__bubble {
563
+ background: #000;
564
+ color: #fff;
565
+ border-color: #fff;
566
+ box-shadow: 0 0 0 2px #fff;
567
+ }
568
+
569
+ .page.high-contrast .tooltip__bubble::after {
570
+ border-right-color: #000;
571
+ }
572
+
573
+ /* Keep right-side placement on small screens as requested */
574
+ @media (prefers-reduced-motion: reduce) {
575
+ .tooltip__bubble {
576
+ transition: none;
577
+ }
578
+
579
+ .tooltip.tooltip--active:hover .tooltip__bubble,
580
+ .tooltip.tooltip--active:focus-within .tooltip__bubble {
581
+ animation: none;
582
+ }
583
+ }
584
+
585
+ /* Cards Section */
586
+ .cards {
587
+ display: flex;
588
+ justify-content: space-around;
589
+ padding: 60px 10%;
590
+ background: #f9f9f9;
591
+ flex-wrap: wrap;
592
+ }
593
+
594
+ .card {
595
+ width: 30%;
596
+ background: #fff;
597
+ box-shadow: 0 4px 8px rgba(0,0,0,0.1);
598
+ margin-bottom: 20px;
599
+ border-radius: 12px;
600
+ overflow: hidden;
601
+ text-align: left;
602
+ }
603
+
604
+ .card img {
605
+ width: 100%;
606
+ height: 200px;
607
+ object-fit: cover;
608
+ }
609
+
610
+ .card h3 {
611
+ margin: 15px;
612
+ font-size: 20px;
613
+ color: #444;
614
+ }
615
+
616
+ .card p {
617
+ margin: 0 15px 20px 15px;
618
+ font-size: 0.89vw;
619
+ line-height: 1.5;
620
+ text-align: justify;
621
+ color: black;
622
+ }
623
+
624
+ /* Scrolling Images */
625
+ .scroll-container {
626
+ overflow: hidden;
627
+ white-space: nowrap;
628
+ padding: 20px 0;
629
+ position: relative;
630
+ }
631
+
632
+ /* Use flex track with two identical sequences for seamless loop */
633
+ .scroll-images {
634
+ display: flex;
635
+ align-items: center;
636
+ animation: scroll-left 40s linear infinite;
637
+ width: max-content;
638
+ }
639
+
640
+ .scroll-images img {
641
+ width: 10vw;
642
+ height: 10vw;
643
+ margin: 0 10px;
644
+ border-radius: 8px;
645
+ object-fit: cover;
646
+ flex: 0 0 auto;
647
+ }
648
+
649
+ /* Pause on hover (optional UX improvement) */
650
+ .scroll-container:hover .scroll-images {
651
+ animation-play-state: paused;
652
+ }
653
+
654
+ @keyframes scroll-left {
655
+ 0% {
656
+ transform: translateX(0);
657
+ }
658
+
659
+ 100% {
660
+ transform: translateX(-50%);
661
+ }
662
+ /* shift exactly one set width (because duplicated) */
663
+ }
664
+
665
+ /* Special Content */
666
+ .special-content {
667
+ background: #dedee7;
668
+ padding: 50px 15%;
669
+ text-align: center;
670
+ }
671
+
672
+ .special-content h2 {
673
+ font-size: 28px;
674
+ margin-bottom: 20px;
675
+ }
676
+
677
+ .special-content p {
678
+ font-size: 18px;
679
+ line-height: 1.6;
680
+ }
681
+
682
+ /* Footer */
683
+ footer {
684
+ background: black;
685
+ color: #fff;
686
+ text-align: center;
687
+ padding: 15px 10px;
688
+ }
689
+
690
+ footer a {
691
+ color: #fff;
692
+ text-decoration: none;
693
+ margin: 0 10px;
694
+ }
695
+
696
+ footer .social-icons {
697
+ margin-top: 10px;
698
+ }
699
+
700
+ footer .social-icons img {
701
+ width: 25px;
702
+ margin: 0 8px;
703
+ vertical-align: middle;
704
+ }
705
+
706
+ /* Responsive adjustments */
707
+ @media (max-width: 768px) {
708
+ .card {
709
+ width: 100%;
710
+ }
711
+
712
+ .brand__name {
713
+ font-size: 1.5rem;
714
+ }
715
+
716
+ .topbar {
717
+ gap: 20px;
718
+ justify-content: space-between;
719
+ }
720
+
721
+ .cards {
722
+ padding: 30px 5%;
723
+ }
724
+
725
+ .special-content {
726
+ padding: 30px 5%;
727
+ }
728
+ }
729
+
730
+ /* Adjust page padding to account for fixed header/footer */
731
+ .page {
732
+ padding-top: 70px; /* Space for fixed header */
733
+ padding-bottom: 80px; /* Space for fixed footer */
734
+ height: auto;
735
+ min-height: 100vh;
736
+ }
737
+
738
+ /* Adjust cards section to account for fixed elements */
739
+ .cards {
740
+ padding: 80px 51px;
741
+ }
742
+
743
+ /* Adjust scrolling images section */
744
+ .scroll-container {
745
+ margin: 20px 0;
746
+ }
747
+
748
+ /* Adjust special content section */
749
+ .special-content {
750
+ padding: 60px 15% 80px;
751
+ }
752
+
753
+ /* Responsive adjustments for fixed elements */
754
+ @media (max-width: 768px) {
755
+ .topbar {
756
+ gap: 20px;
757
+ padding: 8px 12px;
758
+ }
759
+
760
+ .page {
761
+ padding-top: 60px;
762
+ padding-bottom: 70px;
763
+ }
764
+
765
+ .cards {
766
+ padding: 70px 5% 30px;
767
+ }
768
+
769
+ .special-content {
770
+ padding: 40px 5% 60px;
771
+ }
772
+
773
+ footer .social-icons img {
774
+ width: 20px;
775
+ margin: 0 5px;
776
+ }
777
+ }
778
+
779
+ /* Social Media Icons */
780
+ .social-icons {
781
+ display: flex;
782
+ justify-content: center;
783
+ gap: 15px;
784
+ margin-top: 10px;
785
+ }
786
+
787
+ .social-icon {
788
+ display: inline-flex;
789
+ align-items: center;
790
+ justify-content: center;
791
+ width: 36px;
792
+ height: 36px;
793
+ border-radius: 50%;
794
+ background: rgba(255, 255, 255, 0.1);
795
+ color: white;
796
+ text-decoration: none;
797
+ font-size: 18px;
798
+ transition: all 0.3s ease;
799
+ border: 1px solid rgba(255, 255, 255, 0.2);
800
+ }
801
+
802
+ .social-icon:hover {
803
+ transform: translateY(-3px);
804
+ background: rgba(255, 255, 255, 0.2);
805
+ }
806
+
807
+ /* Specific colors for each platform */
808
+ .social-icon.facebook:hover {
809
+ background: #3b5998;
810
+ box-shadow: 0 4px 8px rgba(59, 89, 152, 0.3);
811
+ }
812
+
813
+ .social-icon.youtube:hover {
814
+ background: #ff0000;
815
+ box-shadow: 0 4px 8px rgba(255, 0, 0, 0.3);
816
+ }
817
+
818
+ .social-icon.linkedin:hover {
819
+ background: #0077b5;
820
+ box-shadow: 0 4px 8px rgba(0, 119, 181, 0.3);
821
+ }
822
+
823
+ .social-icon.instagram:hover {
824
+ background: linear-gradient(45deg, #f09433, #e6683c, #dc2743, #cc2366, #bc1888);
825
+ box-shadow: 0 4px 8px rgba(188, 24, 136, 0.3);
826
+ }
827
+
828
+ /* Responsive adjustments for social icons */
829
+ @media (max-width: 768px) {
830
+ .social-icons {
831
+ gap: 10px;
832
+ }
833
+
834
+ .social-icon {
835
+ width: 32px;
836
+ height: 32px;
837
+ font-size: 16px;
838
+ }
839
+ }
840
+
841
+ /* New special-card styles */
842
+ .special-card {
843
+ width: min(840px, 90%);
844
+ margin: 0 auto;
845
+ background: #fff;
846
+ padding: 28px 32px 34px;
847
+ box-shadow: 0 12px 32px -8px rgba(0,0,0,0.15);
848
+ border: 1px solid rgba(0,0,0,0.06);
849
+ border-radius: 20px;
850
+ text-align: left;
851
+ }
852
+
853
+ .special-card h3 {
854
+ margin: 0 0 16px;
855
+ font-size: 28px;
856
+ background: linear-gradient(90deg, #f3a54c, #ffcb7a);
857
+ -webkit-background-clip: text;
858
+ color: transparent;
859
+ letter-spacing: .5px;
860
+ color: black;
861
+ text-align: center;
862
+ }
863
+
864
+ .special-card p {
865
+ margin: 0;
866
+ line-height: 1.6;
867
+ color: #000000;
868
+ }
869
+
870
+ .primary-nav {
871
+ display: flex;
872
+ gap: 1.8rem;
873
+ }
874
+
875
+ .nav-link {
876
+ position: relative;
877
+ font-size: 0.9rem;
878
+ letter-spacing: 1.5px;
879
+ text-transform: uppercase;
880
+ font-weight: 600;
881
+ color: #e5e7eb;
882
+ text-decoration: none;
883
+ padding: 6px 4px;
884
+ transition: color .25s ease;
885
+ }
886
+
887
+ .nav-link::after {
888
+ content: "";
889
+ position: absolute;
890
+ left: 0;
891
+ bottom: 0;
892
+ width: 0;
893
+ height: 2px;
894
+ background: linear-gradient(90deg,#f3a54c,#ffcb7a);
895
+ transition: width .3s ease;
896
+ border-radius: 2px;
897
+ }
898
+
899
+ .nav-link:hover {
900
+ color: #f3a54c;
901
+ }
902
+
903
+ .nav-link:hover::after {
904
+ width: 100%;
905
+ }
src/app/intro-page/intro-page.component.html CHANGED
@@ -1,18 +1,44 @@
1
  <a class="skip-link" href="#main">Skip to content</a>
2
 
3
  <section class="page">
4
-
5
- <!-- Top bar -->
6
  <header class="topbar" role="banner" aria-label="Top navigation">
7
- <div class="brand" aria-label="Application name">
 
 
 
 
8
  <img src="assets/pykara-logo.png" alt="Pykara Technologies logo" class="brand__logo-img" />
9
- <span class="brand__name">{{ tr('brand') }}</span>
10
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
  <nav class="actions" aria-label="Actions">
13
- <!-- CHANGED: open modal instead of routerLink -->
14
- <button type="button" class="btn btn-primary" (click)="openSignUp()">{{ tr('signup') }}</button>
15
- <button type="button" class="btn btn-ghost" (click)="openSignIn()">{{ tr('signin') }}</button>
 
 
 
 
 
 
 
16
  </nav>
17
  </header>
18
 
@@ -22,42 +48,18 @@
22
  <h1 class="hero__title">{{ tr('tagline') }}</h1>
23
  <p class="hero__text">{{ tr('subtext') }}</p>
24
  <div class="cta">
25
- <!-- Updated: Add disabled attribute and tooltip -->
26
- <a routerLink="/question-answer"
27
- class="btn btn-primary"
28
- [class.btn-disabled]="!isSignedIn"
29
- [attr.aria-disabled]="!isSignedIn"
30
- [title]="!isSignedIn ? 'Please sign in first' : ''">
31
- {{ tr('getStarted') }}
32
- </a>
33
- <small *ngIf="!isSignedIn" style="display: block; margin-top: 8px; color: #ffa500;">
34
- Please sign in to get started
35
- </small>
36
  </div>
37
  </div>
38
  </main>
39
 
40
- <!-- Footer (updated) -->
41
- <footer class="footer" aria-label="Footer">
42
- <a href="https://pykara.net/"
43
- target="_blank"
44
- rel="noopener noreferrer"
45
- aria-label="Visit Pykara website">
46
- <i class="fa-solid fa-globe" aria-hidden="true"></i>
47
- <span style="font-family: sans-serif">Visit Pykara</span>
48
- </a>
49
-
50
- <!-- About us button -->
51
- <button type="button"
52
- class="about-btn"
53
- (click)="openAbout()"
54
- aria-haspopup="dialog"
55
- aria-controls="aboutDialog"
56
- [attr.aria-expanded]="isAboutOpen ? 'true' : 'false'">
57
- <i class="fa-solid fa-circle-info" aria-hidden="true"></i>
58
- <span>About us</span>
59
- </button>
60
- </footer>
61
 
62
  <!-- AUTH MODAL OVERLAY (unchanged) -->
63
  <div class="modal-backdrop" *ngIf="modal" (click)="backdropClick($event)">
@@ -92,9 +94,142 @@
92
  </div>
93
 
94
  <div class="about-modal__body">
95
- <p><strong>Py-Match</strong> is an AI-driven personality profiling and matching system that models human traits using four colors — Red, Blue, Green, and Yellow. It conducts an adaptive Q&amp;A session where each response secretly maps to a color; the engine then computes a percentage distribution across the four colors to describe the user’s dominant and supporting traits.</p>
96
- <p>The platform applies these profiles to practical scenarios such as marriage compatibility, recruitment, leadership assessment, and personal development by comparing user profiles to role templates with weighted color mixes. The system architecture includes a web/mobile UI, an AI question generator, a scoring and profile calculator, a matching engine, and secure data storage. The design emphasizes simplicity, scalability, localization, and privacy.</p>
 
 
97
  </div>
98
  </div>
99
 
100
  </section>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <a class="skip-link" href="#main">Skip to content</a>
2
 
3
  <section class="page">
4
+ <!-- Top bar (now fixed) -->
 
5
  <header class="topbar" role="banner" aria-label="Top navigation">
6
+ <a class="brand brand__link"
7
+ href="https://pykara.net/"
8
+ target="_blank"
9
+ rel="noopener noreferrer"
10
+ aria-label="Visit Pykara website">
11
  <img src="assets/pykara-logo.png" alt="Pykara Technologies logo" class="brand__logo-img" />
12
+ <span class="brand__name"><strong>Py</strong>-Match</span>
13
+ </a>
14
+
15
+ <!-- Primary navigation for assessment types -->
16
+ <nav class="primary-nav" aria-label="Assessment navigation">
17
+ <a routerLink="/question-answer" [queryParams]="{ role: 'marriage' }" class="nav-link">
18
+ <i class="fa-solid fa-ring nav-link__icon" aria-hidden="true"></i>
19
+ <span>Marriage</span>
20
+ </a>
21
+ <a routerLink="/question-answer" [queryParams]="{ role: 'interview' }" class="nav-link">
22
+ <i class="fa-solid fa-user-tie nav-link__icon" aria-hidden="true"></i>
23
+ <span>Interview</span>
24
+ </a>
25
+ <a routerLink="/question-answer" [queryParams]="{ role: 'partnership' }" class="nav-link">
26
+ <i class="fa-solid fa-handshake nav-link__icon" aria-hidden="true"></i>
27
+ <span>Partnership</span>
28
+ </a>
29
+ </nav>
30
 
31
  <nav class="actions" aria-label="Actions">
32
+ <ng-container *ngIf="!isSignedIn; else signedInBlock">
33
+ <button type="button" class="btn btn-primary" (click)="openSignUp()">{{ tr('signup') }}</button>
34
+ <button type="button" class="btn btn-ghost" (click)="openSignIn()">{{ tr('signin') }}</button>
35
+ </ng-container>
36
+ <ng-template #signedInBlock>
37
+ <button type="button" class="profile-btn" aria-label="Profile">
38
+ <i class="fa-solid fa-user" aria-hidden="true"></i>
39
+ </button>
40
+ <button type="button" class="btn btn-ghost" (click)="signOut()">Sign out</button>
41
+ </ng-template>
42
  </nav>
43
  </header>
44
 
 
48
  <h1 class="hero__title">{{ tr('tagline') }}</h1>
49
  <p class="hero__text">{{ tr('subtext') }}</p>
50
  <div class="cta">
51
+ <button type="button"
52
+ class="btn btn-ghost"
53
+ (click)="openAbout()"
54
+ aria-haspopup="dialog"
55
+ aria-controls="aboutDialog"
56
+ [attr.aria-expanded]="isAboutOpen ? 'true' : 'false'">
57
+ Know more
58
+ </button>
 
 
 
59
  </div>
60
  </div>
61
  </main>
62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
64
  <!-- AUTH MODAL OVERLAY (unchanged) -->
65
  <div class="modal-backdrop" *ngIf="modal" (click)="backdropClick($event)">
 
94
  </div>
95
 
96
  <div class="about-modal__body">
97
+ <h1>Your Ideal Match Awaits</h1>
98
+ <p><strong>Py-Match</strong> is an advanced personality assessment tool designed to help individuals find the ideal match based on their core personality traits. The system uses a series of adaptive questions that are tailored to each user's profile. Each response is mapped to one of four core personality profiles, which represent different dominant behavioral tendencies. As users progress through the assessment, the platform continuously adapts, ensuring that the questions remain relevant and engaging, ultimately providing a more accurate personality profile.</p>
99
+
100
+ <p>The primary goal of <strong>Py-Match</strong> is to offer data-driven, personalized matches for various scenarios such as marriage compatibility, business partnerships, and leadership fit. By comparing the individual's personality profile to role-specific templates, the platform ensures that the match is based on both complementary and compatible traits. This sophisticated matching engine provides an in-depth, personalized experience while maintaining strict privacy standards. With a focus on both accuracy and user confidentiality, <strong>Py-Match</strong> guarantees that sensitive information is securely stored, offering users peace of mind while they explore the platform's potential.</p>
101
  </div>
102
  </div>
103
 
104
  </section>
105
+
106
+ <!-- Cards Section -->
107
+ <section class="cards">
108
+ <div class="card">
109
+ <img src="assets/ring.png" alt="Marriage Match">
110
+ <h3><b>Marriage Match</b></h3>
111
+ <p>
112
+ Find the right life partner, beyond surface-level details.<br>
113
+ This analyzes values, habits, and personality traits such as analytical, organized, decisive, and creative.<br>
114
+ Understand true compatibility.<br>
115
+ See strengths and differences clearly.<br>
116
+ Make informed decisions for a lasting relationship.
117
+ </p>
118
+ </div>
119
+ <div class="card">
120
+ <img src="assets/Hiring.png" alt="Interview & Hiring Match">
121
+ <h3><b>Interview & Hiring Match</b></h3>
122
+ <p>
123
+ Recruit with confidence, powered by science.<br>
124
+ Spot hidden strengths and leadership potential.<br>
125
+ Match candidates to roles where they'll thrive.<br>
126
+ Build balanced, high-performing teams.
127
+ </p>
128
+ </div>
129
+ <div class="card">
130
+ <img src="assets/business.png" alt="Business Partner Match">
131
+ <h3><b>Business Partner Match</b></h3>
132
+ <p>
133
+ Choose partners who complement your strengths.<br>
134
+ Identify complementary skills and leadership styles.<br>
135
+ Reduce risks of conflict in decision-making.<br>
136
+ Build stronger, trust-based collaborations.
137
+ </p>
138
+ </div>
139
+ </section>
140
+
141
+ <!-- Scrolling Images -->
142
+ <div class="scroll-container">
143
+ <div class="scroll-images">
144
+ <!-- Sequence A -->
145
+ <img src="assets/small-img/1.png" alt="smallImage">
146
+ <img src="assets/small-img/2.png" alt="smallImage">
147
+ <img src="assets/small-img/3.png" alt="smallImage">
148
+ <img src="assets/small-img/4.png" alt="smallImage">
149
+ <img src="assets/small-img/5.png" alt="smallImage">
150
+ <img src="assets/small-img/6.png" alt="smallImage">
151
+ <img src="assets/small-img/7.png" alt="smallImage">
152
+ <img src="assets/small-img/8.png" alt="smallImage">
153
+ <img src="assets/small-img/9.png" alt="smallImage">
154
+ <img src="assets/small-img/10.png" alt="smallImage">
155
+ <img src="assets/small-img/11.png" alt="smallImage">
156
+ <img src="assets/small-img/12.png" alt="smallImage">
157
+ <img src="assets/small-img/13.png" alt="smallImage">
158
+ <img src="assets/small-img/14.png" alt="smallImage">
159
+ <img src="assets/small-img/15.png" alt="smallImage">
160
+ <img src="assets/small-img/16.png" alt="smallImage">
161
+ <img src="assets/small-img/17.png" alt="smallImage">
162
+ <img src="assets/small-img/18.png" alt="smallImage">
163
+ <img src="assets/small-img/19.png" alt="smallImage">
164
+ <img src="assets/small-img/20.png" alt="smallImage">
165
+ <img src="assets/small-img/21.png" alt="smallImage">
166
+ <img src="assets/small-img/22.png" alt="smallImage">
167
+ <img src="assets/small-img/24.png" alt="smallImage">
168
+ <img src="assets/small-img/26.png" alt="smallImage">
169
+ <img src="assets/small-img/28.png" alt="smallImage">
170
+ <!-- Sequence B (duplicate for seamless loop) -->
171
+ <img src="assets/small-img/1.png" alt="smallImage">
172
+ <img src="assets/small-img/2.png" alt="smallImage">
173
+ <img src="assets/small-img/3.png" alt="smallImage">
174
+ <img src="assets/small-img/4.png" alt="smallImage">
175
+ <img src="assets/small-img/5.png" alt="smallImage">
176
+ <img src="assets/small-img/6.png" alt="smallImage">
177
+ <img src="assets/small-img/7.png" alt="smallImage">
178
+ <img src="assets/small-img/8.png" alt="smallImage">
179
+ <img src="assets/small-img/9.png" alt="smallImage">
180
+ <img src="assets/small-img/10.png" alt="smallImage">
181
+ <img src="assets/small-img/11.png" alt="smallImage">
182
+ <img src="assets/small-img/12.png" alt="smallImage">
183
+ <img src="assets/small-img/13.png" alt="smallImage">
184
+ <img src="assets/small-img/14.png" alt="smallImage">
185
+ <img src="assets/small-img/15.png" alt="smallImage">
186
+ <img src="assets/small-img/16.png" alt="smallImage">
187
+ <img src="assets/small-img/17.png" alt="smallImage">
188
+ <img src="assets/small-img/18.png" alt="smallImage">
189
+ <img src="assets/small-img/19.png" alt="smallImage">
190
+ <img src="assets/small-img/20.png" alt="smallImage">
191
+ <img src="assets/small-img/21.png" alt="smallImage">
192
+ <img src="assets/small-img/22.png" alt="smallImage">
193
+ <img src="assets/small-img/24.png" alt="smallImage">
194
+ <img src="assets/small-img/26.png" alt="smallImage">
195
+ <img src="assets/small-img/28.png" alt="smallImage">
196
+ </div>
197
+ </div>
198
+
199
+ <!-- Special Content as Card -->
200
+ <section class="special-content">
201
+ <div class="card special-card">
202
+ <h3><b>Why Py-Match is Special?</b></h3>
203
+ <p>
204
+ <strong>Py-Match</strong> isn't just about data — it's about people.<br>
205
+ Using cutting-edge technology and psychology-based personality models, <strong>Py-Match</strong> decodes human compatibility.<br>
206
+ Whether in love, business, or recruitment, <strong>Py-Match</strong> gives you clarity and confidence.<br>
207
+ It's science made simple, to help you make life's most important decisions wisely.
208
+ </p>
209
+ </div>
210
+ </section>
211
+
212
+ <!-- Footer (now fixed) -->
213
+ <footer>
214
+ <p>© 2025 Pykara Technologies Pvt. Ltd. All rights reserved.</p>
215
+ <div class="footer-links">
216
+ <a href="#">About Us</a> |
217
+ <a href="#">Contact</a> |
218
+ <a href="#">Privacy Policy</a> |
219
+ <a href="#">Terms & Conditions</a>
220
+ </div>
221
+ <div class="social-icons">
222
+ <a href="#" class="social-icon facebook" aria-label="Facebook">
223
+ <i class="fab fa-facebook-f"></i>
224
+ </a>
225
+ <a href="#" class="social-icon youtube" aria-label="YouTube">
226
+ <i class="fab fa-youtube"></i>
227
+ </a>
228
+ <a href="#" class="social-icon linkedin" aria-label="LinkedIn">
229
+ <i class="fab fa-linkedin-in"></i>
230
+ </a>
231
+ <a href="#" class="social-icon instagram" aria-label="Instagram">
232
+ <i class="fab fa-instagram"></i>
233
+ </a>
234
+ </div>
235
+ </footer>
src/app/intro-page/intro-page.component.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Component, ChangeDetectionStrategy, HostListener } from '@angular/core';
2
  import { CommonModule } from '@angular/common';
3
  import { RouterLink } from '@angular/router';
4
  import { SignInComponent } from '../auth/sign-in/sign-in.component';
@@ -19,6 +19,7 @@ export class IntroPageComponent {
19
  isSignedIn = false;
20
  isAboutOpen = false;
21
 
 
22
  // --- Auth modal handlers ---
23
  openSignIn(): void {
24
  this.modal = 'signin';
@@ -33,6 +34,7 @@ export class IntroPageComponent {
33
  closeModal(): void {
34
  this.modal = null;
35
  if (!this.isAboutOpen) document.body.style.overflow = '';
 
36
  }
37
 
38
 
@@ -48,6 +50,14 @@ export class IntroPageComponent {
48
  this.modal = 'signin';
49
  // You can optionally show a success message here
50
  alert('Sign up successful! Please sign in to continue.');
 
 
 
 
 
 
 
 
51
  }
52
 
53
  backdropClick(e: MouseEvent): void {
@@ -62,12 +72,14 @@ export class IntroPageComponent {
62
  document.body.style.overflow = 'hidden';
63
  // Move focus into the dialog for accessibility
64
  setTimeout(() => document.getElementById('aboutDialog')?.focus(), 0);
 
65
  }
66
 
67
  closeAbout(): void {
68
  this.isAboutOpen = false;
69
  // If Auth is also open, keep scroll locked. Otherwise restore.
70
  if (!this.modal) document.body.style.overflow = '';
 
71
  }
72
 
73
  // --- Global ESC handler closes whichever is open ---
@@ -76,16 +88,22 @@ export class IntroPageComponent {
76
  if (this.modal) this.closeModal();
77
  else if (this.isAboutOpen) this.closeAbout();
78
  }
79
-
 
 
 
 
 
80
  // Your existing i18n helper, keep as-is if already present:
81
  tr(key: string): string {
82
  const dict = {
83
  brand: 'Py-Match',
84
  signup: 'Sign up',
85
  signin: 'Sign in',
86
- tagline: 'Better match starts here',
87
- subtext: 'Designed for trust, focused on fit.',
88
- getStarted: 'Get started'
 
89
  };
90
  return dict[key as keyof typeof dict] ?? key;
91
  }
 
1
+ import { Component, ChangeDetectionStrategy, HostListener, ChangeDetectorRef } from '@angular/core';
2
  import { CommonModule } from '@angular/common';
3
  import { RouterLink } from '@angular/router';
4
  import { SignInComponent } from '../auth/sign-in/sign-in.component';
 
19
  isSignedIn = false;
20
  isAboutOpen = false;
21
 
22
+ constructor(private cdr: ChangeDetectorRef) { }
23
  // --- Auth modal handlers ---
24
  openSignIn(): void {
25
  this.modal = 'signin';
 
34
  closeModal(): void {
35
  this.modal = null;
36
  if (!this.isAboutOpen) document.body.style.overflow = '';
37
+ this.cdr.markForCheck();
38
  }
39
 
40
 
 
50
  this.modal = 'signin';
51
  // You can optionally show a success message here
52
  alert('Sign up successful! Please sign in to continue.');
53
+ this.cdr.markForCheck();
54
+ }
55
+
56
+ signOut(): void {
57
+ this.isSignedIn = false;
58
+ // Clear any persisted auth if used later
59
+ localStorage.removeItem('auth_token');
60
+ this.cdr.markForCheck();
61
  }
62
 
63
  backdropClick(e: MouseEvent): void {
 
72
  document.body.style.overflow = 'hidden';
73
  // Move focus into the dialog for accessibility
74
  setTimeout(() => document.getElementById('aboutDialog')?.focus(), 0);
75
+ this.cdr.markForCheck();
76
  }
77
 
78
  closeAbout(): void {
79
  this.isAboutOpen = false;
80
  // If Auth is also open, keep scroll locked. Otherwise restore.
81
  if (!this.modal) document.body.style.overflow = '';
82
+ this.cdr.markForCheck();
83
  }
84
 
85
  // --- Global ESC handler closes whichever is open ---
 
88
  if (this.modal) this.closeModal();
89
  else if (this.isAboutOpen) this.closeAbout();
90
  }
91
+ scrollToContent() {
92
+ const element = document.getElementById('content-sections');
93
+ if (element) {
94
+ element.scrollIntoView({ behavior: 'smooth' });
95
+ }
96
+ }
97
  // Your existing i18n helper, keep as-is if already present:
98
  tr(key: string): string {
99
  const dict = {
100
  brand: 'Py-Match',
101
  signup: 'Sign up',
102
  signin: 'Sign in',
103
+ tagline: 'Smarter matches, powered by personality science.',
104
+ subtext: 'Discover compatibility in love, business, and careers with AI-driven personality insights.',
105
+ /* getStarted: 'Get started',*/
106
+ exploreFeatures: 'Explore our features below'
107
  };
108
  return dict[key as keyof typeof dict] ?? key;
109
  }