diff --git a/public/images/roles/better_graphic.jpg b/public/images/roles/better_graphic.jpg
new file mode 100644
index 0000000..6d015dd
Binary files /dev/null and b/public/images/roles/better_graphic.jpg differ
diff --git a/public/images/roles/better_job.jpg b/public/images/roles/better_job.jpg
new file mode 100644
index 0000000..4c67052
Binary files /dev/null and b/public/images/roles/better_job.jpg differ
diff --git a/public/images/roles/better_service.jpg b/public/images/roles/better_service.jpg
new file mode 100644
index 0000000..883a531
Binary files /dev/null and b/public/images/roles/better_service.jpg differ
diff --git a/public/images/roles/catering_services.jpg b/public/images/roles/catering_services.jpg
new file mode 100644
index 0000000..e38fed1
Binary files /dev/null and b/public/images/roles/catering_services.jpg differ
diff --git a/public/images/roles/company.jpg b/public/images/roles/company.jpg
new file mode 100644
index 0000000..b090505
Binary files /dev/null and b/public/images/roles/company.jpg differ
diff --git a/public/images/roles/developer.jpg b/public/images/roles/developer.jpg
new file mode 100644
index 0000000..d83831a
Binary files /dev/null and b/public/images/roles/developer.jpg differ
diff --git a/public/images/roles/fitness_trainer.jpg b/public/images/roles/fitness_trainer.jpg
new file mode 100644
index 0000000..4c67052
Binary files /dev/null and b/public/images/roles/fitness_trainer.jpg differ
diff --git a/public/images/roles/graphic_designer.jpg b/public/images/roles/graphic_designer.jpg
new file mode 100644
index 0000000..13ac876
Binary files /dev/null and b/public/images/roles/graphic_designer.jpg differ
diff --git a/public/images/roles/job_seeker.jpg b/public/images/roles/job_seeker.jpg
new file mode 100644
index 0000000..4c67052
Binary files /dev/null and b/public/images/roles/job_seeker.jpg differ
diff --git a/public/images/roles/makeup_artist.jpg b/public/images/roles/makeup_artist.jpg
new file mode 100644
index 0000000..c0161ab
Binary files /dev/null and b/public/images/roles/makeup_artist.jpg differ
diff --git a/public/images/roles/photographer.jpg b/public/images/roles/photographer.jpg
new file mode 100644
index 0000000..83be023
Binary files /dev/null and b/public/images/roles/photographer.jpg differ
diff --git a/public/images/roles/service_seeker.jpg b/public/images/roles/service_seeker.jpg
new file mode 100644
index 0000000..4970d7e
Binary files /dev/null and b/public/images/roles/service_seeker.jpg differ
diff --git a/public/images/roles/social_media_manager.jpg b/public/images/roles/social_media_manager.jpg
new file mode 100644
index 0000000..80e1aa6
Binary files /dev/null and b/public/images/roles/social_media_manager.jpg differ
diff --git a/public/images/roles/test_camera.jpg b/public/images/roles/test_camera.jpg
new file mode 100644
index 0000000..e3897ee
Binary files /dev/null and b/public/images/roles/test_camera.jpg differ
diff --git a/public/images/roles/test_fitness.jpg b/public/images/roles/test_fitness.jpg
new file mode 100644
index 0000000..218939c
Binary files /dev/null and b/public/images/roles/test_fitness.jpg differ
diff --git a/public/images/roles/test_job.jpg b/public/images/roles/test_job.jpg
new file mode 100644
index 0000000..208f406
Binary files /dev/null and b/public/images/roles/test_job.jpg differ
diff --git a/public/images/roles/test_makeup.jpg b/public/images/roles/test_makeup.jpg
new file mode 100644
index 0000000..4c67052
Binary files /dev/null and b/public/images/roles/test_makeup.jpg differ
diff --git a/public/images/roles/test_makeup2.jpg b/public/images/roles/test_makeup2.jpg
new file mode 100644
index 0000000..7ed0509
Binary files /dev/null and b/public/images/roles/test_makeup2.jpg differ
diff --git a/public/images/roles/test_makeup3.jpg b/public/images/roles/test_makeup3.jpg
new file mode 100644
index 0000000..9d35656
Binary files /dev/null and b/public/images/roles/test_makeup3.jpg differ
diff --git a/public/images/roles/test_makeup4.jpg b/public/images/roles/test_makeup4.jpg
new file mode 100644
index 0000000..71e15ca
Binary files /dev/null and b/public/images/roles/test_makeup4.jpg differ
diff --git a/public/images/roles/test_service.jpg b/public/images/roles/test_service.jpg
new file mode 100644
index 0000000..b3da059
Binary files /dev/null and b/public/images/roles/test_service.jpg differ
diff --git a/public/images/roles/test_social.jpg b/public/images/roles/test_social.jpg
new file mode 100644
index 0000000..a63157d
Binary files /dev/null and b/public/images/roles/test_social.jpg differ
diff --git a/public/images/roles/test_social2.jpg b/public/images/roles/test_social2.jpg
new file mode 100644
index 0000000..91c4a1a
Binary files /dev/null and b/public/images/roles/test_social2.jpg differ
diff --git a/public/images/roles/test_video.jpg b/public/images/roles/test_video.jpg
new file mode 100644
index 0000000..54631b1
Binary files /dev/null and b/public/images/roles/test_video.jpg differ
diff --git a/public/images/roles/test_video2.jpg b/public/images/roles/test_video2.jpg
new file mode 100644
index 0000000..8bdcf24
Binary files /dev/null and b/public/images/roles/test_video2.jpg differ
diff --git a/public/images/roles/tutor.jpg b/public/images/roles/tutor.jpg
new file mode 100644
index 0000000..9898f3b
Binary files /dev/null and b/public/images/roles/tutor.jpg differ
diff --git a/public/images/roles/video_editor.jpg b/public/images/roles/video_editor.jpg
new file mode 100644
index 0000000..4c67052
Binary files /dev/null and b/public/images/roles/video_editor.jpg differ
diff --git a/src/app.css b/src/app.css
index e55d733..0de5d2e 100644
--- a/src/app.css
+++ b/src/app.css
@@ -24,10 +24,7 @@ body {
font-family: 'Exo 2', sans-serif;
color: var(--ink);
scrollbar-gutter: stable;
- background:
- radial-gradient(120% 90% at 0% 0%, rgba(253, 98, 22, 0.22), transparent 52%),
- radial-gradient(100% 80% at 100% 0%, rgba(26, 54, 93, 0.16), transparent 56%),
- linear-gradient(180deg, #fff9f4 0%, #f8f9ff 48%, #eef2ff 100%);
+ background: #07051a;
}
.container {
@@ -1798,13 +1795,19 @@ body {
min-height: 100vh;
overflow-x: clip;
isolation: isolate;
+ background: #07051a;
+}
+
+.lp-main > *:not(.lp-bg) {
+ position: relative;
+ z-index: 1;
}
.lp-bg {
pointer-events: none;
position: fixed;
inset: 0;
- z-index: -1;
+ z-index: 0;
}
.lp-dark-base {
@@ -2863,6 +2866,166 @@ body {
width: min(680px, calc(100% - 32px));
}
+.onboarding-auth-layout {
+ align-items: start;
+ padding-top: 36px;
+ padding-bottom: 36px;
+}
+
+.onboarding-auth-form {
+ padding: 18px 20px 22px;
+}
+
+.onboarding-auth-actions {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 10px;
+ margin-top: 12px;
+}
+
+.onboarding-primary-btn {
+ margin-top: 0;
+ width: 100%;
+}
+
+.onboarding-auth-form .error {
+ color: #6e7591;
+}
+
+.onboarding-progress {
+ width: 100%;
+ height: 8px;
+ border-radius: 999px;
+ background: #eceff5;
+ overflow: hidden;
+ margin-top: 8px;
+ margin-bottom: 10px;
+}
+
+.onboarding-progress-fill {
+ height: 100%;
+ border-radius: 999px;
+ background: #fd6216;
+ transition: width 220ms ease;
+}
+
+.multi-select-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
+ gap: 8px;
+}
+
+.multi-select-option {
+ width: 100%;
+ min-height: 44px;
+ border-radius: 12px;
+ border: 1px solid #cfd4e3;
+ background: #f8fafc;
+ color: #3f4967;
+ padding: 10px 12px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 8px;
+ text-align: left;
+ cursor: pointer;
+ transition: border-color 160ms ease, background-color 160ms ease, color 160ms ease, box-shadow 160ms ease;
+}
+
+.multi-select-option:hover {
+ border-color: #fdc9ad;
+ background: #fff4ee;
+}
+
+.multi-select-option.is-selected {
+ border-color: #fd6216;
+ background: #fff2ea;
+ color: #2c3551;
+ box-shadow: 0 0 0 1px rgba(253, 98, 22, 0.12);
+}
+
+.multi-select-option:focus-visible {
+ outline: none;
+ border-color: #fd6216;
+ box-shadow: 0 0 0 2px #ffd8c3;
+}
+
+.multi-select-option:disabled {
+ opacity: 0.7;
+ cursor: not-allowed;
+}
+
+.multi-select-option-text {
+ font-size: 13px;
+ font-weight: 600;
+ line-height: 1.35;
+}
+
+.multi-select-tick {
+ width: 18px;
+ height: 18px;
+ border-radius: 999px;
+ border: 1px solid #d2d7e6;
+ background: #f3f5fa;
+ color: #9aa3bc;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+}
+
+.multi-select-tick svg {
+ width: 12px;
+ height: 12px;
+ fill: none;
+ stroke: currentColor;
+ stroke-width: 2.2;
+ stroke-linecap: round;
+ stroke-linejoin: round;
+ opacity: 0;
+}
+
+.multi-select-tick.is-visible {
+ border-color: #fd6216;
+ background: #fd6216;
+ color: #ffffff;
+}
+
+.multi-select-tick.is-visible svg {
+ opacity: 1;
+}
+
+.multi-select-grid.is-disabled .multi-select-option {
+ pointer-events: none;
+}
+
+.locked-input-wrap {
+ position: relative;
+}
+
+.locked-input {
+ padding-right: 40px;
+}
+
+.locked-input-icon {
+ position: absolute;
+ right: 12px;
+ top: 50%;
+ transform: translateY(-50%);
+ color: #94a3b8;
+ pointer-events: none;
+}
+
+.locked-input-icon svg {
+ width: 14px;
+ height: 14px;
+ fill: none;
+ stroke: currentColor;
+ stroke-width: 2;
+ stroke-linecap: round;
+ stroke-linejoin: round;
+}
+
.auth-visual {
min-height: 620px;
border-radius: 28px;
@@ -4572,9 +4735,9 @@ body {
min-height: 100vh;
display: flex;
flex-direction: column;
- align-items: center;
+ align-items: stretch;
justify-content: flex-start;
- padding: 24px 16px 60px;
+ padding: 0;
color: #fff;
isolation: isolate;
}
@@ -4599,7 +4762,7 @@ body {
.choose-role-header h1 {
margin: 0 0 12px;
- font-size: clamp(28px, 5vw, 40px);
+ font-size: clamp(36px, 6vw, 56px);
font-weight: 800;
color: #fff;
line-height: 1.1;
@@ -4640,7 +4803,41 @@ body {
}
.professional-roles-grid {
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+}
+
+.role-path-card {
+ appearance: none;
+ -webkit-appearance: none;
+ width: 100%;
+ padding: 0;
+ text-align: left;
+ cursor: pointer;
+}
+
+.role-path-card.selected {
+ border-color: #fd6216;
+ box-shadow: 0 0 0 2px rgba(253, 98, 22, 0.28), 0 22px 42px -30px rgba(253, 98, 22, 0.85);
+}
+
+.role-path-card .path-chip {
+ margin-left: auto;
+}
+
+.role-path-card .role-path-cta {
+ pointer-events: none;
+}
+
+@media (max-width: 1024px) {
+ .professional-roles-grid {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+}
+
+@media (max-width: 640px) {
+ .professional-roles-grid {
+ grid-template-columns: 1fr;
+ }
}
.role-card {
@@ -4652,12 +4849,11 @@ body {
gap: 12px;
padding: 28px 18px;
border-radius: 18px;
- border: 1px solid rgba(255, 255, 255, 0.15);
- background: rgba(255, 255, 255, 0.08);
- backdrop-filter: blur(12px);
+ border: 1px solid rgba(15, 23, 42, 0.12);
+ background: #ffffff;
cursor: pointer;
transition: all 240ms ease;
- box-shadow: 0 18px 36px -24px rgba(2, 6, 23, 0.5);
+ box-shadow: 0 18px 36px -24px rgba(2, 6, 23, 0.25);
}
.role-card::before {
@@ -4665,7 +4861,7 @@ body {
position: absolute;
inset: -1px;
border-radius: 18px;
- background: linear-gradient(135deg, rgba(253, 98, 22, 0), rgba(253, 98, 22, 0.15));
+ background: linear-gradient(135deg, rgba(253, 98, 22, 0), rgba(253, 98, 22, 0.08));
opacity: 0;
transition: opacity 240ms ease;
pointer-events: none;
@@ -4674,9 +4870,9 @@ body {
.role-card:hover {
border-color: rgba(253, 98, 22, 0.6);
- background: rgba(255, 255, 255, 0.15);
+ background: #ffffff;
transform: translateY(-6px);
- box-shadow: 0 24px 52px -20px rgba(253, 98, 22, 0.45);
+ box-shadow: 0 24px 52px -20px rgba(253, 98, 22, 0.3);
}
.role-card:hover::before {
@@ -4685,8 +4881,8 @@ body {
.role-card.selected {
border-color: #fd6216;
- background: rgba(253, 98, 22, 0.2);
- box-shadow: 0 0 0 2px rgba(253, 98, 22, 0.3) inset, 0 24px 52px -20px rgba(253, 98, 22, 0.5);
+ background: #ffffff;
+ box-shadow: 0 0 0 2px rgba(253, 98, 22, 0.3) inset, 0 24px 52px -20px rgba(253, 98, 22, 0.3);
}
.role-card:disabled {
@@ -4694,23 +4890,40 @@ body {
cursor: not-allowed;
}
-.role-icon {
- font-size: clamp(36px, 6vw, 48px);
- line-height: 1;
+.role-image {
display: block;
+ width: 96px;
+ height: 96px;
+ object-fit: cover;
+ border-radius: 14px;
+ border: 1px solid rgba(15, 23, 42, 0.08);
+ background: #f8fafc;
+ box-shadow: 0 10px 24px -16px rgba(15, 23, 42, 0.35);
+ transition: transform 500ms ease;
+}
+
+.role-media {
+ width: 96px;
+ height: 96px;
+ overflow: hidden;
+ border-radius: 14px;
+}
+
+.role-card:hover .role-image {
+ transform: scale(1.08);
}
.role-title {
margin: 0;
font-size: 16px;
font-weight: 700;
- color: #fff;
+ color: #0f172a;
}
.role-description {
margin: 0;
font-size: 13px;
- color: rgba(255, 255, 255, 0.75);
+ color: #475569;
line-height: 1.5;
flex-grow: 1;
}
@@ -4732,7 +4945,7 @@ body {
text-align: center;
margin-top: 48px;
padding-top: 24px;
- border-top: 1px solid rgba(255, 255, 255, 0.1);
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
}
.choose-role-footer .footer-text {
diff --git a/src/components/PublicHeader.tsx b/src/components/PublicHeader.tsx
index c20a2b4..59aedba 100644
--- a/src/components/PublicHeader.tsx
+++ b/src/components/PublicHeader.tsx
@@ -4,6 +4,7 @@ import { Show, createEffect, createSignal, onCleanup, onMount } from 'solid-js';
type PublicHeaderProps = {
loginHref?: string;
signupHref?: string;
+ showAuthActions?: boolean;
};
const isRouteActive = (pathname: string, href: string) => {
@@ -19,6 +20,7 @@ export default function PublicHeader(props: PublicHeaderProps) {
const loginHref = () => props.loginHref || '/auth/login';
const signupHref = () => props.signupHref || '/auth/register';
+ const showAuthActions = () => props.showAuthActions !== false;
onMount(() => {
const onScroll = () => setScrolled(window.scrollY > 10);
@@ -46,10 +48,12 @@ export default function PublicHeader(props: PublicHeaderProps) {
Contact Us
-
+
+
+