cyberia 3.0.2 → 3.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/{.env.production → .env.example} +20 -2
  2. package/.github/workflows/engine-cyberia.cd.yml +41 -10
  3. package/.github/workflows/engine-cyberia.ci.yml +53 -14
  4. package/.github/workflows/ghpkg.ci.yml +1 -1
  5. package/.github/workflows/gitlab.ci.yml +1 -1
  6. package/.github/workflows/hardhat.ci.yml +82 -0
  7. package/.github/workflows/npmpkg.ci.yml +37 -8
  8. package/.github/workflows/publish.ci.yml +5 -5
  9. package/.github/workflows/publish.cyberia.ci.yml +5 -5
  10. package/.github/workflows/pwa-microservices-template-page.cd.yml +3 -3
  11. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  12. package/.github/workflows/release.cd.yml +3 -2
  13. package/.vscode/extensions.json +9 -8
  14. package/.vscode/settings.json +3 -2
  15. package/CHANGELOG.md +533 -290
  16. package/CLI-HELP.md +79 -53
  17. package/WHITE-PAPER.md +1540 -0
  18. package/bin/build.js +16 -11
  19. package/bin/cyberia.js +959 -8
  20. package/bin/deploy.js +103 -270
  21. package/bin/file.js +2 -1
  22. package/bin/index.js +959 -8
  23. package/bin/vs.js +3 -3
  24. package/conf.js +277 -77
  25. package/deployment.yaml +218 -4
  26. package/hardhat/.env.example +31 -0
  27. package/hardhat/README.md +531 -0
  28. package/hardhat/WHITE-PAPER.md +1540 -0
  29. package/hardhat/contracts/ObjectLayerToken.sol +391 -0
  30. package/hardhat/deployments/.gitkeep +0 -0
  31. package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
  32. package/hardhat/hardhat.config.js +136 -0
  33. package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
  34. package/hardhat/networks/besu-object-layer.network.json +138 -0
  35. package/hardhat/package-lock.json +7628 -0
  36. package/hardhat/package.json +45 -0
  37. package/hardhat/scripts/deployObjectLayerToken.js +98 -0
  38. package/hardhat/test/ObjectLayerToken.js +590 -0
  39. package/jsdoc.dd-cyberia.json +59 -0
  40. package/jsdoc.json +20 -13
  41. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  42. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  43. package/manifests/deployment/dd-cyberia-development/deployment.yaml +490 -0
  44. package/manifests/deployment/dd-cyberia-development/proxy.yaml +261 -0
  45. package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +132 -0
  46. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  47. package/manifests/deployment/dd-test-development/deployment.yaml +52 -52
  48. package/manifests/deployment/dd-test-development/proxy.yaml +4 -4
  49. package/manifests/pv-pvc-dd.yaml +1 -1
  50. package/package.json +60 -50
  51. package/proxy.yaml +128 -9
  52. package/pv-pvc.yaml +132 -0
  53. package/scripts/k3s-node-setup.sh +1 -1
  54. package/scripts/ports-ls.sh +2 -0
  55. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +3 -1
  56. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +1 -2
  57. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +40 -7
  58. package/src/api/document/document.service.js +1 -1
  59. package/src/api/file/file.controller.js +3 -1
  60. package/src/api/file/file.service.js +28 -5
  61. package/src/api/ipfs/ipfs.service.js +2 -2
  62. package/src/api/object-layer/object-layer.controller.js +6 -2
  63. package/src/api/object-layer/object-layer.model.js +67 -21
  64. package/src/api/object-layer/object-layer.router.js +668 -42
  65. package/src/api/object-layer/object-layer.service.js +10 -16
  66. package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +1 -2
  67. package/src/api/user/user.router.js +10 -5
  68. package/src/api/user/user.service.js +7 -7
  69. package/src/cli/baremetal.js +6 -10
  70. package/src/cli/cloud-init.js +0 -3
  71. package/src/cli/db.js +54 -71
  72. package/src/cli/deploy.js +64 -12
  73. package/src/cli/env.js +5 -5
  74. package/src/cli/fs.js +0 -2
  75. package/src/cli/image.js +0 -3
  76. package/src/cli/index.js +41 -13
  77. package/src/cli/monitor.js +5 -6
  78. package/src/cli/repository.js +329 -46
  79. package/src/cli/run.js +210 -122
  80. package/src/cli/secrets.js +1 -3
  81. package/src/cli/ssh.js +1 -1
  82. package/src/client/Itemledger.index.js +1 -959
  83. package/src/client/Underpost.index.js +36 -0
  84. package/src/client/components/core/AgGrid.js +20 -5
  85. package/src/client/components/core/Alert.js +2 -2
  86. package/src/client/components/core/Content.js +22 -3
  87. package/src/client/components/core/Docs.js +30 -6
  88. package/src/client/components/core/FileExplorer.js +71 -4
  89. package/src/client/components/core/Input.js +1 -1
  90. package/src/client/components/core/Modal.js +22 -6
  91. package/src/client/components/core/PublicProfile.js +3 -3
  92. package/src/client/components/core/RichText.js +1 -2
  93. package/src/client/components/core/Router.js +34 -1
  94. package/src/client/components/core/Worker.js +1 -1
  95. package/src/client/components/cryptokoyn/CssCryptokoyn.js +63 -1
  96. package/src/client/components/cyberia/ObjectLayerEngineModal.js +145 -119
  97. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +64 -6
  98. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +1 -0
  99. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +44 -2
  100. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +0 -1
  101. package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +64 -2
  102. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +1 -0
  103. package/src/client/components/itemledger/CssItemledger.js +62 -0
  104. package/src/client/components/underpost/CommonUnderpost.js +29 -0
  105. package/src/client/components/underpost/CssUnderpost.js +281 -0
  106. package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +879 -0
  107. package/src/client/components/underpost/DocumentSearchProvider.js +448 -0
  108. package/src/client/components/underpost/ElementsUnderpost.js +38 -0
  109. package/src/client/components/underpost/LabGalleryUnderpost.js +82 -0
  110. package/src/client/components/underpost/LogInUnderpost.js +23 -0
  111. package/src/client/components/underpost/LogOutUnderpost.js +15 -0
  112. package/src/client/components/underpost/MenuUnderpost.js +691 -0
  113. package/src/client/components/underpost/RoutesUnderpost.js +47 -0
  114. package/src/client/components/underpost/SettingsUnderpost.js +16 -0
  115. package/src/client/components/underpost/SignUpUnderpost.js +9 -0
  116. package/src/client/components/underpost/SocketIoUnderpost.js +54 -0
  117. package/src/client/components/underpost/TranslateUnderpost.js +10 -0
  118. package/src/client/public/cryptokoyn/assets/logo/base-icon.png +0 -0
  119. package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
  120. package/src/client/public/cryptokoyn/microdata.json +85 -0
  121. package/src/client/public/cryptokoyn/site.webmanifest +57 -0
  122. package/src/client/public/cryptokoyn/sitemap +3 -3
  123. package/src/client/public/default/sitemap +3 -3
  124. package/src/client/public/itemledger/browserconfig.xml +2 -2
  125. package/src/client/public/itemledger/manifest.webmanifest +4 -4
  126. package/src/client/public/itemledger/microdata.json +71 -0
  127. package/src/client/public/itemledger/sitemap +3 -3
  128. package/src/client/public/itemledger/yandex-browser-manifest.json +2 -2
  129. package/src/client/public/test/sitemap +3 -3
  130. package/src/client/services/object-layer/object-layer.management.js +23 -4
  131. package/src/client/ssr/body/404.js +15 -11
  132. package/src/client/ssr/body/500.js +15 -11
  133. package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
  134. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +83 -0
  135. package/src/client/ssr/head/PwaItemledger.js +60 -0
  136. package/src/client/ssr/head/UnderpostScripts.js +6 -0
  137. package/src/client/ssr/offline/NoNetworkConnection.js +11 -10
  138. package/src/client/ssr/pages/Test.js +11 -10
  139. package/src/client.build.js +0 -3
  140. package/src/client.dev.js +0 -3
  141. package/src/db/DataBaseProvider.js +17 -2
  142. package/src/db/mariadb/MariaDB.js +14 -9
  143. package/src/db/mongo/MongooseDB.js +17 -1
  144. package/src/index.js +1 -1
  145. package/src/proxy.js +0 -3
  146. package/src/runtime/express/Express.js +15 -9
  147. package/src/runtime/lampp/Lampp.js +6 -13
  148. package/src/server/auth.js +12 -14
  149. package/src/server/backup.js +2 -3
  150. package/src/server/besu-genesis-generator.js +1630 -0
  151. package/src/server/client-build-docs.js +126 -17
  152. package/src/server/client-build-live.js +9 -18
  153. package/src/server/client-build.js +203 -75
  154. package/src/server/client-dev-server.js +14 -13
  155. package/src/server/conf.js +376 -164
  156. package/src/server/cron.js +2 -1
  157. package/src/server/dns.js +28 -12
  158. package/src/server/downloader.js +0 -2
  159. package/src/server/logger.js +27 -9
  160. package/src/server/object-layer.js +92 -16
  161. package/src/server/peer.js +0 -2
  162. package/src/server/process.js +1 -50
  163. package/src/server/proxy.js +4 -8
  164. package/src/server/runtime.js +5 -8
  165. package/src/server/semantic-layer-generator.js +1 -0
  166. package/src/server/ssr.js +0 -3
  167. package/src/server/start.js +19 -12
  168. package/src/server/tls.js +0 -2
  169. package/src/server.js +0 -4
  170. package/.env.development +0 -43
  171. package/.env.test +0 -43
  172. package/hardhat/contracts/CryptoKoyn.sol +0 -59
  173. package/hardhat/contracts/ItemLedger.sol +0 -73
  174. package/hardhat/contracts/Lock.sol +0 -34
  175. package/hardhat/hardhat.config.cjs +0 -45
  176. package/hardhat/ignition/modules/Lock.js +0 -18
  177. package/hardhat/networks/cryptokoyn-itemledger.network.json +0 -29
  178. package/hardhat/scripts/deployCryptokoyn.cjs +0 -25
  179. package/hardhat/scripts/deployItemledger.cjs +0 -25
  180. package/hardhat/test/Lock.js +0 -126
  181. package/hardhat/white-paper.md +0 -581
  182. package/white-paper.md +0 -581
