Spaces:
Running
Running
MAKE A WEB APP THAT HELPS IMMIGRANTS AND NON-ENGLISH AS A FIRST LANGUAGE SPEAKERS; NAVIGATE THEIR LOCAL, STATE AND FEDERAL GOVERNMENTS. ADD A SECTION THAT SHOWS THEM ALL BENEFITS AND GRANTS AVAILABLE TO THEIR NATIVE OF ORIGIN. aDD A SECTION TO LEARN eNGLISH AS WELL AS A SECTON TO EXPLORE VISAS AND BECOMING A LEGAL RESIDENT. OT WILL NEED TO BE COMPREHENDABLE IN ENGLISH PRIMARILY WITH MULTITUDES OF VARIOUS TRANSLATIONS. MAYBE IT WOULD BE GOOD TO IMPLEMENT A TRANSLATING ENGINE TO THE BACK END SO THAT ANY CHANGES IN CONTENT DONT NEED THE CONSTANT OBSERVATION TO TRANSLATION. MAKE ALL FUNCTIONS ACTIONABLE AND HAVE FOLLOWABLE LINKS THAT ACT AS NEEDED. MAKE IT LOOK DIFFERENT THAN TYPICAL VIBE CODED APPS AND SITES, ADD GAMIFICATION, HABIT TRACKING, AND A STRUCTURED MICROPAYMENT SYSTEM READY TO BE PUT IN MOTION.
Browse files- README.md +8 -5
- components/benefits.js +160 -0
- components/footer.js +131 -0
- components/gamification.js +195 -0
- components/hero.js +94 -0
- components/language.js +241 -0
- components/legal.js +169 -0
- components/navbar.js +108 -0
- index.html +47 -19
- script.js +72 -0
- style.css +16 -21
README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title: Pathway Guardian
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Pathway Guardian π‘οΈ π
|
| 3 |
+
colorFrom: pink
|
| 4 |
+
colorTo: purple
|
| 5 |
+
emoji: π³
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite-v3
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Welcome to your new DeepSite project!
|
| 13 |
+
This project was created with [DeepSite](https://huggingface.co/deepsite).
|
components/benefits.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomBenefits extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
margin-bottom: 4rem;
|
| 9 |
+
}
|
| 10 |
+
.section-header {
|
| 11 |
+
text-align: center;
|
| 12 |
+
margin-bottom: 3rem;
|
| 13 |
+
}
|
| 14 |
+
.section-title {
|
| 15 |
+
font-size: 2rem;
|
| 16 |
+
font-weight: 700;
|
| 17 |
+
color: #1e3a8a;
|
| 18 |
+
margin-bottom: 1rem;
|
| 19 |
+
}
|
| 20 |
+
.section-description {
|
| 21 |
+
font-size: 1.1rem;
|
| 22 |
+
color: #4b5563;
|
| 23 |
+
max-width: 700px;
|
| 24 |
+
margin: 0 auto;
|
| 25 |
+
}
|
| 26 |
+
.benefits-grid {
|
| 27 |
+
display: grid;
|
| 28 |
+
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
| 29 |
+
gap: 2rem;
|
| 30 |
+
}
|
| 31 |
+
.benefit-card {
|
| 32 |
+
background: white;
|
| 33 |
+
border-radius: 0.5rem;
|
| 34 |
+
overflow: hidden;
|
| 35 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
| 36 |
+
transition: transform 0.2s, box-shadow 0.2s;
|
| 37 |
+
}
|
| 38 |
+
.benefit-card:hover {
|
| 39 |
+
transform: translateY(-5px);
|
| 40 |
+
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
|
| 41 |
+
}
|
| 42 |
+
.benefit-image {
|
| 43 |
+
height: 160px;
|
| 44 |
+
background-size: cover;
|
| 45 |
+
background-position: center;
|
| 46 |
+
}
|
| 47 |
+
.benefit-content {
|
| 48 |
+
padding: 1.5rem;
|
| 49 |
+
}
|
| 50 |
+
.benefit-title {
|
| 51 |
+
font-size: 1.25rem;
|
| 52 |
+
font-weight: 600;
|
| 53 |
+
margin-bottom: 0.5rem;
|
| 54 |
+
color: #1e40af;
|
| 55 |
+
}
|
| 56 |
+
.benefit-description {
|
| 57 |
+
color: #4b5563;
|
| 58 |
+
margin-bottom: 1rem;
|
| 59 |
+
}
|
| 60 |
+
.benefit-actions {
|
| 61 |
+
display: flex;
|
| 62 |
+
justify-content: space-between;
|
| 63 |
+
align-items: center;
|
| 64 |
+
}
|
| 65 |
+
.benefit-button {
|
| 66 |
+
padding: 0.5rem 1rem;
|
| 67 |
+
background-color: #3b82f6;
|
| 68 |
+
color: white;
|
| 69 |
+
border-radius: 0.25rem;
|
| 70 |
+
font-weight: 500;
|
| 71 |
+
transition: background-color 0.2s;
|
| 72 |
+
}
|
| 73 |
+
.benefit-button:hover {
|
| 74 |
+
background-color: #2563eb;
|
| 75 |
+
}
|
| 76 |
+
.benefit-language {
|
| 77 |
+
font-size: 0.875rem;
|
| 78 |
+
color: #6b7280;
|
| 79 |
+
}
|
| 80 |
+
.country-selector {
|
| 81 |
+
display: flex;
|
| 82 |
+
justify-content: center;
|
| 83 |
+
margin-bottom: 2rem;
|
| 84 |
+
flex-wrap: wrap;
|
| 85 |
+
gap: 0.5rem;
|
| 86 |
+
}
|
| 87 |
+
.country-button {
|
| 88 |
+
padding: 0.5rem 1rem;
|
| 89 |
+
border-radius: 99px;
|
| 90 |
+
background-color: #e5e7eb;
|
| 91 |
+
color: #4b5563;
|
| 92 |
+
font-weight: 500;
|
| 93 |
+
transition: all 0.2s;
|
| 94 |
+
}
|
| 95 |
+
.country-button:hover, .country-button.active {
|
| 96 |
+
background-color: #3b82f6;
|
| 97 |
+
color: white;
|
| 98 |
+
}
|
| 99 |
+
</style>
|
| 100 |
+
<section id="benefits">
|
| 101 |
+
<div class="section-header">
|
| 102 |
+
<h2 class="section-title">Benefits & Grants Available</h2>
|
| 103 |
+
<p class="section-description">
|
| 104 |
+
Discover government programs, financial assistance, and resources tailored for immigrants from your country of origin
|
| 105 |
+
</p>
|
| 106 |
+
</div>
|
| 107 |
+
|
| 108 |
+
<div class="country-selector">
|
| 109 |
+
<button class="country-button active" data-country="all">All Countries</button>
|
| 110 |
+
<button class="country-button" data-country="mx">Mexico</button>
|
| 111 |
+
<button class="country-button" data-country="in">India</button>
|
| 112 |
+
<button class="country-button" data-country="cn">China</button>
|
| 113 |
+
<button class="country-button" data-country="ph">Philippines</button>
|
| 114 |
+
<button class="country-button" data-country="vn">Vietnam</button>
|
| 115 |
+
</div>
|
| 116 |
+
|
| 117 |
+
<div class="benefits-grid">
|
| 118 |
+
<!-- Example benefit cards (in a real app, these would be dynamically generated) -->
|
| 119 |
+
<div class="benefit-card" data-countries="mx in cn ph vn">
|
| 120 |
+
<div class="benefit-image" style="background-image: url('http://static.photos/finance/640x360/1')"></div>
|
| 121 |
+
<div class="benefit-content">
|
| 122 |
+
<h3 class="benefit-title">Financial Assistance for New Residents</h3>
|
| 123 |
+
<p class="benefit-description">Temporary financial aid for low-income immigrant families during their first year.</p>
|
| 124 |
+
<div class="benefit-actions">
|
| 125 |
+
<a href="#" class="benefit-button" target="_blank">Apply Now</a>
|
| 126 |
+
<span class="benefit-language"><i data-feather="globe" class="inline mr-1"></i> EspaΓ±ol, English</span>
|
| 127 |
+
</div>
|
| 128 |
+
</div>
|
| 129 |
+
</div>
|
| 130 |
+
|
| 131 |
+
<div class="benefit-card" data-countries="mx in ph">
|
| 132 |
+
<div class="benefit-image" style="background-image: url('http://static.photos/education/640x360/2')"></div>
|
| 133 |
+
<div class="benefit-content">
|
| 134 |
+
<h3 class="benefit-title">Education Grant Program</h3>
|
| 135 |
+
<p class="benefit-description">Scholarships for immigrants pursuing higher education or vocational training.</p>
|
| 136 |
+
<div class="benefit-actions">
|
| 137 |
+
<a href="#" class="benefit-button" target="_blank">Learn More</a>
|
| 138 |
+
<span class="benefit-language"><i data-feather="globe" class="inline mr-1"></i> English, EspaΓ±ol</span>
|
| 139 |
+
</div>
|
| 140 |
+
</div>
|
| 141 |
+
</div>
|
| 142 |
+
|
| 143 |
+
<div class="benefit-card" data-countries="all">
|
| 144 |
+
<div class="benefit-image" style="background-image: url('http://static.photos/medical/640x360/3')"></div>
|
| 145 |
+
<div class="benefit-content">
|
| 146 |
+
<h3 class="benefit-title">Healthcare Access Program</h3>
|
| 147 |
+
<p class="benefit-description">Low-cost healthcare services for uninsured immigrant families.</p>
|
| 148 |
+
<div class="benefit-actions">
|
| 149 |
+
<a href="#" class="benefit-button" target="_blank">Find Providers</a>
|
| 150 |
+
<span class="benefit-language"><i data-feather="globe" class="inline mr-1"></i> Multiple Languages</span>
|
| 151 |
+
</div>
|
| 152 |
+
</div>
|
| 153 |
+
</div>
|
| 154 |
+
</div>
|
| 155 |
+
</section>
|
| 156 |
+
`;
|
| 157 |
+
}
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
customElements.define('custom-benefits', CustomBenefits);
|
components/footer.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomFooter extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
background-color: #1e3a8a;
|
| 9 |
+
color: white;
|
| 10 |
+
padding: 3rem 1rem;
|
| 11 |
+
font-size: 0.875rem;
|
| 12 |
+
}
|
| 13 |
+
.footer-container {
|
| 14 |
+
max-width: 1280px;
|
| 15 |
+
margin: 0 auto;
|
| 16 |
+
display: grid;
|
| 17 |
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
| 18 |
+
gap: 2rem;
|
| 19 |
+
}
|
| 20 |
+
.footer-logo {
|
| 21 |
+
font-size: 1.25rem;
|
| 22 |
+
font-weight: 700;
|
| 23 |
+
display: flex;
|
| 24 |
+
align-items: center;
|
| 25 |
+
gap: 0.5rem;
|
| 26 |
+
margin-bottom: 1rem;
|
| 27 |
+
}
|
| 28 |
+
.footer-description {
|
| 29 |
+
opacity: 0.8;
|
| 30 |
+
margin-bottom: 1.5rem;
|
| 31 |
+
}
|
| 32 |
+
.footer-links {
|
| 33 |
+
display: flex;
|
| 34 |
+
flex-direction: column;
|
| 35 |
+
gap: 0.75rem;
|
| 36 |
+
}
|
| 37 |
+
.footer-link {
|
| 38 |
+
opacity: 0.8;
|
| 39 |
+
transition: opacity 0.2s;
|
| 40 |
+
}
|
| 41 |
+
.footer-link:hover {
|
| 42 |
+
opacity: 1;
|
| 43 |
+
}
|
| 44 |
+
.footer-heading {
|
| 45 |
+
font-weight: 600;
|
| 46 |
+
margin-bottom: 1rem;
|
| 47 |
+
font-size: 1rem;
|
| 48 |
+
}
|
| 49 |
+
.social-links {
|
| 50 |
+
display: flex;
|
| 51 |
+
gap: 1rem;
|
| 52 |
+
margin-top: 1rem;
|
| 53 |
+
}
|
| 54 |
+
.social-link {
|
| 55 |
+
width: 36px;
|
| 56 |
+
height: 36px;
|
| 57 |
+
border-radius: 50%;
|
| 58 |
+
background-color: rgba(255, 255, 255, 0.1);
|
| 59 |
+
display: flex;
|
| 60 |
+
align-items: center;
|
| 61 |
+
justify-content: center;
|
| 62 |
+
transition: background-color 0.2s;
|
| 63 |
+
}
|
| 64 |
+
.social-link:hover {
|
| 65 |
+
background-color: rgba(255, 255, 255, 0.2);
|
| 66 |
+
}
|
| 67 |
+
.copyright {
|
| 68 |
+
max-width: 1280px;
|
| 69 |
+
margin: 2rem auto 0;
|
| 70 |
+
padding-top: 2rem;
|
| 71 |
+
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
| 72 |
+
text-align: center;
|
| 73 |
+
opacity: 0.6;
|
| 74 |
+
}
|
| 75 |
+
</style>
|
| 76 |
+
<div class="footer-container">
|
| 77 |
+
<div>
|
| 78 |
+
<div class="footer-logo">
|
| 79 |
+
<i data-feather="shield"></i>
|
| 80 |
+
Pathway Guardian
|
| 81 |
+
</div>
|
| 82 |
+
<p class="footer-description">
|
| 83 |
+
Helping immigrants and non-English speakers navigate government services, learn English, and build better lives.
|
| 84 |
+
</p>
|
| 85 |
+
<div class="social-links">
|
| 86 |
+
<a href="#" class="social-link"><i data-feather="facebook"></i></a>
|
| 87 |
+
<a href="#" class="social-link"><i data-feather="twitter"></i></a>
|
| 88 |
+
<a href="#" class="social-link"><i data-feather="instagram"></i></a>
|
| 89 |
+
<a href="#" class="social-link"><i data-feather="youtube"></i></a>
|
| 90 |
+
</div>
|
| 91 |
+
</div>
|
| 92 |
+
|
| 93 |
+
<div>
|
| 94 |
+
<h4 class="footer-heading">Resources</h4>
|
| 95 |
+
<div class="footer-links">
|
| 96 |
+
<a href="#benefits" class="footer-link">Benefits Finder</a>
|
| 97 |
+
<a href="#language" class="footer-link">English Learning</a>
|
| 98 |
+
<a href="#legal" class="footer-link">Legal Resources</a>
|
| 99 |
+
<a href="#progress" class="footer-link">Progress Tracker</a>
|
| 100 |
+
</div>
|
| 101 |
+
</div>
|
| 102 |
+
|
| 103 |
+
<div>
|
| 104 |
+
<h4 class="footer-heading">Government</h4>
|
| 105 |
+
<div class="footer-links">
|
| 106 |
+
<a href="#" class="footer-link" target="_blank">Federal</a>
|
| 107 |
+
<a href="#" class="footer-link" target="_blank">State</a>
|
| 108 |
+
<a href="#" class="footer-link" target="_blank">Local</a>
|
| 109 |
+
<a href="#" class="footer-link" target="_blank">Contact Officials</a>
|
| 110 |
+
</div>
|
| 111 |
+
</div>
|
| 112 |
+
|
| 113 |
+
<div>
|
| 114 |
+
<h4 class="footer-heading">Support</h4>
|
| 115 |
+
<div class="footer-links">
|
| 116 |
+
<a href="#" class="footer-link">Help Center</a>
|
| 117 |
+
<a href="#" class="footer-link">Community</a>
|
| 118 |
+
<a href="#" class="footer-link">Feedback</a>
|
| 119 |
+
<a href="#" class="footer-link">Donate</a>
|
| 120 |
+
</div>
|
| 121 |
+
</div>
|
| 122 |
+
</div>
|
| 123 |
+
|
| 124 |
+
<div class="copyright">
|
| 125 |
+
Β© 2023 Pathway Guardian. All rights reserved.
|
| 126 |
+
</div>
|
| 127 |
+
`;
|
| 128 |
+
}
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
customElements.define('custom-footer', CustomFooter);
|
components/gamification.js
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomGamification extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
margin-bottom: 4rem;
|
| 9 |
+
}
|
| 10 |
+
.gamification-section {
|
| 11 |
+
background-color: white;
|
| 12 |
+
border-radius: 0.5rem;
|
| 13 |
+
padding: 2rem;
|
| 14 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
| 15 |
+
}
|
| 16 |
+
.section-header {
|
| 17 |
+
text-align: center;
|
| 18 |
+
margin-bottom: 2rem;
|
| 19 |
+
}
|
| 20 |
+
.section-title {
|
| 21 |
+
font-size: 2rem;
|
| 22 |
+
font-weight: 700;
|
| 23 |
+
color: #1e3a8a;
|
| 24 |
+
margin-bottom: 1rem;
|
| 25 |
+
}
|
| 26 |
+
.section-description {
|
| 27 |
+
font-size: 1.1rem;
|
| 28 |
+
color: #4b5563;
|
| 29 |
+
max-width: 700px;
|
| 30 |
+
margin: 0 auto;
|
| 31 |
+
}
|
| 32 |
+
.rewards-container {
|
| 33 |
+
display: grid;
|
| 34 |
+
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
| 35 |
+
gap: 2rem;
|
| 36 |
+
margin-top: 2rem;
|
| 37 |
+
}
|
| 38 |
+
.reward-card {
|
| 39 |
+
border-radius: 0.5rem;
|
| 40 |
+
overflow: hidden;
|
| 41 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
| 42 |
+
transition: transform 0.2s, box-shadow 0.2s;
|
| 43 |
+
position: relative;
|
| 44 |
+
}
|
| 45 |
+
.reward-card:hover {
|
| 46 |
+
transform: translateY(-5px);
|
| 47 |
+
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
|
| 48 |
+
}
|
| 49 |
+
.reward-image {
|
| 50 |
+
height: 160px;
|
| 51 |
+
background-size: cover;
|
| 52 |
+
background-position: center;
|
| 53 |
+
}
|
| 54 |
+
.reward-content {
|
| 55 |
+
padding: 1.5rem;
|
| 56 |
+
}
|
| 57 |
+
.reward-title {
|
| 58 |
+
font-size: 1.25rem;
|
| 59 |
+
font-weight: 600;
|
| 60 |
+
margin-bottom: 0.5rem;
|
| 61 |
+
color: #1e40af;
|
| 62 |
+
}
|
| 63 |
+
.reward-description {
|
| 64 |
+
color: #6b7280;
|
| 65 |
+
margin-bottom: 1rem;
|
| 66 |
+
}
|
| 67 |
+
.reward-points {
|
| 68 |
+
display: inline-block;
|
| 69 |
+
padding: 0.25rem 0.5rem;
|
| 70 |
+
background-color: #dbeafe;
|
| 71 |
+
color: #1d4ed8;
|
| 72 |
+
border-radius: 99px;
|
| 73 |
+
font-weight: 600;
|
| 74 |
+
font-size: 0.875rem;
|
| 75 |
+
margin-bottom: 1rem;
|
| 76 |
+
}
|
| 77 |
+
.reward-button {
|
| 78 |
+
display: inline-block;
|
| 79 |
+
padding: 0.5rem 1rem;
|
| 80 |
+
background-color: #3b82f6;
|
| 81 |
+
color: white;
|
| 82 |
+
border-radius: 0.25rem;
|
| 83 |
+
font-weight: 500;
|
| 84 |
+
transition: background-color 0.2s;
|
| 85 |
+
}
|
| 86 |
+
.reward-button:hover {
|
| 87 |
+
background-color: #2563eb;
|
| 88 |
+
}
|
| 89 |
+
.reward-badge {
|
| 90 |
+
position: absolute;
|
| 91 |
+
top: 1rem;
|
| 92 |
+
right: 1rem;
|
| 93 |
+
background-color: #f59e0b;
|
| 94 |
+
color: white;
|
| 95 |
+
padding: 0.25rem 0.75rem;
|
| 96 |
+
border-radius: 99px;
|
| 97 |
+
font-weight: 600;
|
| 98 |
+
font-size: 0.75rem;
|
| 99 |
+
text-transform: uppercase;
|
| 100 |
+
}
|
| 101 |
+
.payment-system {
|
| 102 |
+
margin-top: 3rem;
|
| 103 |
+
background-color: #f9fafb;
|
| 104 |
+
border-radius: 0.5rem;
|
| 105 |
+
padding: 2rem;
|
| 106 |
+
text-align: center;
|
| 107 |
+
}
|
| 108 |
+
.payment-title {
|
| 109 |
+
font-size: 1.5rem;
|
| 110 |
+
font-weight: 600;
|
| 111 |
+
color: #1e3a8a;
|
| 112 |
+
margin-bottom: 1rem;
|
| 113 |
+
}
|
| 114 |
+
.payment-description {
|
| 115 |
+
color: #6b7280;
|
| 116 |
+
margin-bottom: 1.5rem;
|
| 117 |
+
max-width: 600px;
|
| 118 |
+
margin-left: auto;
|
| 119 |
+
margin-right: auto;
|
| 120 |
+
}
|
| 121 |
+
.payment-button {
|
| 122 |
+
padding: 0.75rem 1.5rem;
|
| 123 |
+
background-color: #10b981;
|
| 124 |
+
color: white;
|
| 125 |
+
border-radius: 0.5rem;
|
| 126 |
+
font-weight: 600;
|
| 127 |
+
transition: background-color 0.2s;
|
| 128 |
+
display: inline-block;
|
| 129 |
+
}
|
| 130 |
+
.payment-button:hover {
|
| 131 |
+
background-color: #059669;
|
| 132 |
+
}
|
| 133 |
+
</style>
|
| 134 |
+
<section id="gamification" class="gamification-section">
|
| 135 |
+
<div class="section-header">
|
| 136 |
+
<h2 class="section-title">Earn Rewards & Micro-Payments</h2>
|
| 137 |
+
<p class="section-description">
|
| 138 |
+
Complete tasks, learn skills, and navigate government systems to earn points redeemable for cash or services
|
| 139 |
+
</p>
|
| 140 |
+
</div>
|
| 141 |
+
|
| 142 |
+
<div class="rewards-container">
|
| 143 |
+
<div class="reward-card pulse">
|
| 144 |
+
<div class="reward-image" style="background-image: url('http://static.photos/retail/640x360/5')">
|
| 145 |
+
<span class="reward-badge">Featured</span>
|
| 146 |
+
</div>
|
| 147 |
+
<div class="reward-content">
|
| 148 |
+
<h3 class="reward-title">Complete Immigration Forms</h3>
|
| 149 |
+
<p class="reward-description">
|
| 150 |
+
Earn $5 for completing each required government form with our guidance system.
|
| 151 |
+
</p>
|
| 152 |
+
<div class="reward-points">500 pts</div>
|
| 153 |
+
<a href="#" class="reward-button">Learn More</a>
|
| 154 |
+
</div>
|
| 155 |
+
</div>
|
| 156 |
+
|
| 157 |
+
<div class="reward-card">
|
| 158 |
+
<div class="reward-image" style="background-image: url('http://static.photos/education/640x360/6')"></div>
|
| 159 |
+
<div class="reward-content">
|
| 160 |
+
<h3 class="reward-title">Attend English Class</h3>
|
| 161 |
+
<p class="reward-description">
|
| 162 |
+
Get $3 per completed English lesson and track your learning progress.
|
| 163 |
+
</p>
|
| 164 |
+
<div class="reward-points">300 pts</div>
|
| 165 |
+
<a href="#" class="reward-button">Start Learning</a>
|
| 166 |
+
</div>
|
| 167 |
+
</div>
|
| 168 |
+
|
| 169 |
+
<div class="reward-card">
|
| 170 |
+
<div class="reward-image" style="background-image: url('http://static.photos/office/640x360/7')"></div>
|
| 171 |
+
<div class="reward-content">
|
| 172 |
+
<h3 class="reward-title">Job Application Success</h3>
|
| 173 |
+
<p class="reward-description">
|
| 174 |
+
Earn $10 when you successfully apply for a job using our career resources.
|
| 175 |
+
</p>
|
| 176 |
+
<div class="reward-points">1000 pts</div>
|
| 177 |
+
<a href="#" class="reward-button">Find Jobs</a>
|
| 178 |
+
</div>
|
| 179 |
+
</div>
|
| 180 |
+
</div>
|
| 181 |
+
|
| 182 |
+
<div class="payment-system">
|
| 183 |
+
<h3 class="payment-title">Micro-Payment Withdrawal System</h3>
|
| 184 |
+
<p class="payment-description">
|
| 185 |
+
Convert your earned points into real money sent directly to your bank account, mobile wallet, or prepaid card.
|
| 186 |
+
Withdraw anytime with no fees when you reach the minimum threshold.
|
| 187 |
+
</p>
|
| 188 |
+
<a href="#" class="payment-button">Set Up Payment Method</a>
|
| 189 |
+
</div>
|
| 190 |
+
</section>
|
| 191 |
+
`;
|
| 192 |
+
}
|
| 193 |
+
}
|
| 194 |
+
|
| 195 |
+
customElements.define('custom-gamification', CustomGamification);
|
components/hero.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomHero extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
margin-bottom: 4rem;
|
| 9 |
+
}
|
| 10 |
+
.hero {
|
| 11 |
+
background-image: linear-gradient(to right, rgba(59, 130, 246, 0.8), rgba(29, 78, 216, 0.8)), url('http://static.photos/people/1200x630/42');
|
| 12 |
+
background-size: cover;
|
| 13 |
+
background-position: center;
|
| 14 |
+
border-radius: 1rem;
|
| 15 |
+
padding: 4rem 2rem;
|
| 16 |
+
color: white;
|
| 17 |
+
text-align: center;
|
| 18 |
+
position: relative;
|
| 19 |
+
overflow: hidden;
|
| 20 |
+
}
|
| 21 |
+
.hero-content {
|
| 22 |
+
max-width: 800px;
|
| 23 |
+
margin: 0 auto;
|
| 24 |
+
position: relative;
|
| 25 |
+
z-index: 1;
|
| 26 |
+
}
|
| 27 |
+
.hero-title {
|
| 28 |
+
font-size: 2.5rem;
|
| 29 |
+
font-weight: 700;
|
| 30 |
+
margin-bottom: 1rem;
|
| 31 |
+
}
|
| 32 |
+
.hero-subtitle {
|
| 33 |
+
font-size: 1.25rem;
|
| 34 |
+
margin-bottom: 2rem;
|
| 35 |
+
opacity: 0.9;
|
| 36 |
+
}
|
| 37 |
+
.hero-buttons {
|
| 38 |
+
display: flex;
|
| 39 |
+
gap: 1rem;
|
| 40 |
+
justify-content: center;
|
| 41 |
+
flex-wrap: wrap;
|
| 42 |
+
}
|
| 43 |
+
.hero-button {
|
| 44 |
+
padding: 0.75rem 1.5rem;
|
| 45 |
+
border-radius: 0.5rem;
|
| 46 |
+
font-weight: 600;
|
| 47 |
+
transition: all 0.2s;
|
| 48 |
+
}
|
| 49 |
+
.primary-button {
|
| 50 |
+
background-color: white;
|
| 51 |
+
color: #3b82f6;
|
| 52 |
+
}
|
| 53 |
+
.primary-button:hover {
|
| 54 |
+
transform: translateY(-2px);
|
| 55 |
+
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
| 56 |
+
}
|
| 57 |
+
.secondary-button {
|
| 58 |
+
background-color: transparent;
|
| 59 |
+
border: 2px solid white;
|
| 60 |
+
color: white;
|
| 61 |
+
}
|
| 62 |
+
.secondary-button:hover {
|
| 63 |
+
background-color: rgba(255, 255, 255, 0.1);
|
| 64 |
+
}
|
| 65 |
+
@media (max-width: 640px) {
|
| 66 |
+
.hero-title {
|
| 67 |
+
font-size: 2rem;
|
| 68 |
+
}
|
| 69 |
+
.hero-subtitle {
|
| 70 |
+
font-size: 1.1rem;
|
| 71 |
+
}
|
| 72 |
+
}
|
| 73 |
+
</style>
|
| 74 |
+
<div class="hero">
|
| 75 |
+
<div class="hero-content">
|
| 76 |
+
<h1 class="hero-title">Your Pathway to a Better Life</h1>
|
| 77 |
+
<p class="hero-subtitle">
|
| 78 |
+
Navigate government services, access benefits, learn English, and track your immigration journey all in one place.
|
| 79 |
+
</p>
|
| 80 |
+
<div class="hero-buttons">
|
| 81 |
+
<a href="#benefits" class="hero-button primary-button">
|
| 82 |
+
<i data-feather="gift" class="mr-2"></i> Find Benefits
|
| 83 |
+
</a>
|
| 84 |
+
<a href="#language" class="hero-button secondary-button">
|
| 85 |
+
<i data-feather="book" class="mr-2"></i> Learn English
|
| 86 |
+
</a>
|
| 87 |
+
</div>
|
| 88 |
+
</div>
|
| 89 |
+
</div>
|
| 90 |
+
`;
|
| 91 |
+
}
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
customElements.define('custom-hero', CustomHero);
|
components/language.js
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomLanguage extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
margin-bottom: 4rem;
|
| 9 |
+
}
|
| 10 |
+
.language-section {
|
| 11 |
+
background-color: white;
|
| 12 |
+
border-radius: 0.5rem;
|
| 13 |
+
padding: 2rem;
|
| 14 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
| 15 |
+
}
|
| 16 |
+
.section-header {
|
| 17 |
+
text-align: center;
|
| 18 |
+
margin-bottom: 2rem;
|
| 19 |
+
}
|
| 20 |
+
.section-title {
|
| 21 |
+
font-size: 2rem;
|
| 22 |
+
font-weight: 700;
|
| 23 |
+
color: #1e3a8a;
|
| 24 |
+
margin-bottom: 1rem;
|
| 25 |
+
}
|
| 26 |
+
.section-description {
|
| 27 |
+
font-size: 1.1rem;
|
| 28 |
+
color: #4b5563;
|
| 29 |
+
max-width: 700px;
|
| 30 |
+
margin: 0 auto;
|
| 31 |
+
}
|
| 32 |
+
.language-cards {
|
| 33 |
+
display: grid;
|
| 34 |
+
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
| 35 |
+
gap: 1.5rem;
|
| 36 |
+
margin-top: 2rem;
|
| 37 |
+
}
|
| 38 |
+
.language-card {
|
| 39 |
+
border: 1px solid #e5e7eb;
|
| 40 |
+
border-radius: 0.5rem;
|
| 41 |
+
padding: 1.5rem;
|
| 42 |
+
transition: transform 0.2s, box-shadow 0.2s;
|
| 43 |
+
}
|
| 44 |
+
.language-card:hover {
|
| 45 |
+
transform: translateY(-3px);
|
| 46 |
+
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
|
| 47 |
+
}
|
| 48 |
+
.card-header {
|
| 49 |
+
display: flex;
|
| 50 |
+
align-items: center;
|
| 51 |
+
margin-bottom: 1rem;
|
| 52 |
+
}
|
| 53 |
+
.card-icon {
|
| 54 |
+
width: 48px;
|
| 55 |
+
height: 48px;
|
| 56 |
+
background-color: #dbeafe;
|
| 57 |
+
border-radius: 50%;
|
| 58 |
+
display: flex;
|
| 59 |
+
align-items: center;
|
| 60 |
+
justify-content: center;
|
| 61 |
+
margin-right: 1rem;
|
| 62 |
+
color: #1d4ed8;
|
| 63 |
+
}
|
| 64 |
+
.card-title {
|
| 65 |
+
font-weight: 600;
|
| 66 |
+
font-size: 1.1rem;
|
| 67 |
+
color: #1e40af;
|
| 68 |
+
}
|
| 69 |
+
.card-description {
|
| 70 |
+
color: #6b7280;
|
| 71 |
+
margin-bottom: 1.5rem;
|
| 72 |
+
}
|
| 73 |
+
.card-button {
|
| 74 |
+
display: inline-block;
|
| 75 |
+
padding: 0.5rem 1rem;
|
| 76 |
+
background-color: #3b82f6;
|
| 77 |
+
color: white;
|
| 78 |
+
border-radius: 0.25rem;
|
| 79 |
+
font-weight: 500;
|
| 80 |
+
transition: background-color 0.2s;
|
| 81 |
+
}
|
| 82 |
+
.card-button:hover {
|
| 83 |
+
background-color: #2563eb;
|
| 84 |
+
}
|
| 85 |
+
.progress-container {
|
| 86 |
+
margin-top: 3rem;
|
| 87 |
+
background-color: #f9fafb;
|
| 88 |
+
border-radius: 0.5rem;
|
| 89 |
+
padding: 2rem;
|
| 90 |
+
}
|
| 91 |
+
.progress-title {
|
| 92 |
+
font-size: 1.25rem;
|
| 93 |
+
font-weight: 600;
|
| 94 |
+
color: #1e3a8a;
|
| 95 |
+
margin-bottom: 1.5rem;
|
| 96 |
+
text-align: center;
|
| 97 |
+
}
|
| 98 |
+
.progress-content {
|
| 99 |
+
display: flex;
|
| 100 |
+
flex-direction: column;
|
| 101 |
+
align-items: center;
|
| 102 |
+
}
|
| 103 |
+
.progress-ring-wrapper {
|
| 104 |
+
position: relative;
|
| 105 |
+
width: 120px;
|
| 106 |
+
height: 120px;
|
| 107 |
+
margin-bottom: 1rem;
|
| 108 |
+
}
|
| 109 |
+
.progress-text {
|
| 110 |
+
font-size: 1.125rem;
|
| 111 |
+
font-weight: 600;
|
| 112 |
+
color: #1e40af;
|
| 113 |
+
}
|
| 114 |
+
.progress-description {
|
| 115 |
+
color: #6b7280;
|
| 116 |
+
text-align: center;
|
| 117 |
+
max-width: 400px;
|
| 118 |
+
margin: 0 auto;
|
| 119 |
+
}
|
| 120 |
+
.daily-tasks {
|
| 121 |
+
margin-top: 2rem;
|
| 122 |
+
display: grid;
|
| 123 |
+
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
| 124 |
+
gap: 1rem;
|
| 125 |
+
}
|
| 126 |
+
.task-card {
|
| 127 |
+
background-color: white;
|
| 128 |
+
border: 1px solid #e5e7eb;
|
| 129 |
+
border-radius: 0.5rem;
|
| 130 |
+
padding: 1rem;
|
| 131 |
+
display: flex;
|
| 132 |
+
align-items: center;
|
| 133 |
+
cursor: pointer;
|
| 134 |
+
transition: background-color 0.2s;
|
| 135 |
+
}
|
| 136 |
+
.task-card:hover {
|
| 137 |
+
background-color: #f9fafb;
|
| 138 |
+
}
|
| 139 |
+
.task-icon {
|
| 140 |
+
margin-right: 0.75rem;
|
| 141 |
+
color: #3b82f6;
|
| 142 |
+
}
|
| 143 |
+
.task-name {
|
| 144 |
+
font-weight: 500;
|
| 145 |
+
color: #4b5563;
|
| 146 |
+
}
|
| 147 |
+
@media (max-width: 640px) {
|
| 148 |
+
.language-cards {
|
| 149 |
+
grid-template-columns: 1fr;
|
| 150 |
+
}
|
| 151 |
+
}
|
| 152 |
+
</style>
|
| 153 |
+
<section id="language" class="language-section">
|
| 154 |
+
<div class="section-header">
|
| 155 |
+
<h2 class="section-title">Learn English</h2>
|
| 156 |
+
<p class="section-description">
|
| 157 |
+
Interactive language learning tools and resources to help you improve your English
|
| 158 |
+
</p>
|
| 159 |
+
</div>
|
| 160 |
+
|
| 161 |
+
<div class="language-cards">
|
| 162 |
+
<div class="language-card">
|
| 163 |
+
<div class="card-header">
|
| 164 |
+
<div class="card-icon">
|
| 165 |
+
<i data-feather="headphones"></i>
|
| 166 |
+
</div>
|
| 167 |
+
<h3 class="card-title">Listening Practice</h3>
|
| 168 |
+
</div>
|
| 169 |
+
<p class="card-description">
|
| 170 |
+
Improve your listening comprehension with audio lessons and real-world conversations.
|
| 171 |
+
</p>
|
| 172 |
+
<a href="#" class="card-button">Start Listening</a>
|
| 173 |
+
</div>
|
| 174 |
+
|
| 175 |
+
<div class="language-card">
|
| 176 |
+
<div class="card-header">
|
| 177 |
+
<div class="card-icon">
|
| 178 |
+
<i data-feather="message-square"></i>
|
| 179 |
+
</div>
|
| 180 |
+
<h3 class="card-title">Speaking Practice</h3>
|
| 181 |
+
</div>
|
| 182 |
+
<p class="card-description">
|
| 183 |
+
Practice speaking English with our AI conversation partner and pronunciation exercises.
|
| 184 |
+
</p>
|
| 185 |
+
<a href="#" class="card-button">Start Speaking</a>
|
| 186 |
+
</div>
|
| 187 |
+
|
| 188 |
+
<div class="language-card">
|
| 189 |
+
<div class="card-header">
|
| 190 |
+
<div class="card-icon">
|
| 191 |
+
<i data-feather="book-open"></i>
|
| 192 |
+
</div>
|
| 193 |
+
<h3 class="card-title">Reading Practice</h3>
|
| 194 |
+
</div>
|
| 195 |
+
<p class="card-description">
|
| 196 |
+
Build vocabulary and reading skills with leveled articles and interactive exercises.
|
| 197 |
+
</p>
|
| 198 |
+
<a href="#" class="card-button">Start Reading</a>
|
| 199 |
+
</div>
|
| 200 |
+
</div>
|
| 201 |
+
|
| 202 |
+
<div class="progress-container">
|
| 203 |
+
<h3 class="progress-title">Your Learning Progress</h3>
|
| 204 |
+
<div class="progress-content">
|
| 205 |
+
<div class="progress-ring-wrapper">
|
| 206 |
+
<svg class="progress-ring" width="120" height="120">
|
| 207 |
+
<circle class="progress-ring-circle" stroke="#3b82f6" stroke-width="8" fill="transparent" r="52" cx="60" cy="60"
|
| 208 |
+
stroke-dasharray="326.56" stroke-dashoffset="326.56" style="stroke-dashoffset: 196.56;">
|
| 209 |
+
</circle>
|
| 210 |
+
</svg>
|
| 211 |
+
<div class="absolute inset-0 flex items-center justify-center">
|
| 212 |
+
<span class="progress-percent text-xl font-bold">40%</span>
|
| 213 |
+
</div>
|
| 214 |
+
</div>
|
| 215 |
+
<p class="progress-text">You're making great progress!</p>
|
| 216 |
+
<p class="progress-description">
|
| 217 |
+
Complete your daily tasks to earn points and unlock new learning materials.
|
| 218 |
+
</p>
|
| 219 |
+
|
| 220 |
+
<div class="daily-tasks">
|
| 221 |
+
<div class="task-card complete-task-btn" data-task="languagePractice">
|
| 222 |
+
<i data-feather="check-circle" class="task-icon"></i>
|
| 223 |
+
<span class="task-name">Daily Practice</span>
|
| 224 |
+
</div>
|
| 225 |
+
<div class="task-card complete-task-btn" data-task="resourceViewed">
|
| 226 |
+
<i data-feather="file-text" class="task-icon"></i>
|
| 227 |
+
<span class="task-name">View Resources</span>
|
| 228 |
+
</div>
|
| 229 |
+
<div class="task-card">
|
| 230 |
+
<i data-feather="award" class="task-icon"></i>
|
| 231 |
+
<span class="task-name">Milestones</span>
|
| 232 |
+
</div>
|
| 233 |
+
</div>
|
| 234 |
+
</div>
|
| 235 |
+
</div>
|
| 236 |
+
</section>
|
| 237 |
+
`;
|
| 238 |
+
}
|
| 239 |
+
}
|
| 240 |
+
|
| 241 |
+
customElements.define('custom-language', CustomLanguage);
|
components/legal.js
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomLegal extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
margin-bottom: 4rem;
|
| 9 |
+
}
|
| 10 |
+
.legal-section {
|
| 11 |
+
background-color: #1e3a8a;
|
| 12 |
+
border-radius: 0.5rem;
|
| 13 |
+
padding: 3rem 2rem;
|
| 14 |
+
color: white;
|
| 15 |
+
}
|
| 16 |
+
.section-header {
|
| 17 |
+
text-align: center;
|
| 18 |
+
margin-bottom: 2rem;
|
| 19 |
+
color: white;
|
| 20 |
+
}
|
| 21 |
+
.section-title {
|
| 22 |
+
font-size: 2rem;
|
| 23 |
+
font-weight: 700;
|
| 24 |
+
margin-bottom: 1rem;
|
| 25 |
+
}
|
| 26 |
+
.section-description {
|
| 27 |
+
font-size: 1.1rem;
|
| 28 |
+
opacity: 0.9;
|
| 29 |
+
max-width: 700px;
|
| 30 |
+
margin: 0 auto;
|
| 31 |
+
}
|
| 32 |
+
.legal-steps {
|
| 33 |
+
display: grid;
|
| 34 |
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
| 35 |
+
gap: 2rem;
|
| 36 |
+
margin-top: 2rem;
|
| 37 |
+
}
|
| 38 |
+
.step {
|
| 39 |
+
background-color: rgba(255, 255, 255, 0.1);
|
| 40 |
+
border-radius: 0.5rem;
|
| 41 |
+
padding: 1.5rem;
|
| 42 |
+
transition: transform 0.2s, background-color 0.2s;
|
| 43 |
+
}
|
| 44 |
+
.step:hover {
|
| 45 |
+
transform: translateY(-5px);
|
| 46 |
+
background-color: rgba(255, 255, 255, 0.2);
|
| 47 |
+
}
|
| 48 |
+
.step-number {
|
| 49 |
+
width: 40px;
|
| 50 |
+
height: 40px;
|
| 51 |
+
background-color: #3b82f6;
|
| 52 |
+
border-radius: 50%;
|
| 53 |
+
display: flex;
|
| 54 |
+
align-items: center;
|
| 55 |
+
justify-content: center;
|
| 56 |
+
font-weight: 700;
|
| 57 |
+
margin-bottom: 1rem;
|
| 58 |
+
}
|
| 59 |
+
.step-title {
|
| 60 |
+
font-size: 1.25rem;
|
| 61 |
+
font-weight: 600;
|
| 62 |
+
margin-bottom: 0.5rem;
|
| 63 |
+
}
|
| 64 |
+
.step-description {
|
| 65 |
+
margin-bottom: 1rem;
|
| 66 |
+
opacity: 0.9;
|
| 67 |
+
}
|
| 68 |
+
.step-button {
|
| 69 |
+
display: inline-block;
|
| 70 |
+
padding: 0.5rem 1rem;
|
| 71 |
+
background-color: white;
|
| 72 |
+
color: #1e3a8a;
|
| 73 |
+
border-radius: 0.25rem;
|
| 74 |
+
font-weight: 500;
|
| 75 |
+
transition: opacity 0.2s;
|
| 76 |
+
}
|
| 77 |
+
.step-button:hover {
|
| 78 |
+
opacity: 0.9;
|
| 79 |
+
}
|
| 80 |
+
.features-grid {
|
| 81 |
+
display: grid;
|
| 82 |
+
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
|
| 83 |
+
gap: 1.5rem;
|
| 84 |
+
margin-top: 3rem;
|
| 85 |
+
}
|
| 86 |
+
.feature {
|
| 87 |
+
display: flex;
|
| 88 |
+
align-items: center;
|
| 89 |
+
padding: 1rem;
|
| 90 |
+
background-color: rgba(255, 255, 255, 0.05);
|
| 91 |
+
border-radius: 0.5rem;
|
| 92 |
+
}
|
| 93 |
+
.feature-icon {
|
| 94 |
+
margin-right: 1rem;
|
| 95 |
+
color: #93c5fd;
|
| 96 |
+
}
|
| 97 |
+
.feature-text {
|
| 98 |
+
font-weight: 500;
|
| 99 |
+
}
|
| 100 |
+
</style>
|
| 101 |
+
<section id="legal" class="legal-section">
|
| 102 |
+
<div class="section-header">
|
| 103 |
+
<h2 class="section-title">Visas & Legal Residency</h2>
|
| 104 |
+
<p class="section-description">
|
| 105 |
+
Step-by-step guidance through the legal immigration process with personalized alerts and document tracking
|
| 106 |
+
</p>
|
| 107 |
+
</div>
|
| 108 |
+
|
| 109 |
+
<div class="legal-steps">
|
| 110 |
+
<div class="step">
|
| 111 |
+
<div class="step-number">1</div>
|
| 112 |
+
<h3 class="step-title">Determine Your Visa Type</h3>
|
| 113 |
+
<p class="step-description">
|
| 114 |
+
Answer a few questions to discover which visa or residency program you may qualify for.
|
| 115 |
+
</p>
|
| 116 |
+
<a href="#" class="step-button">Take Assessment</a>
|
| 117 |
+
</div>
|
| 118 |
+
|
| 119 |
+
<div class="step">
|
| 120 |
+
<div class="step-number">2</div>
|
| 121 |
+
<h3 class="step-title">Document Checklist</h3>
|
| 122 |
+
<p class="step-description">
|
| 123 |
+
Get a personalized list of required documents and forms for your specific situation.
|
| 124 |
+
</p>
|
| 125 |
+
<a href="#" class="step-button">View Checklist</a>
|
| 126 |
+
</div>
|
| 127 |
+
|
| 128 |
+
<div class="step">
|
| 129 |
+
<div class="step-number">3</div>
|
| 130 |
+
<h3 class="step-title">Application Process</h3>
|
| 131 |
+
<p class="step-description">
|
| 132 |
+
Follow our step-by-step guide to complete and submit your application correctly.
|
| 133 |
+
</p>
|
| 134 |
+
<a href="#" class="step-button">Begin Process</a>
|
| 135 |
+
</div>
|
| 136 |
+
</div>
|
| 137 |
+
|
| 138 |
+
<div class="features-grid">
|
| 139 |
+
<div class="feature">
|
| 140 |
+
<div class="feature-icon">
|
| 141 |
+
<i data-feather="clock"></i>
|
| 142 |
+
</div>
|
| 143 |
+
<span class="feature-text">Application Deadline Alerts</span>
|
| 144 |
+
</div>
|
| 145 |
+
<div class="feature">
|
| 146 |
+
<div class="feature-icon">
|
| 147 |
+
<i data-feather="file-text"></i>
|
| 148 |
+
</div>
|
| 149 |
+
<span class="feature-text">Document Scanning & Storage</span>
|
| 150 |
+
</div>
|
| 151 |
+
<div class="feature">
|
| 152 |
+
<div class="feature-icon">
|
| 153 |
+
<i data-feather="map-pin"></i>
|
| 154 |
+
</div>
|
| 155 |
+
<span class="feature-text">Local Legal Service Providers</span>
|
| 156 |
+
</div>
|
| 157 |
+
<div class="feature">
|
| 158 |
+
<div class="feature-icon">
|
| 159 |
+
<i data-feather="calendar"></i>
|
| 160 |
+
</div>
|
| 161 |
+
<span class="feature-text">Appointment Scheduling</span>
|
| 162 |
+
</div>
|
| 163 |
+
</div>
|
| 164 |
+
</section>
|
| 165 |
+
`;
|
| 166 |
+
}
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
customElements.define('custom-legal', CustomLegal);
|
components/navbar.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomNavbar extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
width: 100%;
|
| 9 |
+
position: sticky;
|
| 10 |
+
top: 0;
|
| 11 |
+
z-index: 50;
|
| 12 |
+
background-color: white;
|
| 13 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
| 14 |
+
}
|
| 15 |
+
.nav-container {
|
| 16 |
+
max-width: 1280px;
|
| 17 |
+
margin: 0 auto;
|
| 18 |
+
padding: 1rem;
|
| 19 |
+
display: flex;
|
| 20 |
+
justify-content: space-between;
|
| 21 |
+
align-items: center;
|
| 22 |
+
}
|
| 23 |
+
.logo {
|
| 24 |
+
font-weight: 700;
|
| 25 |
+
font-size: 1.5rem;
|
| 26 |
+
color: #3b82f6;
|
| 27 |
+
display: flex;
|
| 28 |
+
align-items: center;
|
| 29 |
+
gap: 0.5rem;
|
| 30 |
+
}
|
| 31 |
+
.nav-links {
|
| 32 |
+
display: flex;
|
| 33 |
+
gap: 1.5rem;
|
| 34 |
+
}
|
| 35 |
+
.nav-link {
|
| 36 |
+
font-weight: 500;
|
| 37 |
+
color: #4b5563;
|
| 38 |
+
transition: color 0.2s;
|
| 39 |
+
}
|
| 40 |
+
.nav-link:hover {
|
| 41 |
+
color: #3b82f6;
|
| 42 |
+
}
|
| 43 |
+
.language-selector {
|
| 44 |
+
background-color: #f3f4f6;
|
| 45 |
+
border-radius: 0.375rem;
|
| 46 |
+
padding: 0.5rem;
|
| 47 |
+
border: none;
|
| 48 |
+
outline: none;
|
| 49 |
+
}
|
| 50 |
+
.mobile-menu-button {
|
| 51 |
+
display: none;
|
| 52 |
+
}
|
| 53 |
+
@media (max-width: 768px) {
|
| 54 |
+
.nav-links, .language-selector {
|
| 55 |
+
display: none;
|
| 56 |
+
}
|
| 57 |
+
.mobile-menu-button {
|
| 58 |
+
display: block;
|
| 59 |
+
}
|
| 60 |
+
}
|
| 61 |
+
</style>
|
| 62 |
+
<div class="nav-container">
|
| 63 |
+
<a href="#" class="logo">
|
| 64 |
+
<i data-feather="shield"></i>
|
| 65 |
+
Pathway Guardian
|
| 66 |
+
</a>
|
| 67 |
+
|
| 68 |
+
<div class="hidden md:flex nav-links">
|
| 69 |
+
<a href="#benefits" class="nav-link">Benefits</a>
|
| 70 |
+
<a href="#language" class="nav-link">Learn English</a>
|
| 71 |
+
<a href="#legal" class="nav-link">Legal Resources</a>
|
| 72 |
+
<a href="#progress" class="nav-link">My Progress</a>
|
| 73 |
+
</div>
|
| 74 |
+
|
| 75 |
+
<select id="language-select" class="language-selector hidden md:block">
|
| 76 |
+
<option value="en">English</option>
|
| 77 |
+
<option value="es">EspaΓ±ol</option>
|
| 78 |
+
<option value="fr">FranΓ§ais</option>
|
| 79 |
+
<option value="zh">δΈζ</option>
|
| 80 |
+
<option value="ar">Ψ§ΩΨΉΨ±Ψ¨ΩΨ©</option>
|
| 81 |
+
</select>
|
| 82 |
+
|
| 83 |
+
<button id="mobile-menu-button" class="mobile-menu-button p-2 rounded-md text-gray-700">
|
| 84 |
+
<i data-feather="menu"></i>
|
| 85 |
+
</button>
|
| 86 |
+
</div>
|
| 87 |
+
|
| 88 |
+
<!-- Mobile menu (hidden by default) -->
|
| 89 |
+
<div id="mobile-menu" class="hidden md:hidden bg-white border-t">
|
| 90 |
+
<div class="px-2 pt-2 pb-3 space-y-1">
|
| 91 |
+
<a href="#benefits" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-blue-600">Benefits</a>
|
| 92 |
+
<a href="#language" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-blue-600">Learn English</a>
|
| 93 |
+
<a href="#legal" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-blue-600">Legal Resources</a>
|
| 94 |
+
<a href="#progress" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-blue-600">My Progress</a>
|
| 95 |
+
<select id="language-select-mobile" class="block w-full mt-1 px-3 py-2 border border-gray-300 rounded-md">
|
| 96 |
+
<option value="en">English</option>
|
| 97 |
+
<option value="es">EspaΓ±ol</option>
|
| 98 |
+
<option value="fr">FranΓ§ais</option>
|
| 99 |
+
<option value="zh">δΈζ</option>
|
| 100 |
+
<option value="ar">Ψ§ΩΨΉΨ±Ψ¨ΩΨ©</option>
|
| 101 |
+
</select>
|
| 102 |
+
</div>
|
| 103 |
+
</div>
|
| 104 |
+
`;
|
| 105 |
+
}
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
customElements.define('custom-navbar', CustomNavbar);
|
index.html
CHANGED
|
@@ -1,19 +1,47 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
</
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Pathway Guardian - Immigrant Resource Hub</title>
|
| 7 |
+
<link rel="stylesheet" href="style.css">
|
| 8 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 9 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 10 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 11 |
+
<script src="components/navbar.js"></script>
|
| 12 |
+
<script src="components/hero.js"></script>
|
| 13 |
+
<script src="components/features.js"></script>
|
| 14 |
+
<script src="components/benefits.js"></script>
|
| 15 |
+
<script src="components/language.js"></script>
|
| 16 |
+
<script src="components/legal.js"></script>
|
| 17 |
+
<script src="components/gamification.js"></script>
|
| 18 |
+
<script src="components/footer.js"></script>
|
| 19 |
+
</head>
|
| 20 |
+
<body class="bg-gradient-to-br from-cyan-50 to-blue-100 text-gray-800">
|
| 21 |
+
<custom-navbar></custom-navbar>
|
| 22 |
+
<main class="container mx-auto px-4 py-8">
|
| 23 |
+
<custom-hero></custom-hero>
|
| 24 |
+
<custom-features></custom-features>
|
| 25 |
+
<custom-benefits></custom-benefits>
|
| 26 |
+
<custom-language></custom-language>
|
| 27 |
+
<custom-legal></custom-legal>
|
| 28 |
+
<custom-gamification></custom-gamification>
|
| 29 |
+
</main>
|
| 30 |
+
<custom-footer></custom-footer>
|
| 31 |
+
<script src="script.js"></script>
|
| 32 |
+
<script>
|
| 33 |
+
feather.replace();
|
| 34 |
+
// Initialize translation API (mock)
|
| 35 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 36 |
+
const languageSelect = document.getElementById('language-select');
|
| 37 |
+
if(languageSelect) {
|
| 38 |
+
languageSelect.addEventListener('change', function() {
|
| 39 |
+
alert(`Translating content to ${this.value}...`);
|
| 40 |
+
// In a real app, this would call your translation API
|
| 41 |
+
});
|
| 42 |
+
}
|
| 43 |
+
});
|
| 44 |
+
</script>
|
| 45 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 46 |
+
</body>
|
| 47 |
+
</html>
|
script.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Main application logic
|
| 2 |
+
document.addEventListener('DOMContentLoaded', () => {
|
| 3 |
+
// Initialize tooltips
|
| 4 |
+
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
|
| 5 |
+
tooltipTriggerList.map(tooltipTriggerEl => {
|
| 6 |
+
return new bootstrap.Tooltip(tooltipTriggerEl);
|
| 7 |
+
});
|
| 8 |
+
|
| 9 |
+
// Handle navigation for mobile menu
|
| 10 |
+
const mobileMenuButton = document.getElementById('mobile-menu-button');
|
| 11 |
+
const mobileMenu = document.getElementById('mobile-menu');
|
| 12 |
+
|
| 13 |
+
if(mobileMenuButton && mobileMenu) {
|
| 14 |
+
mobileMenuButton.addEventListener('click', () => {
|
| 15 |
+
mobileMenu.classList.toggle('hidden');
|
| 16 |
+
});
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
// Translation functionality (mock)
|
| 20 |
+
window.translatePage = (langCode) => {
|
| 21 |
+
console.log(`Translating page to ${langCode}`);
|
| 22 |
+
// In a real app, this would call your translation API
|
| 23 |
+
};
|
| 24 |
+
});
|
| 25 |
+
|
| 26 |
+
// Game progress tracking
|
| 27 |
+
class ProgressTracker {
|
| 28 |
+
constructor() {
|
| 29 |
+
this.dailyGoals = {
|
| 30 |
+
languagePractice: false,
|
| 31 |
+
documentUpload: false,
|
| 32 |
+
resourceViewed: false
|
| 33 |
+
};
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
completeTask(taskName) {
|
| 37 |
+
if (this.dailyGoals.hasOwnProperty(taskName)) {
|
| 38 |
+
this.dailyGoals[taskName] = true;
|
| 39 |
+
this.updateProgress();
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
updateProgress() {
|
| 44 |
+
const completed = Object.values(this.dailyGoals).filter(Boolean).length;
|
| 45 |
+
const total = Object.keys(this.dailyGoals).length;
|
| 46 |
+
const percent = (completed / total) * 100;
|
| 47 |
+
|
| 48 |
+
document.querySelectorAll('.progress-percent').forEach(el => {
|
| 49 |
+
el.textContent = `${Math.round(percent)}%`;
|
| 50 |
+
});
|
| 51 |
+
|
| 52 |
+
const circle = document.querySelector('.progress-ring-circle');
|
| 53 |
+
if (circle) {
|
| 54 |
+
const radius = circle.r.baseVal.value;
|
| 55 |
+
const circumference = 2 * Math.PI * radius;
|
| 56 |
+
const offset = circumference - (percent / 100) * circumference;
|
| 57 |
+
circle.style.strokeDashoffset = offset;
|
| 58 |
+
}
|
| 59 |
+
}
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
// Initialize progress tracking
|
| 63 |
+
const tracker = new ProgressTracker();
|
| 64 |
+
window.tracker = tracker;
|
| 65 |
+
|
| 66 |
+
// Simulate completing tasks for demo
|
| 67 |
+
document.addEventListener('click', (e) => {
|
| 68 |
+
if (e.target.closest('.complete-task-btn')) {
|
| 69 |
+
const taskName = e.target.closest('.complete-task-btn').dataset.task;
|
| 70 |
+
tracker.completeTask(taskName);
|
| 71 |
+
}
|
| 72 |
+
});
|
style.css
CHANGED
|
@@ -1,28 +1,23 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
|
| 4 |
-
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
margin-top: 0;
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
margin-top: 5px;
|
| 16 |
}
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
border-radius: 16px;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
.
|
| 27 |
-
|
| 28 |
-
}
|
|
|
|
| 1 |
+
/* Base styles */
|
| 2 |
+
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap');
|
|
|
|
|
|
|
| 3 |
|
| 4 |
+
body {
|
| 5 |
+
font-family: 'Poppins', sans-serif;
|
|
|
|
| 6 |
}
|
| 7 |
|
| 8 |
+
.progress-ring {
|
| 9 |
+
transition: stroke-dashoffset 0.35s;
|
| 10 |
+
transform: rotate(-90deg);
|
| 11 |
+
transform-origin: 50% 50%;
|
|
|
|
| 12 |
}
|
| 13 |
|
| 14 |
+
/* Custom animations */
|
| 15 |
+
@keyframes pulse-glow {
|
| 16 |
+
0% { box-shadow: 0 0 0 0 rgba(74, 222, 128, 0.7); }
|
| 17 |
+
70% { box-shadow: 0 0 0 10px rgba(74, 222, 128, 0); }
|
| 18 |
+
100% { box-shadow: 0 0 0 0 rgba(74, 222, 128, 0); }
|
|
|
|
| 19 |
}
|
| 20 |
|
| 21 |
+
.pulse {
|
| 22 |
+
animation: pulse-glow 2s infinite;
|
| 23 |
+
}
|