subby2006 commited on
Commit
6fdf8e5
·
verified ·
1 Parent(s): 088aa49

Include quick overviews for engines we support.

Browse files
Files changed (6) hide show
  1. README.md +8 -5
  2. components/footer.js +250 -0
  3. components/navbar.js +255 -0
  4. index.html +646 -19
  5. script.js +175 -0
  6. style.css +133 -19
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Game Porting Wizards
3
- emoji: 📚
4
- colorFrom: pink
5
- colorTo: green
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: Game Porting Wizards 🎮
3
+ colorFrom: green
4
+ colorTo: gray
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/footer.js ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomFooter extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ * {
7
+ box-sizing: border-box;
8
+ margin: 0;
9
+ padding: 0;
10
+ }
11
+
12
+ footer {
13
+ background: linear-gradient(135deg, #1f2937 0%, #111827 100%);
14
+ color: #e5e7eb;
15
+ padding: 4rem 0 2rem;
16
+ position: relative;
17
+ overflow: hidden;
18
+ }
19
+
20
+ footer::before {
21
+ content: '';
22
+ position: absolute;
23
+ top: 0;
24
+ left: 0;
25
+ right: 0;
26
+ height: 1px;
27
+ background: linear-gradient(to right, transparent, #7c3aed, #10b981, transparent);
28
+ animation: shimmer 3s linear infinite;
29
+ }
30
+
31
+ @keyframes shimmer {
32
+ 0% { transform: translateX(-100%); }
33
+ 100% { transform: translateX(100%); }
34
+ }
35
+
36
+ .footer-container {
37
+ max-width: 1200px;
38
+ margin: 0 auto;
39
+ padding: 0 2rem;
40
+ }
41
+
42
+ .footer-content {
43
+ display: grid;
44
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
45
+ gap: 3rem;
46
+ margin-bottom: 3rem;
47
+ }
48
+
49
+ .footer-section h3 {
50
+ color: #ffffff;
51
+ font-size: 1.25rem;
52
+ margin-bottom: 1.5rem;
53
+ position: relative;
54
+ padding-bottom: 0.5rem;
55
+ }
56
+
57
+ .footer-section h3::after {
58
+ content: '';
59
+ position: absolute;
60
+ bottom: 0;
61
+ left: 0;
62
+ width: 50px;
63
+ height: 2px;
64
+ background: linear-gradient(to right, #7c3aed, #10b981);
65
+ }
66
+
67
+ .footer-section p,
68
+ .footer-section li {
69
+ color: #9ca3af;
70
+ line-height: 1.8;
71
+ margin-bottom: 0.5rem;
72
+ }
73
+
74
+ .footer-links {
75
+ list-style: none;
76
+ }
77
+
78
+ .footer-links a {
79
+ color: #9ca3af;
80
+ text-decoration: none;
81
+ transition: all 0.3s ease;
82
+ display: inline-block;
83
+ position: relative;
84
+ }
85
+
86
+ .footer-links a:hover {
87
+ color: #a78bfa;
88
+ transform: translateX(5px);
89
+ }
90
+
91
+ .footer-links a::before {
92
+ content: '→';
93
+ position: absolute;
94
+ left: -20px;
95
+ opacity: 0;
96
+ transition: all 0.3s ease;
97
+ }
98
+
99
+ .footer-links a:hover::before {
100
+ opacity: 1;
101
+ left: -15px;
102
+ }
103
+
104
+ .social-links {
105
+ display: flex;
106
+ gap: 1rem;
107
+ margin-top: 1.5rem;
108
+ }
109
+
110
+ .social-link {
111
+ width: 40px;
112
+ height: 40px;
113
+ background: rgba(124, 58, 237, 0.1);
114
+ border: 1px solid rgba(124, 58, 237, 0.3);
115
+ border-radius: 50%;
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ text-decoration: none;
120
+ color: #a78bfa;
121
+ transition: all 0.3s ease;
122
+ }
123
+
124
+ .social-link:hover {
125
+ background: linear-gradient(135deg, #7c3aed, #10b981);
126
+ color: white;
127
+ transform: translateY(-3px);
128
+ box-shadow: 0 10px 20px rgba(124, 58, 237, 0.3);
129
+ }
130
+
131
+ .footer-bottom {
132
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
133
+ padding-top: 2rem;
134
+ text-align: center;
135
+ color: #6b7280;
136
+ }
137
+
138
+ .footer-bottom p {
139
+ margin-bottom: 0.5rem;
140
+ }
141
+
142
+ .footer-bottom a {
143
+ color: #a78bfa;
144
+ text-decoration: none;
145
+ transition: color 0.3s ease;
146
+ }
147
+
148
+ .footer-bottom a:hover {
149
+ color: #10b981;
150
+ }
151
+
152
+ .badge {
153
+ display: inline-block;
154
+ background: rgba(16, 185, 129, 0.1);
155
+ border: 1px solid rgba(16, 185, 129, 0.3);
156
+ color: #10b981;
157
+ padding: 0.25rem 0.75rem;
158
+ border-radius: 1rem;
159
+ font-size: 0.875rem;
160
+ margin-top: 0.5rem;
161
+ }
162
+
163
+ @media (max-width: 768px) {
164
+ .footer-content {
165
+ grid-template-columns: 1fr;
166
+ gap: 2rem;
167
+ text-align: center;
168
+ }
169
+
170
+ .footer-section h3::after {
171
+ left: 50%;
172
+ transform: translateX(-50%);
173
+ }
174
+
175
+ .social-links {
176
+ justify-content: center;
177
+ }
178
+ }
179
+ </style>
180
+
181
+ <footer>
182
+ <div class="footer-container">
183
+ <div class="footer-content">
184
+ <div class="footer-section">
185
+ <h3>About 21games</h3>
186
+ <p>Your trusted partner for JavaScript game porting. We transform web games into native mobile experiences with precision and expertise.</p>
187
+ <div class="badge">100+ Games Ported</div>
188
+ </div>
189
+
190
+ <div class="footer-section">
191
+ <h3>Quick Links</h3>
192
+ <ul class="footer-links">
193
+ <li><a href="#engines">Supported Engines</a></li>
194
+ <li><a href="#services">Our Services</a></li>
195
+ <li><a href="#process">Our Process</a></li>
196
+ <li><a href="#contact">Get In Touch</a></li>
197
+ </ul>
198
+ </div>
199
+
200
+ <div class="footer-section">
201
+ <h3>Technologies</h3>
202
+ <ul class="footer-links">
203
+ <li><a href="#">CapacitorJS</a></li>
204
+ <li><a href="#">Apache Cordova</a></li>
205
+ <li><a href="#">iOS SDK</a></li>
206
+ <li><a href="#">Android SDK</a></li>
207
+ </ul>
208
+ </div>
209
+
210
+ <div class="footer-section">
211
+ <h3>Connect With Us</h3>
212
+ <p>Ready to bring your game to mobile? Let's talk!</p>
213
+ <div class="social-links">
214
+ <a href="#" class="social-link" aria-label="Twitter">
215
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
216
+ <path d="M23 3a10.9 10.9 0 01-3.14 1.53 4.48 4.48 0 00-7.86 3v1A10.66 10.66 0 013 4s-4 9 5 13a11.64 11.64 0 01-7 2c9 5 20 0 20-11.5a4.5 4.5 0 00-.08-.83A7.72 7.72 0 0023 3z"></path>
217
+ </svg>
218
+ </a>
219
+ <a href="#" class="social-link" aria-label="LinkedIn">
220
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
221
+ <path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6zM2 9h4v12H2z"></path>
222
+ <circle cx="4" cy="4" r="2"></circle>
223
+ </svg>
224
+ </a>
225
+ <a href="#" class="social-link" aria-label="GitHub">
226
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
227
+ <path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0020 4.77 5.07 5.07 0 0019.91 1S18.73.65 16 2.48a13.38 13.38 0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 005 4.77a5.44 5.44 0 00-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 009 18.13V22"></path>
228
+ </svg>
229
+ </a>
230
+ <a href="#" class="social-link" aria-label="Email">
231
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
232
+ <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path>
233
+ <polyline points="22,6 12,13 2,6"></polyline>
234
+ </svg>
235
+ </a>
236
+ </div>
237
+ </div>
238
+ </div>
239
+
240
+ <div class="footer-bottom">
241
+ <p>&copy; 2024 21games Studio. All rights reserved.</p>
242
+ <p>Made with <span style="color: #ef4444;">♥</span> for game developers worldwide</p>
243
+ </div>
244
+ </div>
245
+ </footer>
246
+ `;
247
+ }
248
+ }
249
+
250
+ customElements.define('custom-footer', CustomFooter);
components/navbar.js ADDED
@@ -0,0 +1,255 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class CustomNavbar extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ * {
7
+ box-sizing: border-box;
8
+ margin: 0;
9
+ padding: 0;
10
+ }
11
+
12
+ nav {
13
+ position: fixed;
14
+ top: 0;
15
+ width: 100%;
16
+ background: rgba(255, 255, 255, 0.95);
17
+ backdrop-filter: blur(10px);
18
+ z-index: 1000;
19
+ transition: all 0.3s ease;
20
+ box-shadow: 0 2px 20px rgba(0, 0, 0, 0.1);
21
+ }
22
+
23
+ nav.scrolled {
24
+ background: rgba(255, 255, 255, 0.98);
25
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.15);
26
+ }
27
+
28
+ .nav-container {
29
+ max-width: 1200px;
30
+ margin: 0 auto;
31
+ padding: 1rem 2rem;
32
+ display: flex;
33
+ justify-content: space-between;
34
+ align-items: center;
35
+ }
36
+
37
+ .nav-logo {
38
+ display: flex;
39
+ align-items: center;
40
+ font-size: 1.5rem;
41
+ font-weight: bold;
42
+ color: #7c3aed;
43
+ text-decoration: none;
44
+ transition: transform 0.3s ease;
45
+ }
46
+
47
+ .nav-logo:hover {
48
+ transform: scale(1.05);
49
+ }
50
+
51
+ .nav-logo-icon {
52
+ width: 40px;
53
+ height: 40px;
54
+ margin-right: 0.5rem;
55
+ animation: rotate 10s linear infinite;
56
+ }
57
+
58
+ @keyframes rotate {
59
+ from { transform: rotate(0deg); }
60
+ to { transform: rotate(360deg); }
61
+ }
62
+
63
+ .nav-menu {
64
+ display: flex;
65
+ list-style: none;
66
+ gap: 2rem;
67
+ }
68
+
69
+ .nav-link {
70
+ color: #4a5568;
71
+ text-decoration: none;
72
+ font-weight: 500;
73
+ position: relative;
74
+ transition: color 0.3s ease;
75
+ padding: 0.5rem 0;
76
+ }
77
+
78
+ .nav-link:hover {
79
+ color: #7c3aed;
80
+ }
81
+
82
+ .nav-link::after {
83
+ content: '';
84
+ position: absolute;
85
+ bottom: 0;
86
+ left: 0;
87
+ width: 0;
88
+ height: 2px;
89
+ background: linear-gradient(to right, #7c3aed, #10b981);
90
+ transition: width 0.3s ease;
91
+ }
92
+
93
+ .nav-link:hover::after {
94
+ width: 100%;
95
+ }
96
+
97
+ .nav-cta {
98
+ background: linear-gradient(135deg, #7c3aed, #10b981);
99
+ color: white;
100
+ padding: 0.75rem 1.5rem;
101
+ border-radius: 2rem;
102
+ text-decoration: none;
103
+ font-weight: 600;
104
+ transition: all 0.3s ease;
105
+ box-shadow: 0 4px 15px rgba(124, 58, 237, 0.3);
106
+ }
107
+
108
+ .nav-cta:hover {
109
+ transform: translateY(-2px);
110
+ box-shadow: 0 6px 25px rgba(124, 58, 237, 0.4);
111
+ }
112
+
113
+ .mobile-menu-toggle {
114
+ display: none;
115
+ flex-direction: column;
116
+ cursor: pointer;
117
+ gap: 4px;
118
+ }
119
+
120
+ .mobile-menu-toggle span {
121
+ width: 25px;
122
+ height: 3px;
123
+ background: #4a5568;
124
+ transition: all 0.3s ease;
125
+ border-radius: 2px;
126
+ }
127
+
128
+ .mobile-menu-toggle.active span:nth-child(1) {
129
+ transform: rotate(45deg) translate(5px, 5px);
130
+ }
131
+
132
+ .mobile-menu-toggle.active span:nth-child(2) {
133
+ opacity: 0;
134
+ }
135
+
136
+ .mobile-menu-toggle.active span:nth-child(3) {
137
+ transform: rotate(-45deg) translate(7px, -6px);
138
+ }
139
+
140
+ @media (max-width: 768px) {
141
+ .nav-menu {
142
+ position: fixed;
143
+ top: 80px;
144
+ left: -100%;
145
+ width: 100%;
146
+ height: calc(100vh - 80px);
147
+ background: rgba(255, 255, 255, 0.98);
148
+ flex-direction: column;
149
+ justify-content: start;
150
+ align-items: center;
151
+ padding-top: 3rem;
152
+ transition: left 0.3s ease;
153
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
154
+ }
155
+
156
+ .nav-menu.active {
157
+ left: 0;
158
+ }
159
+
160
+ .mobile-menu-toggle {
161
+ display: flex;
162
+ }
163
+
164
+ .nav-link {
165
+ font-size: 1.25rem;
166
+ padding: 1rem 0;
167
+ }
168
+
169
+ .nav-cta {
170
+ margin-top: 2rem;
171
+ }
172
+ }
173
+
174
+ /* Dark mode styles */
175
+ :host-context(.dark) nav {
176
+ background: rgba(17, 24, 39, 0.95);
177
+ }
178
+
179
+ :host-context(.dark) nav.scrolled {
180
+ background: rgba(17, 24, 39, 0.98);
181
+ }
182
+
183
+ :host-context(.dark) .nav-link {
184
+ color: #e5e7eb;
185
+ }
186
+
187
+ :host-context(.dark) .nav-link:hover {
188
+ color: #a78bfa;
189
+ }
190
+
191
+ :host-context(.dark) .mobile-menu-toggle span {
192
+ background: #e5e7eb;
193
+ }
194
+
195
+ :host-context(.dark) .nav-menu {
196
+ background: rgba(17, 24, 39, 0.98);
197
+ }
198
+ </style>
199
+
200
+ <nav id="navbar">
201
+ <div class="nav-container">
202
+ <a href="#" class="nav-logo">
203
+ <svg class="nav-logo-icon" viewBox="0 0 24 24" fill="currentColor">
204
+ <path d="M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-10 7H8v3H6v-3H3v-2h3V8h2v3h3v2zm4.5 2c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm4-3c-.83 0-1.5-.67-1.5-1.5S18.67 9 19.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/>
205
+ </svg>
206
+ 21games
207
+ </a>
208
+
209
+ <ul class="nav-menu" id="navMenu">
210
+ <li><a href="#engines" class="nav-link">Engines</a></li>
211
+ <li><a href="#services" class="nav-link">Services</a></li>
212
+ <li><a href="#process" class="nav-link">Process</a></li>
213
+ <li><a href="#contact" class="nav-cta">Contact Us</a></li>
214
+ </ul>
215
+
216
+ <div class="mobile-menu-toggle" id="mobileToggle">
217
+ <span></span>
218
+ <span></span>
219
+ <span></span>
220
+ </div>
221
+ </div>
222
+ </nav>
223
+ `;
224
+
225
+ // Add mobile menu toggle functionality
226
+ const mobileToggle = this.shadowRoot.getElementById('mobileToggle');
227
+ const navMenu = this.shadowRoot.getElementById('navMenu');
228
+
229
+ mobileToggle.addEventListener('click', () => {
230
+ mobileToggle.classList.toggle('active');
231
+ navMenu.classList.toggle('active');
232
+ });
233
+
234
+ // Close mobile menu when link is clicked
235
+ const navLinks = this.shadowRoot.querySelectorAll('.nav-link, .nav-cta');
236
+ navLinks.forEach(link => {
237
+ link.addEventListener('click', () => {
238
+ mobileToggle.classList.remove('active');
239
+ navMenu.classList.remove('active');
240
+ });
241
+ });
242
+
243
+ // Add scroll effect to navbar
244
+ window.addEventListener('scroll', () => {
245
+ const navbar = this.shadowRoot.getElementById('navbar');
246
+ if (window.scrollY > 50) {
247
+ navbar.classList.add('scrolled');
248
+ } else {
249
+ navbar.classList.remove('scrolled');
250
+ }
251
+ });
252
+ }
253
+ }
254
+
255
+ customElements.define('custom-navbar', CustomNavbar);
index.html CHANGED
@@ -1,19 +1,646 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="scroll-smooth">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>21games - Professional Game Porting Studio</title>
7
+ <link rel="icon" type="image/x-icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🎮</text></svg>">
8
+ <link rel="stylesheet" href="style.css">
9
+ <script src="https://cdn.tailwindcss.com"></script>
10
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
11
+ <script src="https://unpkg.com/feather-icons"></script>
12
+ <script>
13
+ tailwind.config = {
14
+ theme: {
15
+ extend: {
16
+ colors: {
17
+ primary: '#7c3aed',
18
+ secondary: '#10b981',
19
+ accent: '#f59e0b'
20
+ },
21
+ animation: {
22
+ 'float': 'float 6s ease-in-out infinite',
23
+ 'pulse-slow': 'pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite',
24
+ 'slide-in': 'slideIn 0.5s ease-out',
25
+ 'fade-in': 'fadeIn 0.8s ease-out'
26
+ },
27
+ keyframes: {
28
+ float: {
29
+ '0%, 100%': { transform: 'translateY(0px)' },
30
+ '50%': { transform: 'translateY(-20px)' },
31
+ },
32
+ slideIn: {
33
+ '0%': { transform: 'translateX(-100%)', opacity: '0' },
34
+ '100%': { transform: 'translateX(0)', opacity: '1' },
35
+ },
36
+ fadeIn: {
37
+ '0%': { opacity: '0', transform: 'translateY(20px)' },
38
+ '100%': { opacity: '1', transform: 'translateY(0)' },
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ </script>
45
+ </head>
46
+ <body class="bg-gray-50 dark:bg-gray-900 transition-colors duration-300">
47
+ <!-- Navigation -->
48
+ <custom-navbar></custom-navbar>
49
+
50
+ <!-- Hero Section -->
51
+ <section class="relative min-h-screen flex items-center justify-center overflow-hidden bg-gradient-to-br from-primary/10 to-secondary/10 dark:from-primary/20 dark:to-secondary/20">
52
+ <div class="absolute inset-0 bg-grid-pattern opacity-5"></div>
53
+ <div class="container mx-auto px-6 relative z-10">
54
+ <div class="flex flex-col lg:flex-row items-center justify-between gap-12">
55
+ <div class="flex-1 text-center lg:text-left animate-fade-in">
56
+ <h1 class="text-5xl lg:text-7xl font-bold mb-6 bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent">
57
+ 21games Studio
58
+ </h1>
59
+ <p class="text-xl lg:text-2xl text-gray-700 dark:text-gray-300 mb-8">
60
+ Professional JavaScript Game Porting Specialists
61
+ </p>
62
+ <p class="text-lg text-gray-600 dark:text-gray-400 mb-8 max-w-2xl">
63
+ Transform your web games into stunning mobile apps. We specialize in porting games from RPG Maker, Construct, GDevelop, Phaser, Pixi.js, and Babylon.js to iOS and Android using CapacitorJS and Cordova.
64
+ </p>
65
+ <div class="flex flex-wrap gap-4 justify-center lg:justify-start">
66
+ <a href="#services" class="px-8 py-4 bg-primary text-white rounded-full font-semibold hover:bg-primary/600 transform hover:scale-105 transition-all duration-300 shadow-lg">
67
+ Our Services
68
+ </a>
69
+ <a href="#contact" class="px-8 py-4 bg-secondary text-white rounded-full font-semibold hover:bg-secondary/600 transform hover:scale-105 transition-all duration-300 shadow-lg">
70
+ Start Your Project
71
+ </a>
72
+ </div>
73
+ </div>
74
+ <div class="flex-1 flex justify-center">
75
+ <div class="relative animate-float">
76
+ <div class="w-64 h-64 lg:w-96 lg:h-96 bg-gradient-to-br from-primary to-secondary rounded-full opacity-20 absolute blur-3xl"></div>
77
+ <div class="relative bg-white dark:bg-gray-800 rounded-3xl shadow-2xl p-8">
78
+ <div class="grid grid-cols-3 gap-4">
79
+ <div class="text-center p-4 bg-primary/10 dark:bg-primary/20 rounded-xl">
80
+ <i data-feather="smartphone" class="w-8 h-8 mx-auto mb-2 text-primary"></i>
81
+ <span class="text-xs font-semibold">Mobile</span>
82
+ </div>
83
+ <div class="text-center p-4 bg-secondary/10 dark:bg-secondary/20 rounded-xl">
84
+ <i data-feather="code" class="w-8 h-8 mx-auto mb-2 text-secondary"></i>
85
+ <span class="text-xs font-semibold">JS Games</span>
86
+ </div>
87
+ <div class="text-center p-4 bg-accent/10 dark:bg-accent/20 rounded-xl">
88
+ <i data-feather="zap" class="w-8 h-8 mx-auto mb-2 text-accent"></i>
89
+ <span class="text-xs font-semibold">Fast Port</span>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ </section>
98
+ <!-- Engines We Support -->
99
+ <section id="engines" class="py-20 bg-white dark:bg-gray-800">
100
+ <div class="container mx-auto px-6">
101
+ <h2 class="text-4xl lg:text-5xl font-bold text-center mb-4">
102
+ <span class="bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent">
103
+ Game Engines We Support
104
+ </span>
105
+ </h2>
106
+ <p class="text-center text-gray-600 dark:text-gray-400 mb-12 max-w-2xl mx-auto">
107
+ We work with all major JavaScript game engines and frameworks
108
+ </p>
109
+
110
+ <div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8 mb-12">
111
+ <!-- RPG Maker -->
112
+ <div class="engine-detail-card bg-gradient-to-br from-purple-50 to-purple-100 dark:from-purple-900/20 dark:to-purple-800/20 rounded-2xl p-6 border border-purple-200 dark:border-purple-700 hover:shadow-xl transition-all duration-300">
113
+ <div class="flex items-center mb-4">
114
+ <div class="w-12 h-12 bg-gradient-to-br from-purple-500 to-purple-600 rounded-xl flex items-center justify-center mr-4">
115
+ <i data-feather="box" class="w-6 h-6 text-white"></i>
116
+ </div>
117
+ <h3 class="text-xl font-bold text-purple-800 dark:text-purple-300">RPG Maker</h3>
118
+ </div>
119
+ <p class="text-gray-700 dark:text-gray-300 mb-3">
120
+ Perfect for JRPG-style games with turn-based combat, inventory systems, and rich storytelling mechanics.
121
+ </p>
122
+ <ul class="space-y-2 text-sm text-gray-600 dark:text-gray-400">
123
+ <li class="flex items-start">
124
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-purple-600 dark:text-purple-400 flex-shrink-0"></i>
125
+ <span>Event-driven scripting system</span>
126
+ </li>
127
+ <li class="flex items-start">
128
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-purple-600 dark:text-purple-400 flex-shrink-0"></i>
129
+ <span>Built-in database for characters, items, skills</span>
130
+ </li>
131
+ <li class="flex items-start">
132
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-purple-600 dark:text-purple-400 flex-shrink-0"></i>
133
+ <span>Turn-based battle system</span>
134
+ </li>
135
+ </ul>
136
+ </div>
137
+
138
+ <!-- Construct -->
139
+ <div class="engine-detail-card bg-gradient-to-br from-blue-50 to-blue-100 dark:from-blue-900/20 dark:to-blue-800/20 rounded-2xl p-6 border border-blue-200 dark:border-blue-700 hover:shadow-xl transition-all duration-300">
140
+ <div class="flex items-center mb-4">
141
+ <div class="w-12 h-12 bg-gradient-to-br from-blue-500 to-blue-600 rounded-xl flex items-center justify-center mr-4">
142
+ <i data-feather="layers" class="w-6 h-6 text-white"></i>
143
+ </div>
144
+ <h3 class="text-xl font-bold text-blue-800 dark:text-blue-300">Construct</h3>
145
+ </div>
146
+ <p class="text-gray-700 dark:text-gray-300 mb-3">
147
+ Visual scripting powerhouse ideal for platformers, puzzle games, and arcade-style action games.
148
+ </p>
149
+ <ul class="space-y-2 text-sm text-gray-600 dark:text-gray-400">
150
+ <li class="flex items-start">
151
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-blue-600 dark:text-blue-400 flex-shrink-0"></i>
152
+ <span>Event sheet visual programming</span>
153
+ </li>
154
+ <li class="flex items-start">
155
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-blue-600 dark:text-blue-400 flex-shrink-0"></i>
156
+ <span>Built-in physics engine</span>
157
+ </li>
158
+ <li class="flex items-start">
159
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-blue-600 dark:text-blue-400 flex-shrink-0"></i>
160
+ <span>Behavior system for rapid prototyping</span>
161
+ </li>
162
+ </ul>
163
+ </div>
164
+
165
+ <!-- GDevelop -->
166
+ <div class="engine-detail-card bg-gradient-to-br from-green-50 to-green-100 dark:from-green-900/20 dark:to-green-800/20 rounded-2xl p-6 border border-green-200 dark:border-green-700 hover:shadow-xl transition-all duration-300">
167
+ <div class="flex items-center mb-4">
168
+ <div class="w-12 h-12 bg-gradient-to-br from-green-500 to-green-600 rounded-xl flex items-center justify-center mr-4">
169
+ <i data-feather="trending-up" class="w-6 h-6 text-white"></i>
170
+ </div>
171
+ <h3 class="text-xl font-bold text-green-800 dark:text-green-300">GDevelop</h3>
172
+ </div>
173
+ <p class="text-gray-700 dark:text-gray-300 mb-3">
174
+ Open-source engine with event-based logic, perfect for 2D games of any genre with extensible functionality.
175
+ </p>
176
+ <ul class="space-y-2 text-sm text-gray-600 dark:text-gray-400">
177
+ <li class="flex items-start">
178
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-green-600 dark:text-green-400 flex-shrink-0"></i>
179
+ <span>Intuitive event system</span>
180
+ </li>
181
+ <li class="flex items-start">
182
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-green-600 dark:text-green-400 flex-shrink-0"></i>
183
+ <span>JavaScript extension support</span>
184
+ </li>
185
+ <li class="flex items-start">
186
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-green-600 dark:text-green-400 flex-shrink-0"></i>
187
+ <span>Cross-platform export options</span>
188
+ </li>
189
+ </ul>
190
+ </div>
191
+
192
+ <!-- Phaser -->
193
+ <div class="engine-detail-card bg-gradient-to-br from-indigo-50 to-indigo-100 dark:from-indigo-900/20 dark:to-indigo-800/20 rounded-2xl p-6 border border-indigo-200 dark:border-indigo-700 hover:shadow-xl transition-all duration-300">
194
+ <div class="flex items-center mb-4">
195
+ <div class="w-12 h-12 bg-gradient-to-br from-indigo-500 to-indigo-600 rounded-xl flex items-center justify-center mr-4">
196
+ <i data-feather="play-circle" class="w-6 h-6 text-white"></i>
197
+ </div>
198
+ <h3 class="text-xl font-bold text-indigo-800 dark:text-indigo-300">Phaser</h3>
199
+ </div>
200
+ <p class="text-gray-700 dark:text-gray-300 mb-3">
201
+ Fast, feature-rich 2D framework excelling in arcade games, platformers, and interactive web experiences.
202
+ </p>
203
+ <ul class="space-y-2 text-sm text-gray-600 dark:text-gray-400">
204
+ <li class="flex items-start">
205
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-indigo-600 dark:text-indigo-400 flex-shrink-0"></i>
206
+ <span>Advanced animation system</span>
207
+ </li>
208
+ <li class="flex items-start">
209
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-indigo-600 dark:text-indigo-400 flex-shrink-0"></i>
210
+ <span>Physics engines integration</span>
211
+ </li>
212
+ <li class="flex items-start">
213
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-indigo-600 dark:text-indigo-400 flex-shrink-0"></i>
214
+ <span>Particle effects and shaders</span>
215
+ </li>
216
+ </ul>
217
+ </div>
218
+
219
+ <!-- Pixi.js -->
220
+ <div class="engine-detail-card bg-gradient-to-br from-pink-50 to-pink-100 dark:from-pink-900/20 dark:to-pink-800/20 rounded-2xl p-6 border border-pink-200 dark:border-pink-700 hover:shadow-xl transition-all duration-300">
221
+ <div class="flex items-center mb-4">
222
+ <div class="w-12 h-12 bg-gradient-to-br from-pink-500 to-pink-600 rounded-xl flex items-center justify-center mr-4">
223
+ <i data-feather="cpu" class="w-6 h-6 text-white"></i>
224
+ </div>
225
+ <h3 class="text-xl font-bold text-pink-800 dark:text-pink-300">Pixi.js</h3>
226
+ </div>
227
+ <p class="text-gray-700 dark:text-gray-300 mb-3">
228
+ Lightning-fast 2D WebGL renderer ideal for visually stunning games and interactive applications.
229
+ </p>
230
+ <ul class="space-y-2 text-sm text-gray-600 dark:text-gray-400">
231
+ <li class="flex items-start">
232
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-pink-600 dark:text-pink-400 flex-shrink-0"></i>
233
+ <span>WebGL acceleration</span>
234
+ </li>
235
+ <li class="flex items-start">
236
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-pink-600 dark:text-pink-400 flex-shrink-0"></i>
237
+ <span>Advanced text rendering</span>
238
+ </li>
239
+ <li class="flex items-start">
240
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-pink-600 dark:text-pink-400 flex-shrink-0"></i>
241
+ <span>Filter and mask effects</span>
242
+ </li>
243
+ </ul>
244
+ </div>
245
+
246
+ <!-- Babylon.js -->
247
+ <div class="engine-detail-card bg-gradient-to-br from-cyan-50 to-cyan-100 dark:from-cyan-900/20 dark:to-cyan-800/20 rounded-2xl p-6 border border-cyan-200 dark:border-cyan-700 hover:shadow-xl transition-all duration-300">
248
+ <div class="flex items-center mb-4">
249
+ <div class="w-12 h-12 bg-gradient-to-br from-cyan-500 to-cyan-600 rounded-xl flex items-center justify-center mr-4">
250
+ <i data-feather="hexagon" class="w-6 h-6 text-white"></i>
251
+ </div>
252
+ <h3 class="text-xl font-bold text-cyan-800 dark:text-cyan-300">Babylon.js</h3>
253
+ </div>
254
+ <p class="text-gray-700 dark:text-gray-300 mb-3">
255
+ Powerful 3D engine for immersive experiences, perfect for 3D games and simulations.
256
+ </p>
257
+ <ul class="space-y-2 text-sm text-gray-600 dark:text-gray-400">
258
+ <li class="flex items-start">
259
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-cyan-600 dark:text-cyan-400 flex-shrink-0"></i>
260
+ <span>Full 3D rendering capabilities</span>
261
+ </li>
262
+ <li class="flex items-start">
263
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-cyan-600 dark:text-cyan-400 flex-shrink-0"></i>
264
+ <span>Physics and particle systems</span>
265
+ </li>
266
+ <li class="flex items-start">
267
+ <i data-feather="check" class="w-4 h-4 mr-2 mt-0.5 text-cyan-600 dark:text-cyan-400 flex-shrink-0"></i>
268
+ <span>Advanced lighting and shaders</span>
269
+ </li>
270
+ </ul>
271
+ </div>
272
+ </div>
273
+
274
+ <!-- Quick Overview Section -->
275
+ <div class="bg-gradient-to-r from-gray-50 to-gray-100 dark:from-gray-800 dark:to-gray-900 rounded-2xl p-8">
276
+ <h3 class="text-2xl font-bold text-center mb-8 text-gray-800 dark:text-gray-200">
277
+ Engine Comparison at a Glance
278
+ </h3>
279
+ <div class="overflow-x-auto">
280
+ <table class="w-full text-sm">
281
+ <thead>
282
+ <tr class="border-b border-gray-300 dark:border-gray-600">
283
+ <th class="text-left py-3 px-4 font-semibold text-gray-700 dark:text-gray-300">Engine</th>
284
+ <th class="text-left py-3 px-4 font-semibold text-gray-700 dark:text-gray-300">Best For</th>
285
+ <th class="text-left py-3 px-4 font-semibold text-gray-700 dark:text-gray-300">Difficulty</th>
286
+ <th class="text-left py-3 px-4 font-semibold text-gray-700 dark:text-gray-300">Performance</th>
287
+ <th class="text-left py-3 px-4 font-semibold text-gray-700 dark:text-gray-300">Mobile Ready</th>
288
+ </tr>
289
+ </thead>
290
+ <tbody>
291
+ <tr class="border-b border-gray-200 dark:border-gray-700 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors">
292
+ <td class="py-3 px-4 font-medium text-purple-600 dark:text-purple-400">RPG Maker</td>
293
+ <td class="py-3 px-4 text-gray-600 dark:text-gray-400">JRPGs, Story-driven</td>
294
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">Beginner</span></td>
295
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200 rounded-full text-xs">Medium</span></td>
296
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">Excellent</span></td>
297
+ </tr>
298
+ <tr class="border-b border-gray-200 dark:border-gray-700 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors">
299
+ <td class="py-3 px-4 font-medium text-blue-600 dark:text-blue-400">Construct</td>
300
+ <td class="py-3 px-4 text-gray-600 dark:text-gray-400">Platformers, Action</td>
301
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">Beginner</span></td>
302
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">High</span></td>
303
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">Excellent</span></td>
304
+ </tr>
305
+ <tr class="border-b border-gray-200 dark:border-gray-700 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors">
306
+ <td class="py-3 px-4 font-medium text-green-600 dark:text-green-400">GDevelop</td>
307
+ <td class="py-3 px-4 text-gray-600 dark:text-gray-400">2D Games, All Types</td>
308
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">Beginner</span></td>
309
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">High</span></td>
310
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">Excellent</span></td>
311
+ </tr>
312
+ <tr class="border-b border-gray-200 dark:border-gray-700 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors">
313
+ <td class="py-3 px-4 font-medium text-indigo-600 dark:text-indigo-400">Phaser</td>
314
+ <td class="py-3 px-4 text-gray-600 dark:text-gray-400">Arcade, Web Games</td>
315
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200 rounded-full text-xs">Intermediate</span></td>
316
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">High</span></td>
317
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">Excellent</span></td>
318
+ </tr>
319
+ <tr class="border-b border-gray-200 dark:border-gray-700 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors">
320
+ <td class="py-3 px-4 font-medium text-pink-600 dark:text-pink-400">Pixi.js</td>
321
+ <td class="py-3 px-4 text-gray-600 dark:text-gray-400">Visual Apps, Effects</td>
322
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200 rounded-full text-xs">Advanced</span></td>
323
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 rounded-full text-xs">Very High</span></td>
324
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200 rounded-full text-xs">Excellent</span></td>
325
+ </tr>
326
+ <tr class="hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors">
327
+ <td class="py-3 px-4 font-medium text-cyan-600 dark:text-cyan-400">Babylon.js</td>
328
+ <td class="py-3 px-4 text-gray-600 dark:text-gray-400">3D Games, Simulations</td>
329
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200 rounded-full text-xs">Advanced</span></td>
330
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 rounded-full text-xs">Very High</span></td>
331
+ <td class="py-3 px-4"><span class="px-2 py-1 bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200 rounded-full text-xs">Good</span></td>
332
+ </tr>
333
+ </tbody>
334
+ </table>
335
+ </div>
336
+ </div>
337
+ </div>
338
+ </section>
339
+ <!-- Services Section -->
340
+ <section id="services" class="py-20 bg-gray-50 dark:bg-gray-900">
341
+ <div class="container mx-auto px-6">
342
+ <h2 class="text-4xl lg:text-5xl font-bold text-center mb-4">
343
+ <span class="bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent">
344
+ Our Services
345
+ </span>
346
+ </h2>
347
+ <p class="text-center text-gray-600 dark:text-gray-400 mb-12 max-w-2xl mx-auto">
348
+ Comprehensive solutions for your game porting needs
349
+ </p>
350
+ <div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
351
+ <div class="service-card bg-white dark:bg-gray-800 rounded-2xl p-8 shadow-xl hover:shadow-2xl transition-all duration-300">
352
+ <div class="w-16 h-16 bg-primary/10 dark:bg-primary/20 rounded-xl flex items-center justify-center mb-6">
353
+ <i data-feather="smartphone" class="w-8 h-8 text-primary"></i>
354
+ </div>
355
+ <h3 class="text-2xl font-bold mb-4 dark:text-white">Mobile Porting</h3>
356
+ <p class="text-gray-600 dark:text-gray-400 mb-4">
357
+ Convert your web games to native iOS and Android applications with optimized performance and native features integration.
358
+ </p>
359
+ <ul class="space-y-2 text-gray-600 dark:text-gray-400">
360
+ <li class="flex items-center"><i data-feather="check-circle" class="w-4 h-4 mr-2 text-secondary"></i> Touch controls optimization</li>
361
+ <li class="flex items-center"><i data-feather="check-circle" class="w-4 h-4 mr-2 text-secondary"></i> Performance optimization</li>
362
+ <li class="flex items-center"><i data-feather="check-circle" class="w-4 h-4 mr-2 text-secondary"></i> Native API integration</li>
363
+ </ul>
364
+ </div>
365
+ <div class="service-card bg-white dark:bg-gray-800 rounded-2xl p-8 shadow-xl hover:shadow-2xl transition-all duration-300">
366
+ <div class="w-16 h-16 bg-secondary/10 dark:bg-secondary/20 rounded-xl flex items-center justify-center mb-6">
367
+ <i data-feather="package" class="w-8 h-8 text-secondary"></i>
368
+ </div>
369
+ <h3 class="text-2xl font-bold mb-4 dark:text-white">App Store Deployment</h3>
370
+ <p class="text-gray-600 dark:text-gray-400 mb-4">
371
+ Complete assistance with App Store and Google Play submission, including metadata, screenshots, and compliance.
372
+ </p>
373
+ <ul class="space-y-2 text-gray-600 dark:text-gray-400">
374
+ <li class="flex items-center"><i data-feather="check-circle" class="w-4 h-4 mr-2 text-secondary"></i> Store optimization</li>
375
+ <li class="flex items-center"><i data-feather="check-circle" class="w-4 h-4 mr-2 text-secondary"></i> Review process handling</li>
376
+ <li class="flex items-center"><i data-feather="check-circle" class="w-4 h-4 mr-2 text-secondary"></i> Updates and maintenance</li>
377
+ </ul>
378
+ </div>
379
+ <div class="service-card bg-white dark:bg-gray-800 rounded-2xl p-8 shadow-xl hover:shadow-2xl transition-all duration-300">
380
+ <div class="w-16 h-16 bg-accent/10 dark:bg-accent/20 rounded-xl flex items-center justify-center mb-6">
381
+ <i data-feather="shield" class="w-8 h-8 text-accent"></i>
382
+ </div>
383
+ <h3 class="text-2xl font-bold mb-4 dark:text-white">Monetization Integration</h3>
384
+ <p class="text-gray-600 dark:text-gray-400 mb-4">
385
+ Add revenue streams to your mobile games with ads, in-app purchases, and premium features.
386
+ </p>
387
+ <ul class="space-y-2 text-gray-600 dark:text-gray-400">
388
+ <li class="flex items-center"><i data-feather="check-circle" class="w-4 h-4 mr-2 text-secondary"></i> Ad networks integration</li>
389
+ <li class="flex items-center"><i data-feather="check-circle" class="w-4 h-4 mr-2 text-secondary"></i> In-app purchases</li>
390
+ <li class="flex items-center"><i data-feather="check-circle" class="w-4 h-4 mr-2 text-secondary"></i> Analytics setup</li>
391
+ </ul>
392
+ </div>
393
+ </div>
394
+ </div>
395
+ </section>
396
+
397
+ <!-- Technology Stack -->
398
+ <section class="py-20 bg-white dark:bg-gray-800">
399
+ <div class="container mx-auto px-6">
400
+ <h2 class="text-4xl lg:text-5xl font-bold text-center mb-4">
401
+ <span class="bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent">
402
+ Technology Stack
403
+ </span>
404
+ </h2>
405
+ <p class="text-center text-gray-600 dark:text-gray-400 mb-12 max-w-2xl mx-auto">
406
+ Modern tools for reliable mobile game development
407
+ </p>
408
+ <div class="grid md:grid-cols-2 gap-12 items-center">
409
+ <div>
410
+ <div class="space-y-6">
411
+ <div class="flex items-center space-x-4">
412
+ <div class="w-20 h-20 bg-gradient-to-br from-primary/20 to-primary/30 dark:from-primary/30 dark:to-primary/40 rounded-xl flex items-center justify-center">
413
+ <i data-feather="cpu" class="w-10 h-10 text-primary"></i>
414
+ </div>
415
+ <div>
416
+ <h3 class="text-xl font-bold dark:text-white">CapacitorJS</h3>
417
+ <p class="text-gray-600 dark:text-gray-400">Modern cross-platform native runtime for web apps</p>
418
+ </div>
419
+ </div>
420
+ <div class="flex items-center space-x-4">
421
+ <div class="w-20 h-20 bg-gradient-to-br from-secondary/20 to-secondary/30 dark:from-secondary/30 dark:to-secondary/40 rounded-xl flex items-center justify-center">
422
+ <i data-feather="zap" class="w-10 h-10 text-secondary"></i>
423
+ </div>
424
+ <div>
425
+ <h3 class="text-xl font-bold dark:text-white">Apache Cordova</h3>
426
+ <p class="text-gray-600 dark:text-gray-400">Proven platform for building hybrid mobile apps</p>
427
+ </div>
428
+ </div>
429
+ <div class="flex items-center space-x-4">
430
+ <div class="w-20 h-20 bg-gradient-to-br from-accent/20 to-accent/30 dark:from-accent/30 dark:to-accent/40 rounded-xl flex items-center justify-center">
431
+ <i data-feather="layers" class="w-10 h-10 text-accent"></i>
432
+ </div>
433
+ <div>
434
+ <h3 class="text-xl font-bold dark:text-white">Native SDKs</h3>
435
+ <p class="text-gray-600 dark:text-gray-400">Deep integration with iOS and Android features</p>
436
+ </div>
437
+ </div>
438
+ </div>
439
+ </div>
440
+ <div class="relative">
441
+ <img src="http://static.photos/technology/640x360/1" alt="Technology Stack" class="rounded-2xl shadow-2xl">
442
+ <div class="absolute -bottom-6 -right-6 bg-primary text-white rounded-xl p-4 shadow-xl">
443
+ <p class="text-2xl font-bold">100+</p>
444
+ <p class="text-sm">Games Ported</p>
445
+ </div>
446
+ </div>
447
+ </div>
448
+ </div>
449
+ </section>
450
+
451
+ <!-- Process Section -->
452
+ <section class="py-20 bg-gray-50 dark:bg-gray-900">
453
+ <div class="container mx-auto px-6">
454
+ <h2 class="text-4xl lg:text-5xl font-bold text-center mb-4">
455
+ <span class="bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent">
456
+ Our Process
457
+ </span>
458
+ </h2>
459
+ <p class="text-center text-gray-600 dark:text-gray-400 mb-12 max-w-2xl mx-auto">
460
+ Simple and transparent workflow from start to finish
461
+ </p>
462
+ <div class="grid md:grid-cols-4 gap-8">
463
+ <div class="relative">
464
+ <div class="bg-white dark:bg-gray-800 rounded-xl p-6 shadow-lg hover:shadow-xl transition-all duration-300">
465
+ <div class="w-12 h-12 bg-primary text-white rounded-full flex items-center justify-center font-bold text-xl mb-4">1</div>
466
+ <h3 class="text-lg font-bold mb-2 dark:text-white">Analysis</h3>
467
+ <p class="text-gray-600 dark:text-gray-400 text-sm">Review your game and assess porting requirements</p>
468
+ </div>
469
+ </div>
470
+ <div class="relative">
471
+ <div class="bg-white dark:bg-gray-800 rounded-xl p-6 shadow-lg hover:shadow-xl transition-all duration-300">
472
+ <div class="w-12 h-12 bg-primary text-white rounded-full flex items-center justify-center font-bold text-xl mb-4">2</div>
473
+ <h3 class="text-lg font-bold mb-2 dark:text-white">Planning</h3>
474
+ <p class="text-gray-600 dark:text-gray-400 text-sm">Create detailed roadmap and timeline for your project</p>
475
+ </div>
476
+ </div>
477
+ <div class="relative">
478
+ <div class="bg-white dark:bg-gray-800 rounded-xl p-6 shadow-lg hover:shadow-xl transition-all duration-300">
479
+ <div class="w-12 h-12 bg-primary text-white rounded-full flex items-center justify-center font-bold text-xl mb-4">3</div>
480
+ <h3 class="text-lg font-bold mb-2 dark:text-white">Development</h3>
481
+ <p class="text-gray-600 dark:text-gray-400 text-sm">Port and optimize your game for mobile platforms</p>
482
+ </div>
483
+ </div>
484
+ <div class="relative">
485
+ <div class="bg-white dark:bg-gray-800 rounded-xl p-6 shadow-lg hover:shadow-xl transition-all duration-300">
486
+ <div class="w-12 h-12 bg-primary text-white rounded-full flex items-center justify-center font-bold text-xl mb-4">4</div>
487
+ <h3 class="text-lg font-bold mb-2 dark:text-white">Launch</h3>
488
+ <p class="text-gray-600 dark:text-gray-400 text-sm">Deploy to app stores and provide ongoing support</p>
489
+ </div>
490
+ </div>
491
+ </div>
492
+ </div>
493
+ </section>
494
+
495
+ <!-- Testimonials -->
496
+ <section class="py-20 bg-white dark:bg-gray-800">
497
+ <div class="container mx-auto px-6">
498
+ <h2 class="text-4xl lg:text-5xl font-bold text-center mb-4">
499
+ <span class="bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent">
500
+ What Our Clients Say
501
+ </span>
502
+ </h2>
503
+ <div class="grid md:grid-cols-3 gap-8 mt-12">
504
+ <div class="bg-gray-50 dark:bg-gray-900 rounded-xl p-6">
505
+ <div class="flex mb-4">
506
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
507
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
508
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
509
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
510
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
511
+ </div>
512
+ <p class="text-gray-600 dark:text-gray-400 mb-4">
513
+ "21games transformed our web RPG into a polished mobile app. The attention to detail and performance optimization was outstanding!"
514
+ </p>
515
+ <div class="flex items-center">
516
+ <div class="w-10 h-10 bg-primary/20 rounded-full flex items-center justify-center mr-3">
517
+ <i data-feather="user" class="w-5 h-5 text-primary"></i>
518
+ </div>
519
+ <div>
520
+ <p class="font-semibold dark:text-white">Alex Chen</p>
521
+ <p class="text-sm text-gray-600 dark:text-gray-400">Indie Developer</p>
522
+ </div>
523
+ </div>
524
+ </div>
525
+ <div class="bg-gray-50 dark:bg-gray-900 rounded-xl p-6">
526
+ <div class="flex mb-4">
527
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
528
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
529
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
530
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
531
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
532
+ </div>
533
+ <p class="text-gray-600 dark:text-gray-400 mb-4">
534
+ "Professional service from start to finish. They handled everything from porting to App Store submission. Highly recommended!"
535
+ </p>
536
+ <div class="flex items-center">
537
+ <div class="w-10 h-10 bg-secondary/20 rounded-full flex items-center justify-center mr-3">
538
+ <i data-feather="user" class="w-5 h-5 text-secondary"></i>
539
+ </div>
540
+ <div>
541
+ <p class="font-semibold dark:text-white">Sarah Miller</p>
542
+ <p class="text-sm text-gray-600 dark:text-gray-400">Game Studio Lead</p>
543
+ </div>
544
+ </div>
545
+ </div>
546
+ <div class="bg-gray-50 dark:bg-gray-900 rounded-xl p-6">
547
+ <div class="flex mb-4">
548
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
549
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
550
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
551
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
552
+ <i data-feather="star" class="w-5 h-5 text-yellow-400 fill-current"></i>
553
+ </div>
554
+ <p class="text-gray-600 dark:text-gray-400 mb-4">
555
+ "The team at 21games is amazing. They quickly ported our Phaser game and optimized it beyond our expectations!"
556
+ </p>
557
+ <div class="flex items-center">
558
+ <div class="w-10 h-10 bg-accent/20 rounded-full flex items-center justify-center mr-3">
559
+ <i data-feather="user" class="w-5 h-5 text-accent"></i>
560
+ </div>
561
+ <div>
562
+ <p class="font-semibold dark:text-white">Mike Johnson</p>
563
+ <p class="text-sm text-gray-600 dark:text-gray-400">Mobile Publisher</p>
564
+ </div>
565
+ </div>
566
+ </div>
567
+ </div>
568
+ </div>
569
+ </section>
570
+
571
+ <!-- CTA Section -->
572
+ <section class="py-20 bg-gradient-to-r from-primary to-secondary">
573
+ <div class="container mx-auto px-6 text-center">
574
+ <h2 class="text-4xl lg:text-5xl font-bold text-white mb-6">
575
+ Ready to Go Mobile?
576
+ </h2>
577
+ <p class="text-xl text-white/90 mb-8 max-w-2xl mx-auto">
578
+ Let's discuss how we can bring your JavaScript game to mobile platforms
579
+ </p>
580
+ <a href="#contact" class="inline-block px-10 py-4 bg-white text-primary font-bold rounded-full hover:bg-gray-100 transform hover:scale-105 transition-all duration-300 shadow-xl">
581
+ Get Started Today
582
+ </a>
583
+ </div>
584
+ </section>
585
+
586
+ <!-- Contact Section -->
587
+ <section id="contact" class="py-20 bg-gray-50 dark:bg-gray-900">
588
+ <div class="container mx-auto px-6">
589
+ <h2 class="text-4xl lg:text-5xl font-bold text-center mb-4">
590
+ <span class="bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent">
591
+ Get In Touch
592
+ </span>
593
+ </h2>
594
+ <p class="text-center text-gray-600 dark:text-gray-400 mb-12 max-w-2xl mx-auto">
595
+ Have a project in mind? Let's create something amazing together
596
+ </p>
597
+ <div class="max-w-4xl mx-auto">
598
+ <div class="bg-white dark:bg-gray-800 rounded-2xl shadow-2xl p-8">
599
+ <form id="contactForm" class="space-y-6">
600
+ <div class="grid md:grid-cols-2 gap-6">
601
+ <div>
602
+ <label class="block text-gray-700 dark:text-gray-300 font-semibold mb-2">Name</label>
603
+ <input type="text" class="w-full px-4 py-3 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-primary" placeholder="Your Name" required>
604
+ </div>
605
+ <div>
606
+ <label class="block text-gray-700 dark:text-gray-300 font-semibold mb-2">Email</label>
607
+ <input type="email" class="w-full px-4 py-3 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-primary" placeholder="your@email.com" required>
608
+ </div>
609
+ </div>
610
+ <div>
611
+ <label class="block text-gray-700 dark:text-gray-300 font-semibold mb-2">Game Engine</label>
612
+ <select class="w-full px-4 py-3 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-primary">
613
+ <option value="">Select Engine</option>
614
+ <option value="rpgmaker">RPG Maker</option>
615
+ <option value="construct">Construct</option>
616
+ <option value="gdevelop">GDevelop</option>
617
+ <option value="phaser">Phaser</option>
618
+ <option value="pixi">Pixi.js</option>
619
+ <option value="babylon">Babylon.js</option>
620
+ <option value="other">Other</option>
621
+ </select>
622
+ </div>
623
+ <div>
624
+ <label class="block text-gray-700 dark:text-gray-300 font-semibold mb-2">Project Details</label>
625
+ <textarea rows="5" class="w-full px-4 py-3 rounded-lg border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-primary" placeholder="Tell us about your game..." required></textarea>
626
+ </div>
627
+ <button type="submit" class="w-full px-8 py-4 bg-gradient-to-r from-primary to-secondary text-white font-bold rounded-lg hover:shadow-lg transform hover:scale-[1.02] transition-all duration-300">
628
+ Send Message
629
+ </button>
630
+ </form>
631
+ </div>
632
+ </div>
633
+ </div>
634
+ </section>
635
+
636
+ <!-- Footer -->
637
+ <custom-footer></custom-footer>
638
+
639
+ <!-- Scripts -->
640
+ <script src="components/navbar.js"></script>
641
+ <script src="components/footer.js"></script>
642
+ <script src="script.js"></script>
643
+ <script>feather.replace();</script>
644
+ <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
645
+ </body>
646
+ </html>
script.js ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Initialize when DOM is loaded
2
+ document.addEventListener('DOMContentLoaded', function() {
3
+ // Initialize animations
4
+ initScrollAnimations();
5
+
6
+ // Initialize smooth scrolling
7
+ initSmoothScroll();
8
+
9
+ // Initialize contact form
10
+ initContactForm();
11
+
12
+ // Initialize theme toggle
13
+ initThemeToggle();
14
+ });
15
+
16
+ // Scroll animations
17
+ function initScrollAnimations() {
18
+ const observerOptions = {
19
+ threshold: 0.1,
20
+ rootMargin: '0px 0px -50px 0px'
21
+ };
22
+
23
+ const observer = new IntersectionObserver((entries) => {
24
+ entries.forEach(entry => {
25
+ if (entry.isIntersecting) {
26
+ entry.target.classList.add('animated');
27
+ }
28
+ });
29
+ }, observerOptions);
30
+
31
+ // Observe all animated elements
32
+ document.querySelectorAll('.animate-on-scroll').forEach(el => {
33
+ observer.observe(el);
34
+ });
35
+ }
36
+
37
+ // Smooth scrolling for anchor links
38
+ function initSmoothScroll() {
39
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
40
+ anchor.addEventListener('click', function (e) {
41
+ e.preventDefault();
42
+ const target = document.querySelector(this.getAttribute('href'));
43
+ if (target) {
44
+ target.scrollIntoView({
45
+ behavior: 'smooth',
46
+ block: 'start'
47
+ });
48
+ }
49
+ });
50
+ });
51
+ }
52
+
53
+ // Contact form handling
54
+ function initContactForm() {
55
+ const form = document.getElementById('contactForm');
56
+ if (form) {
57
+ form.addEventListener('submit', function(e) {
58
+ e.preventDefault();
59
+
60
+ // Get form data
61
+ const formData = new FormData(form);
62
+ const data = Object.fromEntries(formData);
63
+
64
+ // Show success message
65
+ showNotification('Thank you for your message! We\'ll get back to you soon.', 'success');
66
+
67
+ // Reset form
68
+ form.reset();
69
+ });
70
+ }
71
+ }
72
+
73
+ // Theme toggle
74
+ function initThemeToggle() {
75
+ const themeToggle = document.getElementById('themeToggle');
76
+ if (themeToggle) {
77
+ themeToggle.addEventListener('click', function() {
78
+ document.documentElement.classList.toggle('dark');
79
+ localStorage.setItem('theme', document.documentElement.classList.contains('dark') ? 'dark' : 'light');
80
+ });
81
+ }
82
+
83
+ // Load saved theme
84
+ const savedTheme = localStorage.getItem('theme');
85
+ if (savedTheme === 'dark' || (!savedTheme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
86
+ document.documentElement.classList.add('dark');
87
+ }
88
+ }
89
+
90
+ // Notification system
91
+ function showNotification(message, type = 'info') {
92
+ const notification = document.createElement('div');
93
+ notification.className = `fixed bottom-4 right-4 px-6 py-4 rounded-lg shadow-lg transform translate-y-full transition-transform duration-300 z-50`;
94
+
95
+ // Set background color based on type
96
+ if (type === 'success') {
97
+ notification.classList.add('bg-green-500', 'text-white');
98
+ } else if (type === 'error') {
99
+ notification.classList.add('bg-red-500', 'text-white');
100
+ } else {
101
+ notification.classList.add('bg-blue-500', 'text-white');
102
+ }
103
+
104
+ notification.innerHTML = `
105
+ <div class="flex items-center">
106
+ <svg class="w-5 h-5 mr-2" fill="currentColor" viewBox="0 0 20 20">
107
+ ${type === 'success' ?
108
+ '<path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"></path>' :
109
+ '<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"></path>'
110
+ }
111
+ </svg>
112
+ <span>${message}</span>
113
+ </div>
114
+ `;
115
+
116
+ document.body.appendChild(notification);
117
+
118
+ // Slide in
119
+ setTimeout(() => {
120
+ notification.style.transform = 'translateY(0)';
121
+ }, 100);
122
+
123
+ // Remove after 3 seconds
124
+ setTimeout(() => {
125
+ notification.style.transform = 'translateY(100%)';
126
+ setTimeout(() => {
127
+ notification.remove();
128
+ }, 300);
129
+ }, 3000);
130
+ }
131
+
132
+ // Add parallax effect to hero section
133
+ window.addEventListener('scroll', () => {
134
+ const scrolled = window.pageYOffset;
135
+ const parallax = document.querySelector('.hero-parallax');
136
+ if (parallax) {
137
+ parallax.style.transform = `translateY(${scrolled * 0.5}px)`;
138
+ }
139
+ });
140
+
141
+ // Add hover effect to engine cards
142
+ document.querySelectorAll('.engine-card').forEach(card => {
143
+ card.addEventListener('mouseenter', function() {
144
+ this.style.transform = 'translateY(-10px) rotateX(5deg)';
145
+ });
146
+
147
+ card.addEventListener('mouseleave', function() {
148
+ this.style.transform = 'translateY(0) rotateX(0)';
149
+ });
150
+ });
151
+
152
+ // Typing effect for hero title
153
+ function typeWriter(element, text, speed = 50) {
154
+ let i = 0;
155
+ element.innerHTML = '';
156
+
157
+ function type() {
158
+ if (i < text.length) {
159
+ element.innerHTML += text.charAt(i);
160
+ i++;
161
+ setTimeout(type, speed);
162
+ }
163
+ }
164
+
165
+ type();
166
+ }
167
+
168
+ // Initialize typing effect when page loads
169
+ window.addEventListener('load', () => {
170
+ const heroTitle = document.querySelector('.hero-title');
171
+ if (heroTitle) {
172
+ const originalText = heroTitle.textContent;
173
+ typeWriter(heroTitle, originalText, 80);
174
+ }
175
+ });
style.css CHANGED
@@ -1,28 +1,142 @@
1
- body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
 
 
 
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
 
 
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
16
  }
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
 
 
 
 
 
 
 
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Custom CSS */
2
+ .bg-grid-pattern {
3
+ background-image:
4
+ linear-gradient(rgba(124, 58, 237, 0.1) 1px, transparent 1px),
5
+ linear-gradient(90deg, rgba(124, 58, 237, 0.1) 1px, transparent 1px);
6
+ background-size: 50px 50px;
7
  }
8
 
9
+ /* Scroll animations */
10
+ .animate-on-scroll {
11
+ opacity: 0;
12
+ transform: translateY(20px);
13
+ transition: all 0.6s ease-out;
14
  }
15
 
16
+ .animate-on-scroll.animated {
17
+ opacity: 1;
18
+ transform: translateY(0);
 
 
19
  }
20
 
21
+ /* Service card hover effect */
22
+ .service-card {
23
+ position: relative;
24
+ overflow: hidden;
 
 
25
  }
26
 
27
+ .service-card::before {
28
+ content: '';
29
+ position: absolute;
30
+ top: 0;
31
+ left: -100%;
32
+ width: 100%;
33
+ height: 100%;
34
+ background: linear-gradient(90deg, transparent, rgba(124, 58, 237, 0.1), transparent);
35
+ transition: left 0.6s;
36
  }
37
+
38
+ .service-card:hover::before {
39
+ left: 100%;
40
+ }
41
+ /* Engine card hover effect */
42
+ .engine-card {
43
+ perspective: 1000px;
44
+ }
45
+
46
+ /* Engine detail cards */
47
+ .engine-detail-card {
48
+ transition: all 0.3s ease;
49
+ }
50
+
51
+ .engine-detail-card:hover {
52
+ transform: translateY(-5px);
53
+ }
54
+
55
+ /* Table responsive styles */
56
+ @media (max-width: 768px) {
57
+ .overflow-x-auto {
58
+ -webkit-overflow-scrolling: touch;
59
+ }
60
+
61
+ table {
62
+ min-width: 600px;
63
+ }
64
+ }
65
+
66
+ /* Badge styles */
67
+ .badge {
68
+ display: inline-flex;
69
+ align-items: center;
70
+ padding: 0.25rem 0.75rem;
71
+ border-radius: 9999px;
72
+ font-size: 0.75rem;
73
+ font-weight: 500;
74
+ text-transform: uppercase;
75
+ letter-spacing: 0.025em;
76
+ }
77
+ /* Smooth transitions */
78
+ * {
79
+ transition: color 0.3s ease, background-color 0.3s ease;
80
+ }
81
+
82
+ /* Custom scrollbar */
83
+ ::-webkit-scrollbar {
84
+ width: 10px;
85
+ }
86
+
87
+ ::-webkit-scrollbar-track {
88
+ background: #f1f1f1;
89
+ }
90
+
91
+ ::-webkit-scrollbar-thumb {
92
+ background: linear-gradient(to bottom, #7c3aed, #10b981);
93
+ border-radius: 5px;
94
+ }
95
+
96
+ ::-webkit-scrollbar-thumb:hover {
97
+ background: linear-gradient(to bottom, #6d28d9, #059669);
98
+ }
99
+
100
+ /* Dark mode scrollbar */
101
+ .dark ::-webkit-scrollbar-track {
102
+ background: #1f2937;
103
+ }
104
+
105
+ /* Loading animation */
106
+ @keyframes shimmer {
107
+ 0% {
108
+ background-position: -1000px 0;
109
+ }
110
+ 100% {
111
+ background-position: 1000px 0;
112
+ }
113
+ }
114
+
115
+ .shimmer {
116
+ animation: shimmer 2s infinite;
117
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
118
+ background-size: 1000px 100%;
119
+ }
120
+
121
+ /* Focus states */
122
+ button:focus,
123
+ a:focus,
124
+ input:focus,
125
+ textarea:focus,
126
+ select:focus {
127
+ outline: 2px solid #7c3aed;
128
+ outline-offset: 2px;
129
+ }
130
+
131
+ /* Responsive text sizing */
132
+ @media (max-width: 640px) {
133
+ h1 {
134
+ font-size: 2.5rem !important;
135
+ line-height: 1.2;
136
+ }
137
+
138
+ h2 {
139
+ font-size: 2rem !important;
140
+ line-height: 1.3;
141
+ }
142
+ }