@@ -20,965 +20,7 @@ import { s } from './components/core/VanillaJs.js';
20
20
  import { EventsUI } from './components/core/EventsUI.js';
21
21
 
22
22
  const htmlMainBody = async () => {
23
- const style = document.createElement('style');
24
- style.textContent = css`
25
- @keyframes fadeIn {
26
- from {
27
- opacity: 0;
28
- }
29
- to {
30
- opacity: 1;
31
- }
32
- }
33
-
34
- @keyframes fadeInUp {
35
- from {
36
- opacity: 0;
37
- transform: translateY(30px);
38
- }
39
- to {
40
- opacity: 1;
41
- transform: translateY(0);
42
- }
43
- }
44
-
45
- @keyframes slideInLeft {
46
- from {
47
- opacity: 0;
48
- transform: translateX(-50px);
49
- }
50
- to {
51
- opacity: 1;
52
- transform: translateX(0);
53
- }
54
- }
55
-
56
- @keyframes slideInRight {
57
- from {
58
- opacity: 0;
59
- transform: translateX(50px);
60
- }
61
- to {
62
- opacity: 1;
63
- transform: translateX(0);
64
- }
65
- }
66
-
67
- @keyframes pulse {
68
- 0%,
69
- 100% {
70
- transform: scale(1);
71
- }
72
- 50% {
73
- transform: scale(1.05);
74
- }
75
- }
76
-
77
- @keyframes float {
78
- 0%,
79
- 100% {
80
- transform: translateY(0px);
81
- }
82
- 50% {
83
- transform: translateY(-10px);
84
- }
85
- }
86
-
87
- @keyframes glowPulse {
88
- 0%,
89
- 100% {
90
- box-shadow: 0 0 20px rgba(255, 107, 53, 0.4);
91
- }
92
- 50% {
93
- box-shadow: 0 0 40px rgba(255, 107, 53, 0.8);
94
- }
95
- }
96
-
97
- .mr-casas-landing {
98
- font-family:
99
- 'Segoe UI',
100
- system-ui,
101
- -apple-system,
102
- sans-serif;
103
- line-height: 1.6;
104
- max-width: 1400px;
105
- margin: 0 auto;
106
- padding: 0;
107
- opacity: 0;
108
- animation: fadeIn 0.8s ease-out forwards;
109
- }
110
-
111
- /* Hero Section */
112
- .hero-section {
113
- min-height: 90vh;
114
- display: flex;
115
- flex-direction: column;
116
- justify-content: center;
117
- align-items: center;
118
- text-align: center;
119
- padding: 2rem;
120
- position: relative;
121
- overflow: hidden;
122
- background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
123
- }
124
-
125
- .hero-section::before {
126
- content: '';
127
- position: absolute;
128
- top: 0;
129
- left: 0;
130
- right: 0;
131
- bottom: 0;
132
- background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.03'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
133
- pointer-events: none;
134
- }
135
-
136
- .hero-badge {
137
- display: inline-block;
138
- background: rgba(255, 107, 53, 0.2);
139
- color: #ff6b35;
140
- padding: 0.5rem 1.5rem;
141
- border-radius: 50px;
142
- font-size: 0.9rem;
143
- font-weight: 600;
144
- margin-bottom: 1.5rem;
145
- border: 1px solid rgba(255, 107, 53, 0.3);
146
- animation: fadeInUp 0.6s ease-out 0.2s forwards;
147
- opacity: 0;
148
- }
149
-
150
- .hero-title {
151
- font-size: 4rem;
152
- font-weight: 800;
153
- margin-bottom: 0.5rem;
154
- background: linear-gradient(135deg, #fff 0%, #ff6b35 50%, #f7931e 100%);
155
- -webkit-background-clip: text;
156
- -webkit-text-fill-color: transparent;
157
- background-clip: text;
158
- animation: fadeInUp 0.8s ease-out 0.4s forwards;
159
- opacity: 0;
160
- }
161
-
162
- .hero-subtitle {
163
- font-size: 1.5rem;
164
- color: rgba(255, 255, 255, 0.8);
165
- margin-bottom: 1rem;
166
- animation: fadeInUp 0.8s ease-out 0.5s forwards;
167
- opacity: 0;
168
- }
169
-
170
- .hero-partner {
171
- font-size: 1.1rem;
172
- color: rgba(255, 255, 255, 0.6);
173
- margin-bottom: 2rem;
174
- animation: fadeInUp 0.8s ease-out 0.6s forwards;
175
- opacity: 0;
176
- }
177
-
178
- .hero-partner strong {
179
- color: #ff6b35;
180
- }
181
-
182
- .hero-description {
183
- font-size: 1.25rem;
184
- color: rgba(255, 255, 255, 0.9);
185
- max-width: 700px;
186
- margin-bottom: 2.5rem;
187
- animation: fadeInUp 0.8s ease-out 0.7s forwards;
188
- opacity: 0;
189
- }
190
-
191
- .hero-cta-container {
192
- display: flex;
193
- gap: 1rem;
194
- flex-wrap: wrap;
195
- justify-content: center;
196
- animation: fadeInUp 0.8s ease-out 0.9s forwards;
197
- opacity: 0;
198
- }
199
-
200
- .btn-primary-landing {
201
- background: linear-gradient(135deg, #ff6b35 0%, #f7931e 100%);
202
- color: white;
203
- padding: 1rem 2.5rem;
204
- border-radius: 50px;
205
- font-size: 1.1rem;
206
- font-weight: 600;
207
- border: none;
208
- cursor: pointer;
209
- transition: all 0.3s ease;
210
- text-decoration: none;
211
- display: inline-flex;
212
- align-items: center;
213
- gap: 0.5rem;
214
- }
215
-
216
- .btn-primary-landing:hover {
217
- transform: translateY(-3px);
218
- box-shadow: 0 10px 30px rgba(255, 107, 53, 0.4);
219
- }
220
-
221
- .btn-secondary-landing {
222
- background: transparent;
223
- color: white;
224
- padding: 1rem 2.5rem;
225
- border-radius: 50px;
226
- font-size: 1.1rem;
227
- font-weight: 600;
228
- border: 2px solid rgba(255, 255, 255, 0.3);
229
- cursor: pointer;
230
- transition: all 0.3s ease;
231
- text-decoration: none;
232
- display: inline-flex;
233
- align-items: center;
234
- gap: 0.5rem;
235
- }
236
-
237
- .btn-secondary-landing:hover {
238
- background: rgba(255, 255, 255, 0.1);
239
- border-color: rgba(255, 255, 255, 0.5);
240
- transform: translateY(-3px);
241
- }
242
-
243
- .raylib-badge {
244
- display: flex;
245
- align-items: center;
246
- justify-content: center;
247
- gap: 0.5rem;
248
- margin-top: 3rem;
249
- padding: 1rem 2rem;
250
- background: rgba(255, 255, 255, 0.05);
251
- border-radius: 10px;
252
- border: 1px solid rgba(255, 255, 255, 0.1);
253
- animation: fadeInUp 0.8s ease-out 1.1s forwards;
254
- opacity: 0;
255
- }
256
-
257
- .raylib-badge span {
258
- color: rgba(255, 255, 255, 0.7);
259
- font-size: 0.95rem;
260
- }
261
-
262
- .raylib-badge strong {
263
- color: #66bb6a;
264
- font-size: 1.1rem;
265
- }
266
-
267
- /* Featured Service Section */
268
- .featured-section {
269
- padding: 5rem 2rem;
270
- background: linear-gradient(180deg, #0f3460 0%, #1a1a2e 100%);
271
- }
272
-
273
- .featured-container {
274
- display: flex;
275
- flex-wrap: wrap;
276
- gap: 3rem;
277
- align-items: center;
278
- max-width: 1200px;
279
- margin: 0 auto;
280
- }
281
-
282
- .featured-content {
283
- flex: 1;
284
- min-width: 300px;
285
- }
286
-
287
- .featured-visual {
288
- flex: 1;
289
- min-width: 300px;
290
- display: flex;
291
- justify-content: center;
292
- }
293
-
294
- .featured-tag {
295
- display: inline-block;
296
- background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%);
297
- color: white;
298
- padding: 0.4rem 1rem;
299
- border-radius: 5px;
300
- font-size: 0.85rem;
301
- font-weight: 700;
302
- text-transform: uppercase;
303
- letter-spacing: 1px;
304
- margin-bottom: 1.5rem;
305
- }
306
-
307
- .featured-title {
308
- font-size: 2.8rem;
309
- font-weight: 700;
310
- color: white;
311
- margin-bottom: 1.5rem;
312
- line-height: 1.2;
313
- }
314
-
315
- .featured-title .highlight {
316
- color: #ff6b35;
317
- }
318
-
319
- .featured-description {
320
- font-size: 1.15rem;
321
- color: rgba(255, 255, 255, 0.8);
322
- margin-bottom: 2rem;
323
- line-height: 1.8;
324
- }
325
-
326
- .featured-benefits {
327
- list-style: none;
328
- padding: 0;
329
- margin: 0 0 2rem 0;
330
- }
331
-
332
- .featured-benefits li {
333
- display: flex;
334
- align-items: center;
335
- gap: 0.75rem;
336
- color: rgba(255, 255, 255, 0.9);
337
- font-size: 1.05rem;
338
- margin-bottom: 1rem;
339
- }
340
-
341
- .featured-benefits li i {
342
- color: #66bb6a;
343
- font-size: 1.2rem;
344
- }
345
-
346
- .boss-fight-visual {
347
- position: relative;
348
- width: 100%;
349
- max-width: 400px;
350
- height: 350px;
351
- background: linear-gradient(135deg, #2d3436 0%, #1a1a2e 100%);
352
- border-radius: 20px;
353
- overflow: hidden;
354
- border: 3px solid rgba(255, 107, 53, 0.3);
355
- animation: glowPulse 3s ease-in-out infinite;
356
- }
357
-
358
- .boss-fight-visual::before {
359
- content: 'VS';
360
- position: absolute;
361
- top: 50%;
362
- left: 50%;
363
- transform: translate(-50%, -50%);
364
- font-size: 3rem;
365
- font-weight: 900;
366
- color: #ff6b35;
367
- text-shadow: 0 0 20px rgba(255, 107, 53, 0.5);
368
- z-index: 2;
369
- }
370
-
371
- .fighter-you,
372
- .fighter-boss {
373
- position: absolute;
374
- width: 120px;
375
- height: 120px;
376
- border-radius: 50%;
377
- display: flex;
378
- align-items: center;
379
- justify-content: center;
380
- font-size: 3.5rem;
381
- }
382
-
383
- .fighter-you {
384
- top: 20%;
385
- left: 15%;
386
- background: linear-gradient(135deg, #3498db 0%, #2980b9 100%);
387
- border: 3px solid #5dade2;
388
- animation: float 3s ease-in-out infinite;
389
- }
390
-
391
- .fighter-boss {
392
- bottom: 20%;
393
- right: 15%;
394
- background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%);
395
- border: 3px solid #ec7063;
396
- animation: float 3s ease-in-out infinite 1.5s;
397
- }
398
-
399
- .visual-label {
400
- position: absolute;
401
- font-size: 0.8rem;
402
- font-weight: 600;
403
- color: white;
404
- background: rgba(0, 0, 0, 0.7);
405
- padding: 0.3rem 0.8rem;
406
- border-radius: 20px;
407
- }
408
-
409
- .label-you {
410
- top: 45%;
411
- left: 10%;
412
- }
413
-
414
- .label-boss {
415
- bottom: 45%;
416
- right: 10%;
417
- }
418
-
419
- /* Services Section */
420
- .services-section {
421
- padding: 5rem 2rem;
422
- background: #1a1a2e;
423
- }
424
-
425
- .section-header {
426
- text-align: center;
427
- margin-bottom: 4rem;
428
- }
429
-
430
- .section-title {
431
- font-size: 2.5rem;
432
- font-weight: 700;
433
- color: white;
434
- margin-bottom: 1rem;
435
- }
436
-
437
- .section-subtitle {
438
- font-size: 1.15rem;
439
- color: rgba(255, 255, 255, 0.7);
440
- max-width: 600px;
441
- margin: 0 auto;
442
- }
443
-
444
- .services-grid {
445
- display: grid;
446
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
447
- gap: 2rem;
448
- max-width: 1200px;
449
- margin: 0 auto;
450
- }
451
-
452
- .service-card {
453
- background: linear-gradient(145deg, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.02) 100%);
454
- border: 1px solid rgba(255, 255, 255, 0.1);
455
- border-radius: 16px;
456
- padding: 2rem;
457
- transition: all 0.3s ease;
458
- position: relative;
459
- overflow: hidden;
460
- }
461
-
462
- .service-card::before {
463
- content: '';
464
- position: absolute;
465
- top: 0;
466
- left: 0;
467
- right: 0;
468
- height: 3px;
469
- background: linear-gradient(90deg, #ff6b35, #f7931e);
470
- transform: scaleX(0);
471
- transition: transform 0.3s ease;
472
- }
473
-
474
- .service-card:hover {
475
- transform: translateY(-5px);
476
- border-color: rgba(255, 107, 53, 0.3);
477
- box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
478
- }
479
-
480
- .service-card:hover::before {
481
- transform: scaleX(1);
482
- }
483
-
484
- .service-icon {
485
- width: 60px;
486
- height: 60px;
487
- background: linear-gradient(135deg, rgba(255, 107, 53, 0.2) 0%, rgba(247, 147, 30, 0.2) 100%);
488
- border-radius: 12px;
489
- display: flex;
490
- align-items: center;
491
- justify-content: center;
492
- font-size: 1.8rem;
493
- margin-bottom: 1.5rem;
494
- }
495
-
496
- .service-title {
497
- font-size: 1.4rem;
498
- font-weight: 600;
499
- color: white;
500
- margin-bottom: 1rem;
501
- }
502
-
503
- .service-description {
504
- font-size: 1rem;
505
- color: rgba(255, 255, 255, 0.7);
506
- line-height: 1.7;
507
- }
508
-
509
- /* Why Raylib Section */
510
- .raylib-section {
511
- padding: 5rem 2rem;
512
- background: linear-gradient(180deg, #1a1a2e 0%, #16213e 100%);
513
- }
514
-
515
- .raylib-container {
516
- max-width: 1000px;
517
- margin: 0 auto;
518
- text-align: center;
519
- }
520
-
521
- .raylib-logo {
522
- font-size: 4rem;
523
- margin-bottom: 1.5rem;
524
- }
525
-
526
- .raylib-title {
527
- font-size: 2.2rem;
528
- font-weight: 700;
529
- color: white;
530
- margin-bottom: 1.5rem;
531
- }
532
-
533
- .raylib-title .green {
534
- color: #66bb6a;
535
- }
536
-
537
- .raylib-description {
538
- font-size: 1.15rem;
539
- color: rgba(255, 255, 255, 0.8);
540
- margin-bottom: 3rem;
541
- max-width: 700px;
542
- margin-left: auto;
543
- margin-right: auto;
544
- }
545
-
546
- .raylib-features {
547
- display: grid;
548
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
549
- gap: 1.5rem;
550
- }
551
-
552
- .raylib-feature {
553
- background: rgba(102, 187, 106, 0.1);
554
- border: 1px solid rgba(102, 187, 106, 0.2);
555
- border-radius: 12px;
556
- padding: 1.5rem;
557
- transition: all 0.3s ease;
558
- }
559
-
560
- .raylib-feature:hover {
561
- background: rgba(102, 187, 106, 0.15);
562
- transform: translateY(-3px);
563
- }
564
-
565
- .raylib-feature i {
566
- font-size: 1.5rem;
567
- color: #66bb6a;
568
- margin-bottom: 0.75rem;
569
- }
570
-
571
- .raylib-feature h4 {
572
- font-size: 1.1rem;
573
- color: white;
574
- margin-bottom: 0.5rem;
575
- }
576
-
577
- .raylib-feature p {
578
- font-size: 0.9rem;
579
- color: rgba(255, 255, 255, 0.6);
580
- }
581
-
582
- /* CTA Section */
583
- .cta-section {
584
- padding: 5rem 2rem;
585
- background: linear-gradient(135deg, #ff6b35 0%, #f7931e 100%);
586
- text-align: center;
587
- }
588
-
589
- .cta-title {
590
- font-size: 2.5rem;
591
- font-weight: 700;
592
- color: white;
593
- margin-bottom: 1rem;
594
- }
595
-
596
- .cta-description {
597
- font-size: 1.2rem;
598
- color: rgba(255, 255, 255, 0.9);
599
- margin-bottom: 2rem;
600
- max-width: 600px;
601
- margin-left: auto;
602
- margin-right: auto;
603
- }
604
-
605
- .btn-cta {
606
- background: white;
607
- color: #ff6b35;
608
- padding: 1rem 3rem;
609
- border-radius: 50px;
610
- font-size: 1.15rem;
611
- font-weight: 700;
612
- border: none;
613
- cursor: pointer;
614
- transition: all 0.3s ease;
615
- display: inline-flex;
616
- align-items: center;
617
- gap: 0.5rem;
618
- }
619
-
620
- .btn-cta:hover {
621
- transform: translateY(-3px);
622
- box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
623
- }
624
-
625
- /* Footer */
626
- .landing-footer {
627
- padding: 4rem 2rem 2rem;
628
- background: #0d1117;
629
- }
630
-
631
- .footer-content {
632
- display: flex;
633
- flex-wrap: wrap;
634
- gap: 3rem;
635
- max-width: 1200px;
636
- margin: 0 auto;
637
- justify-content: space-between;
638
- }
639
-
640
- .footer-brand {
641
- flex: 1;
642
- min-width: 250px;
643
- }
644
-
645
- .footer-brand h3 {
646
- font-size: 1.8rem;
647
- color: white;
648
- margin-bottom: 0.5rem;
649
- }
650
-
651
- .footer-brand .partner {
652
- color: #ff6b35;
653
- font-size: 1rem;
654
- margin-bottom: 1rem;
655
- }
656
-
657
- .footer-brand p {
658
- color: rgba(255, 255, 255, 0.6);
659
- font-size: 0.95rem;
660
- line-height: 1.7;
661
- }
662
-
663
- .footer-links {
664
- flex: 1;
665
- min-width: 150px;
666
- }
667
-
668
- .footer-links h4 {
669
- color: white;
670
- font-size: 1.1rem;
671
- margin-bottom: 1rem;
672
- }
673
-
674
- .footer-links ul {
675
- list-style: none;
676
- padding: 0;
677
- margin: 0;
678
- }
679
-
680
- .footer-links li {
681
- margin-bottom: 0.75rem;
682
- }
683
-
684
- .footer-links a {
685
- color: rgba(255, 255, 255, 0.6);
686
- text-decoration: none;
687
- transition: color 0.3s ease;
688
- }
689
-
690
- .footer-links a:hover {
691
- color: #ff6b35;
692
- }
693
-
694
- .footer-contact {
695
- flex: 1;
696
- min-width: 200px;
697
- }
698
-
699
- .footer-contact h4 {
700
- color: white;
701
- font-size: 1.1rem;
702
- margin-bottom: 1rem;
703
- }
704
-
705
- .footer-contact p {
706
- color: rgba(255, 255, 255, 0.6);
707
- margin-bottom: 0.75rem;
708
- display: flex;
709
- align-items: center;
710
- gap: 0.5rem;
711
- }
712
-
713
- .footer-contact i {
714
- color: #ff6b35;
715
- }
716
-
717
- .footer-bottom {
718
- max-width: 1200px;
719
- margin: 3rem auto 0;
720
- padding-top: 2rem;
721
- border-top: 1px solid rgba(255, 255, 255, 0.1);
722
- text-align: center;
723
- color: rgba(255, 255, 255, 0.5);
724
- font-size: 0.9rem;
725
- }
726
-
727
- /* Responsive */
728
- @media (max-width: 768px) {
729
- .hero-title {
730
- font-size: 2.5rem;
731
- }
732
-
733
- .hero-subtitle {
734
- font-size: 1.2rem;
735
- }
736
-
737
- .hero-description {
738
- font-size: 1rem;
739
- }
740
-
741
- .featured-title {
742
- font-size: 2rem;
743
- }
744
-
745
- .section-title {
746
- font-size: 2rem;
747
- }
748
-
749
- .boss-fight-visual {
750
- height: 280px;
751
- }
752
-
753
- .fighter-you,
754
- .fighter-boss {
755
- width: 90px;
756
- height: 90px;
757
- font-size: 2.5rem;
758
- }
759
-
760
- .cta-title {
761
- font-size: 1.8rem;
762
- }
763
- }
764
- `;
765
- document.head.appendChild(style);
766
-
767
- setTimeout(() => {
768
- EventsUI.onClick('.btn-contact-landing', () => {
769
- if (s(`.main-btn-sign-up`)) s(`.main-btn-sign-up`).click();
770
- });
771
-
772
- EventsUI.onClick('.btn-learn-more', () => {
773
- const featuredSection = s('.featured-section');
774
- if (featuredSection) {
775
- featuredSection.scrollIntoView({ behavior: 'smooth' });
776
- }
777
- });
778
- });
779
-
780
- return html`
781
- <div class="mr-casas-landing">
782
- <!-- Hero Section -->
783
- <section class="hero-section">
784
- <span class="hero-badge"><i class="fas fa-gamepad"></i> Game Development Studio</span>
785
- <h1 class="hero-title">Mr Casas</h1>
786
- <p class="hero-subtitle">Custom Game Development Services</p>
787
- <p class="hero-partner">In partnership with <strong>Rodrigo Escar</strong></p>
788
- <p class="hero-description">
789
- We create unique, personalized gaming experiences. From indie games to custom projects, we bring your vision
790
- to life with cutting-edge technology and creative passion.
791
- </p>
792
- <div class="hero-cta-container">
793
- <button class="btn-primary-landing btn-contact-landing">
794
- <i class="fas fa-rocket"></i> Start Your Project
795
- </button>
796
- <button class="btn-secondary-landing btn-learn-more"><i class="fas fa-info-circle"></i> Learn More</button>
797
- </div>
798
- <div class="raylib-badge">
799
- <span>Powered by</span>
800
- <strong><i class="fas fa-code"></i> Raylib Engine</strong>
801
- </div>
802
- </section>
803
-
804
- <!-- Featured Service: Fight Your Boss -->
805
- <section class="featured-section">
806
- <div class="featured-container">
807
- <div class="featured-content">
808
- <span class="featured-tag"><i class="fas fa-fire"></i> Most Popular</span>
809
- <h2 class="featured-title">
810
- Put <span class="highlight">Your Face</span> in the Game & <span class="highlight">Fight Your Boss</span>
811
- </h2>
812
- <p class="featured-description">
813
- Ever dreamed of settling workplace frustrations in an epic virtual battle? Our signature service lets you
814
- become the hero of your own game! We'll create a custom fighting game where YOU face off against your
815
- actual boss (or anyone you choose) in an exciting, stress-relieving showdown.
816
- </p>
817
- <ul class="featured-benefits">
818
- <li><i class="fas fa-check-circle"></i> Your face accurately rendered as the game protagonist</li>
819
- <li><i class="fas fa-check-circle"></i> Custom character abilities and fighting moves</li>
820
- <li><i class="fas fa-check-circle"></i> Multiple boss levels with increasing difficulty</li>
821
- <li><i class="fas fa-check-circle"></i> Personalized arenas (office, boardroom, parking lot...)</li>
822
- <li><i class="fas fa-check-circle"></i> Shareable with friends for maximum fun</li>
823
- </ul>
824
- <button class="btn-primary-landing btn-contact-landing">
825
- <i class="fas fa-fist-raised"></i> Create My Game Now
826
- </button>
827
- </div>
828
- <div class="featured-visual">
829
- <div class="boss-fight-visual">
830
- <div class="fighter-you">😎</div>
831
- <span class="visual-label label-you">YOU</span>
832
- <div class="fighter-boss">👔</div>
833
- <span class="visual-label label-boss">YOUR BOSS</span>
834
- </div>
835
- </div>
836
- </div>
837
- </section>
838
-
839
- <!-- Services Section -->
840
- <section class="services-section">
841
- <div class="section-header">
842
- <h2 class="section-title">Our Game Development Services</h2>
843
- <p class="section-subtitle">From concept to launch, we deliver high-quality games tailored to your needs</p>
844
- </div>
845
- <div class="services-grid">
846
- <div class="service-card">
847
- <div class="service-icon">🎮</div>
848
- <h3 class="service-title">Custom Game Development</h3>
849
- <p class="service-description">
850
- Full-cycle game development from concept art to final release. We create 2D and 3D games for PC, mobile,
851
- and web platforms.
852
- </p>
853
- </div>
854
- <div class="service-card">
855
- <div class="service-icon">👤</div>
856
- <h3 class="service-title">Character Personalization</h3>
857
- <p class="service-description">
858
- Transform real photos into game characters. Put yourself, friends, or family into any game we create for a
859
- truly unique experience.
860
- </p>
861
- </div>
862
- <div class="service-card">
863
- <div class="service-icon">⚔️</div>
864
- <h3 class="service-title">Fighting Games</h3>
865
- <p class="service-description">
866
- Our specialty! We create action-packed fighting games with smooth controls, combo systems, and exciting
867
- special moves.
868
- </p>
869
- </div>
870
- <div class="service-card">
871
- <div class="service-icon">🏢</div>
872
- <h3 class="service-title">Corporate Gamification</h3>
873
- <p class="service-description">
874
- Boost team morale with custom games featuring your team members. Perfect for events, training, or just
875
- workplace fun.
876
- </p>
877
- </div>
878
- <div class="service-card">
879
- <div class="service-icon">🎁</div>
880
- <h3 class="service-title">Gift Games</h3>
881
- <p class="service-description">
882
- The ultimate personalized gift! Commission a game featuring your loved ones for birthdays, anniversaries,
883
- or special occasions.
884
- </p>
885
- </div>
886
- <div class="service-card">
887
- <div class="service-icon">🔧</div>
888
- <h3 class="service-title">Game Porting & Updates</h3>
889
- <p class="service-description">
890
- Need to port your existing game to new platforms or add features? We handle updates, optimizations, and
891
- cross-platform deployment.
892
- </p>
893
- </div>
894
- </div>
895
- </section>
896
-
897
- <!-- Why Raylib Section -->
898
- <section class="raylib-section">
899
- <div class="raylib-container">
900
- <div class="raylib-logo">🎯</div>
901
- <h2 class="raylib-title">Built with <span class="green">Raylib</span> Engine</h2>
902
- <p class="raylib-description">
903
- We chose Raylib for its simplicity, power, and flexibility. This lightweight game programming library allows
904
- us to create high-performance games that run smoothly across all platforms.
905
- </p>
906
- <div class="raylib-features">
907
- <div class="raylib-feature">
908
- <i class="fas fa-bolt"></i>
909
- <h4>Fast Performance</h4>
910
- <p>Optimized C code for smooth gameplay</p>
911
- </div>
912
- <div class="raylib-feature">
913
- <i class="fas fa-desktop"></i>
914
- <h4>Cross-Platform</h4>
915
- <p>Windows, Mac, Linux, and Web</p>
916
- </div>
917
- <div class="raylib-feature">
918
- <i class="fas fa-feather-alt"></i>
919
- <h4>Lightweight</h4>
920
- <p>No bloat, just what you need</p>
921
- </div>
922
- <div class="raylib-feature">
923
- <i class="fas fa-code-branch"></i>
924
- <h4>Open Source</h4>
925
- <p>Transparent and community-driven</p>
926
- </div>
927
- </div>
928
- </div>
929
- </section>
930
-
931
- <!-- CTA Section -->
932
- <section class="cta-section">
933
- <h2 class="cta-title">Ready to Beat Your Boss?</h2>
934
- <p class="cta-description">
935
- Let's create your personalized game today. Contact us for a free consultation and quote!
936
- </p>
937
- <button class="btn-cta btn-contact-landing"><i class="fas fa-envelope"></i> Get Started Now</button>
938
- </section>
939
-
940
- <!-- Footer -->
941
- <footer class="landing-footer">
942
- <div class="footer-content">
943
- <div class="footer-brand">
944
- <h3>Mr Casas</h3>
945
- <p class="partner">& Rodrigo Escar</p>
946
- <p>
947
- We're passionate game developers dedicated to creating unique, personalized gaming experiences. Every
948
- project is crafted with care, creativity, and technical excellence.
949
- </p>
950
- </div>
951
- <div class="footer-links">
952
- <h4>Services</h4>
953
- <ul>
954
- <li><a href="#">Custom Games</a></li>
955
- <li><a href="#">Boss Fight Games</a></li>
956
- <li><a href="#">Character Design</a></li>
957
- <li><a href="#">Corporate Games</a></li>
958
- </ul>
959
- </div>
960
- <div class="footer-links">
961
- <h4>Company</h4>
962
- <ul>
963
- <li><a href="#">About Us</a></li>
964
- <li><a href="#">Portfolio</a></li>
965
- <li><a href="#">Testimonials</a></li>
966
- <li><a href="#">FAQ</a></li>
967
- </ul>
968
- </div>
969
- <div class="footer-contact">
970
- <h4>Contact</h4>
971
- <p><i class="fas fa-envelope"></i> hello@mrcasas.dev</p>
972
- <p><i class="fab fa-discord"></i> MrCasas#GameDev</p>
973
- <p><i class="fab fa-github"></i> @mrcasas-games</p>
974
- </div>
975
- </div>
976
- <div class="footer-bottom">
977
- <p>&copy; ${new Date().getFullYear()} Mr Casas & Rodrigo Escar. All rights reserved. Powered by Raylib.</p>
978
- </div>
979
- </footer>
980
- </div>
981
- `;
23
+ return html``;
982
24
  };
983
25
 
984
26
  window.onload = () =>