@kaikybrofc/omnizap-system 2.1.8
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.
- package/.env.example +534 -0
- package/LICENSE +21 -0
- package/README.md +431 -0
- package/RELEASE-v2.1.2.md +83 -0
- package/app/config/adminIdentity.js +87 -0
- package/app/config/baileysConfig.js +693 -0
- package/app/config/groupUtils.js +388 -0
- package/app/connection/socketController.js +992 -0
- package/app/controllers/messageController.js +354 -0
- package/app/modules/adminModule/groupCommandHandlers.js +1294 -0
- package/app/modules/adminModule/groupEventHandlers.js +355 -0
- package/app/modules/aiModule/catCommand.js +1006 -0
- package/app/modules/broadcastModule/noticeCommand.js +416 -0
- package/app/modules/gameModule/diceCommand.js +67 -0
- package/app/modules/menuModule/common.js +311 -0
- package/app/modules/menuModule/menus.js +59 -0
- package/app/modules/playModule/playCommand.js +1615 -0
- package/app/modules/quoteModule/quoteCommand.js +851 -0
- package/app/modules/rpgPokemonModule/rpgBattleCanvasRenderer.js +786 -0
- package/app/modules/rpgPokemonModule/rpgBattleService.js +2082 -0
- package/app/modules/rpgPokemonModule/rpgBattleService.test.js +760 -0
- package/app/modules/rpgPokemonModule/rpgEvolutionUtils.js +22 -0
- package/app/modules/rpgPokemonModule/rpgPokemonCommand.js +172 -0
- package/app/modules/rpgPokemonModule/rpgPokemonDomain.js +192 -0
- package/app/modules/rpgPokemonModule/rpgPokemonDomain.test.js +93 -0
- package/app/modules/rpgPokemonModule/rpgPokemonEvolution.test.js +46 -0
- package/app/modules/rpgPokemonModule/rpgPokemonMessages.js +746 -0
- package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1859 -0
- package/app/modules/rpgPokemonModule/rpgPokemonService.js +6738 -0
- package/app/modules/rpgPokemonModule/rpgProfileCanvasRenderer.js +354 -0
- package/app/modules/statsModule/globalRankingCommand.js +65 -0
- package/app/modules/statsModule/noMessageCommand.js +288 -0
- package/app/modules/statsModule/rankingCommand.js +60 -0
- package/app/modules/statsModule/rankingCommon.js +889 -0
- package/app/modules/stickerModule/addStickerMetadata.js +239 -0
- package/app/modules/stickerModule/convertToWebp.js +390 -0
- package/app/modules/stickerModule/stickerCommand.js +454 -0
- package/app/modules/stickerModule/stickerConvertCommand.js +156 -0
- package/app/modules/stickerModule/stickerTextCommand.js +657 -0
- package/app/modules/stickerPackModule/autoPackCollectorRuntime.js +20 -0
- package/app/modules/stickerPackModule/autoPackCollectorService.js +284 -0
- package/app/modules/stickerPackModule/semanticReclassificationEngine.js +466 -0
- package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +88 -0
- package/app/modules/stickerPackModule/semanticThemeClusterService.js +571 -0
- package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +449 -0
- package/app/modules/stickerPackModule/stickerAssetRepository.js +400 -0
- package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +180 -0
- package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +4078 -0
- package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +598 -0
- package/app/modules/stickerPackModule/stickerClassificationService.js +588 -0
- package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +102 -0
- package/app/modules/stickerPackModule/stickerPackCatalogHttp.js +7506 -0
- package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +1095 -0
- package/app/modules/stickerPackModule/stickerPackEngagementRepository.js +108 -0
- package/app/modules/stickerPackModule/stickerPackErrors.js +30 -0
- package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +110 -0
- package/app/modules/stickerPackModule/stickerPackItemRepository.js +440 -0
- package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +337 -0
- package/app/modules/stickerPackModule/stickerPackMessageService.js +296 -0
- package/app/modules/stickerPackModule/stickerPackRepository.js +442 -0
- package/app/modules/stickerPackModule/stickerPackService.js +788 -0
- package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +51 -0
- package/app/modules/stickerPackModule/stickerPackUtils.js +97 -0
- package/app/modules/stickerPackModule/stickerStorageService.js +507 -0
- package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +233 -0
- package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +205 -0
- package/app/modules/systemMetricsModule/pingCommand.js +421 -0
- package/app/modules/tiktokModule/tiktokCommand.js +798 -0
- package/app/modules/userModule/userCommand.js +1217 -0
- package/app/modules/waifuPicsModule/waifuPicsCommand.js +177 -0
- package/app/observability/metrics.js +734 -0
- package/app/services/captchaService.js +492 -0
- package/app/services/dbWriteQueue.js +572 -0
- package/app/services/groupMetadataService.js +279 -0
- package/app/services/lidMapService.js +663 -0
- package/app/services/messagePersistenceService.js +56 -0
- package/app/services/newsBroadcastService.js +351 -0
- package/app/services/pokeApiService.js +398 -0
- package/app/services/queueUtils.js +57 -0
- package/app/services/socketState.js +7 -0
- package/app/store/aiPromptStore.js +38 -0
- package/app/store/groupConfigStore.js +58 -0
- package/app/store/premiumUserStore.js +36 -0
- package/app/utils/antiLink/antiLinkModule.js +804 -0
- package/app/utils/http/getImageBufferModule.js +18 -0
- package/app/utils/json/jsonSanitizer.js +113 -0
- package/app/utils/json/jsonSanitizer.test.js +40 -0
- package/app/utils/logger/loggerModule.js +262 -0
- package/app/utils/systemMetrics/systemMetricsModule.js +91 -0
- package/database/index.js +2052 -0
- package/database/init.js +516 -0
- package/database/migrations/20260203_0001_sticker_packs.sql +54 -0
- package/database/migrations/20260210_0003_rpg_pokemon.sql +58 -0
- package/database/migrations/20260210_0004_rpg_shiny_biome.sql +9 -0
- package/database/migrations/20260210_0005_rpg_missions.sql +14 -0
- package/database/migrations/20260210_0006_rpg_world_pokedex_traits.sql +27 -0
- package/database/migrations/20260210_0007_rpg_raid_pvp.sql +56 -0
- package/database/migrations/20260210_0008_rpg_social_system.sql +195 -0
- package/database/migrations/20260211_0009_rpg_social_xp.sql +36 -0
- package/database/migrations/20260222_0010_remove_message_xp.sql +2 -0
- package/database/migrations/20260226_0011_sticker_asset_classification.sql +17 -0
- package/database/migrations/20260226_0012_sticker_pack_engagement.sql +16 -0
- package/database/migrations/20260226_0013_sticker_marketplace_intelligence.sql +19 -0
- package/database/migrations/20260226_0014_sticker_pack_publish_flow.sql +30 -0
- package/database/migrations/20260226_0014_sticker_worker_queues.sql +42 -0
- package/database/migrations/20260226_0015_sticker_auto_pack_curation_integrity.sql +18 -0
- package/database/migrations/20260226_0016_sticker_web_google_auth_persistence.sql +34 -0
- package/database/migrations/20260226_0017_sticker_web_admin_ban.sql +22 -0
- package/database/migrations/20260226_0018_sticker_web_admin_moderator.sql +18 -0
- package/database/migrations/20260227_0019_sticker_classification_v2_signals.sql +12 -0
- package/database/migrations/20260227_0020_semantic_theme_clusters.sql +35 -0
- package/docker-compose.yml +103 -0
- package/ecosystem.prod.config.cjs +35 -0
- package/eslint.config.js +61 -0
- package/index.js +437 -0
- package/ml/clip_classifier/Dockerfile +16 -0
- package/ml/clip_classifier/README.md +120 -0
- package/ml/clip_classifier/adaptive_scoring.py +40 -0
- package/ml/clip_classifier/classifier.py +654 -0
- package/ml/clip_classifier/embedding_store.py +481 -0
- package/ml/clip_classifier/env_loader.py +15 -0
- package/ml/clip_classifier/llm_label_expander.py +144 -0
- package/ml/clip_classifier/main.py +213 -0
- package/ml/clip_classifier/requirements.txt +10 -0
- package/ml/clip_classifier/similarity_engine.py +74 -0
- package/observability/alert-rules.yml +60 -0
- package/observability/grafana/dashboards/omnizap-mysql.json +136 -0
- package/observability/grafana/dashboards/omnizap-overview.json +170 -0
- package/observability/grafana/provisioning/dashboards/dashboards.yml +11 -0
- package/observability/grafana/provisioning/datasources/datasources.yml +15 -0
- package/observability/loki-config.yml +38 -0
- package/observability/mysql-exporter.cnf +5 -0
- package/observability/mysql-setup.sql +46 -0
- package/observability/prometheus.yml +32 -0
- package/observability/promtail-config.yml +84 -0
- package/package.json +109 -0
- package/public/api-docs/index.html +144 -0
- package/public/css/github-project-panel.css +297 -0
- package/public/css/stickers-admin.css +1272 -0
- package/public/css/styles.css +671 -0
- package/public/index.html +1311 -0
- package/public/js/apps/apiDocsApp.js +310 -0
- package/public/js/apps/createPackApp.js +2069 -0
- package/public/js/apps/homeApp.js +396 -0
- package/public/js/apps/stickersAdminApp.js +1744 -0
- package/public/js/apps/stickersApp.js +4830 -0
- package/public/js/catalog.js +1019 -0
- package/public/js/github-panel/components/CommitList.js +34 -0
- package/public/js/github-panel/components/ErrorState.js +16 -0
- package/public/js/github-panel/components/GithubProjectPanel.js +106 -0
- package/public/js/github-panel/components/ReleaseList.js +38 -0
- package/public/js/github-panel/components/SkeletonPanel.js +22 -0
- package/public/js/github-panel/components/StatCard.js +15 -0
- package/public/js/github-panel/index.js +15 -0
- package/public/js/github-panel/useGithubRepoData.js +154 -0
- package/public/js/github-panel/vendor/react.js +11 -0
- package/public/js/runtime/react-runtime.js +19 -0
- package/public/licenca/index.html +106 -0
- package/public/stickers/admin/index.html +23 -0
- package/public/stickers/create/index.html +47 -0
- package/public/stickers/index.html +48 -0
- package/public/termos-de-uso/index.html +125 -0
- package/scripts/cache-bust.mjs +107 -0
- package/scripts/deploy.sh +458 -0
- package/scripts/github-deploy-notify.mjs +174 -0
- package/scripts/release.sh +129 -0
|
@@ -0,0 +1,1311 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="pt-BR">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>OmniZap System | Plataforma Open Source de Automação WhatsApp</title>
|
|
7
|
+
<meta name="description" content="OmniZap System: infraestrutura open source para bots e automação WhatsApp em escala, com API, observabilidade, gestão de grupos e arquitetura pronta para produção." />
|
|
8
|
+
<meta name="keywords" content="omnizap, automação whatsapp, api whatsapp, bot whatsapp open source, infraestrutura bot, saas whatsapp, observabilidade, gestão de grupos" />
|
|
9
|
+
<meta name="author" content="OmniZap System" />
|
|
10
|
+
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
|
|
11
|
+
<meta name="theme-color" content="#0b1020" />
|
|
12
|
+
<link rel="canonical" href="https://omnizap.shop/" />
|
|
13
|
+
<link rel="icon" type="image/jpeg" href="https://iili.io/FC3FABe.jpg" />
|
|
14
|
+
<link rel="apple-touch-icon" href="https://iili.io/FC3FABe.jpg" />
|
|
15
|
+
<link rel="sitemap" type="application/xml" href="https://omnizap.shop/sitemap.xml" />
|
|
16
|
+
<link rel="me" href="https://github.com/Kaikygr/omnizap-system" />
|
|
17
|
+
<link rel="me" href="https://wa.me/?text=iniciar" />
|
|
18
|
+
|
|
19
|
+
<meta property="og:type" content="website" />
|
|
20
|
+
<meta property="og:locale" content="pt_BR" />
|
|
21
|
+
<meta property="og:site_name" content="OmniZap System" />
|
|
22
|
+
<meta property="og:title" content="OmniZap System | Plataforma Open Source de Automação WhatsApp" />
|
|
23
|
+
<meta property="og:description" content="Infraestrutura técnica para bots WhatsApp com API, observabilidade e arquitetura modular pronta para produção." />
|
|
24
|
+
<meta property="og:url" content="https://omnizap.shop/" />
|
|
25
|
+
<meta property="og:image" content="https://iili.io/fSNGag2.png" />
|
|
26
|
+
<meta property="og:image:alt" content="Banner OmniZap System com identidade visual tecnológica" />
|
|
27
|
+
|
|
28
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
29
|
+
<meta name="twitter:title" content="OmniZap System" />
|
|
30
|
+
<meta name="twitter:description" content="Plataforma open source de automação WhatsApp com API, telemetria e stack de produção." />
|
|
31
|
+
<meta name="twitter:image" content="https://iili.io/fSNGag2.png" />
|
|
32
|
+
|
|
33
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
34
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
35
|
+
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Sora:wght@500;600;700&display=swap" rel="stylesheet" />
|
|
36
|
+
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css" rel="stylesheet" />
|
|
37
|
+
<link href="/css/github-project-panel.css?v=20260226c" rel="stylesheet" />
|
|
38
|
+
|
|
39
|
+
<script type="application/ld+json">
|
|
40
|
+
{
|
|
41
|
+
"@context": "https://schema.org",
|
|
42
|
+
"@type": "SoftwareApplication",
|
|
43
|
+
"name": "OmniZap System",
|
|
44
|
+
"applicationCategory": "BusinessApplication",
|
|
45
|
+
"operatingSystem": "Linux, Windows, macOS",
|
|
46
|
+
"url": "https://omnizap.shop/",
|
|
47
|
+
"description": "Plataforma open source de automação WhatsApp com API, observabilidade, gestão de grupos e arquitetura modular para produção.",
|
|
48
|
+
"offers": {
|
|
49
|
+
"@type": "Offer",
|
|
50
|
+
"price": "0",
|
|
51
|
+
"priceCurrency": "USD"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
</script>
|
|
55
|
+
<script type="application/ld+json">
|
|
56
|
+
{
|
|
57
|
+
"@context": "https://schema.org",
|
|
58
|
+
"@type": "Organization",
|
|
59
|
+
"name": "OmniZap System",
|
|
60
|
+
"url": "https://omnizap.shop/",
|
|
61
|
+
"logo": "https://iili.io/FC3FABe.jpg",
|
|
62
|
+
"sameAs": [
|
|
63
|
+
"https://github.com/Kaikygr/omnizap-system",
|
|
64
|
+
"https://wa.me/?text=iniciar"
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
</script>
|
|
68
|
+
|
|
69
|
+
<style>
|
|
70
|
+
:root {
|
|
71
|
+
--bg: #0b1020;
|
|
72
|
+
--bg-2: #121a2f;
|
|
73
|
+
--card: #141e36cc;
|
|
74
|
+
--line: #2a3b60;
|
|
75
|
+
--text: #e6edf7;
|
|
76
|
+
--muted: #9fb0cc;
|
|
77
|
+
--primary: #22c55e;
|
|
78
|
+
--primary-2: #38bdf8;
|
|
79
|
+
--warn: #f59e0b;
|
|
80
|
+
--radius: 16px;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
* { box-sizing: border-box; }
|
|
84
|
+
|
|
85
|
+
html, body { margin: 0; padding: 0; }
|
|
86
|
+
|
|
87
|
+
body {
|
|
88
|
+
font-family: "Manrope", system-ui, -apple-system, sans-serif;
|
|
89
|
+
color: var(--text);
|
|
90
|
+
background:
|
|
91
|
+
radial-gradient(58rem 24rem at -8% -12%, #22c55e26, transparent 60%),
|
|
92
|
+
radial-gradient(58rem 24rem at 112% -10%, #38bdf822, transparent 58%),
|
|
93
|
+
linear-gradient(165deg, var(--bg), var(--bg-2));
|
|
94
|
+
min-height: 100vh;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.container { width: min(1150px, 92vw); margin: 0 auto; }
|
|
98
|
+
|
|
99
|
+
.top {
|
|
100
|
+
position: sticky;
|
|
101
|
+
top: 0;
|
|
102
|
+
z-index: 10;
|
|
103
|
+
backdrop-filter: blur(10px);
|
|
104
|
+
background: #0c1221cc;
|
|
105
|
+
border-bottom: 1px solid #223250;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.top-inner {
|
|
109
|
+
display: flex;
|
|
110
|
+
align-items: center;
|
|
111
|
+
justify-content: space-between;
|
|
112
|
+
gap: 16px;
|
|
113
|
+
padding: 14px 0;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.top-head {
|
|
117
|
+
display: contents;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.brand {
|
|
121
|
+
display: inline-flex;
|
|
122
|
+
align-items: center;
|
|
123
|
+
gap: 10px;
|
|
124
|
+
font-family: "Sora", sans-serif;
|
|
125
|
+
font-weight: 700;
|
|
126
|
+
letter-spacing: .2px;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.brand-logo {
|
|
130
|
+
width: 30px;
|
|
131
|
+
height: 30px;
|
|
132
|
+
border-radius: 50%;
|
|
133
|
+
object-fit: cover;
|
|
134
|
+
border: 1px solid #2f4368;
|
|
135
|
+
box-shadow: 0 2px 10px #00000033;
|
|
136
|
+
flex: 0 0 auto;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.nav { display: flex; gap: 10px; flex-wrap: wrap; }
|
|
140
|
+
|
|
141
|
+
.nav-toggle {
|
|
142
|
+
display: none;
|
|
143
|
+
width: 42px;
|
|
144
|
+
height: 42px;
|
|
145
|
+
border-radius: 10px;
|
|
146
|
+
border: 1px solid var(--line);
|
|
147
|
+
background: #111a2d;
|
|
148
|
+
color: var(--text);
|
|
149
|
+
align-items: center;
|
|
150
|
+
justify-content: center;
|
|
151
|
+
font-size: 21px;
|
|
152
|
+
line-height: 1;
|
|
153
|
+
cursor: pointer;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.btn {
|
|
157
|
+
text-decoration: none;
|
|
158
|
+
color: var(--text);
|
|
159
|
+
border: 1px solid var(--line);
|
|
160
|
+
background: #111a2d;
|
|
161
|
+
padding: 10px 14px;
|
|
162
|
+
border-radius: 12px;
|
|
163
|
+
font-weight: 600;
|
|
164
|
+
transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.icon-inline {
|
|
168
|
+
margin-right: 8px;
|
|
169
|
+
color: #8ec5ff;
|
|
170
|
+
font-size: .95em;
|
|
171
|
+
text-shadow: 0 0 18px #69aef35c;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.btn .icon-inline {
|
|
175
|
+
margin-right: 6px;
|
|
176
|
+
color: inherit;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.btn:hover { transform: translateY(-1px); border-color: #3f567f; }
|
|
180
|
+
|
|
181
|
+
.btn.primary {
|
|
182
|
+
color: #042511;
|
|
183
|
+
border-color: transparent;
|
|
184
|
+
background: linear-gradient(90deg, var(--primary), #16a34a);
|
|
185
|
+
box-shadow: 0 8px 22px #22c55e33;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
@media (max-width: 860px) {
|
|
189
|
+
.top-inner {
|
|
190
|
+
flex-direction: column;
|
|
191
|
+
align-items: stretch;
|
|
192
|
+
gap: 12px;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.top-head {
|
|
196
|
+
display: flex;
|
|
197
|
+
align-items: center;
|
|
198
|
+
justify-content: space-between;
|
|
199
|
+
gap: 10px;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.brand {
|
|
203
|
+
text-align: left;
|
|
204
|
+
font-size: 22px;
|
|
205
|
+
line-height: 1.1;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.nav-toggle {
|
|
209
|
+
display: inline-flex;
|
|
210
|
+
flex: 0 0 auto;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.nav {
|
|
214
|
+
display: none;
|
|
215
|
+
width: 100%;
|
|
216
|
+
grid-template-columns: 1fr;
|
|
217
|
+
gap: 8px;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.nav.open {
|
|
221
|
+
display: grid;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.btn {
|
|
225
|
+
width: 100%;
|
|
226
|
+
text-align: center;
|
|
227
|
+
padding: 10px 10px;
|
|
228
|
+
border-radius: 10px;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
@media (max-width: 420px) {
|
|
234
|
+
.top-inner {
|
|
235
|
+
padding: 12px 0;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.brand {
|
|
239
|
+
font-size: 19px;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.btn {
|
|
243
|
+
font-size: 15px;
|
|
244
|
+
padding: 9px 8px;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.hero {
|
|
249
|
+
margin: 38px 0 14px;
|
|
250
|
+
position: relative;
|
|
251
|
+
overflow: hidden;
|
|
252
|
+
isolation: isolate;
|
|
253
|
+
border: 1px solid #334869;
|
|
254
|
+
border-radius: 24px;
|
|
255
|
+
background: linear-gradient(150deg, #0f1a31ee, #101d35f0);
|
|
256
|
+
box-shadow: 0 18px 48px #040c1f7a, inset 0 1px 0 #b7d3ff14;
|
|
257
|
+
padding: clamp(16px, 3vw, 34px);
|
|
258
|
+
animation: rise .5s ease-out;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.hero::before {
|
|
262
|
+
content: "";
|
|
263
|
+
position: absolute;
|
|
264
|
+
inset: -30% auto auto -25%;
|
|
265
|
+
width: 430px;
|
|
266
|
+
height: 430px;
|
|
267
|
+
border-radius: 50%;
|
|
268
|
+
background: radial-gradient(circle, #30d27d3a 0%, #30d27d00 72%);
|
|
269
|
+
pointer-events: none;
|
|
270
|
+
z-index: -1;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.hero::after {
|
|
274
|
+
content: "";
|
|
275
|
+
position: absolute;
|
|
276
|
+
inset: auto -18% -28% auto;
|
|
277
|
+
width: 420px;
|
|
278
|
+
height: 420px;
|
|
279
|
+
border-radius: 50%;
|
|
280
|
+
background: radial-gradient(circle, #45b8ff30 0%, #45b8ff00 68%);
|
|
281
|
+
pointer-events: none;
|
|
282
|
+
z-index: -1;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.hero-banner {
|
|
286
|
+
display: block;
|
|
287
|
+
width: 100%;
|
|
288
|
+
max-height: 238px;
|
|
289
|
+
object-fit: cover;
|
|
290
|
+
border-radius: 16px;
|
|
291
|
+
border: 1px solid #3a5279;
|
|
292
|
+
margin-bottom: 15px;
|
|
293
|
+
box-shadow: 0 12px 30px #00000052;
|
|
294
|
+
filter: saturate(1.06) contrast(1.03);
|
|
295
|
+
transition: transform 200ms cubic-bezier(.4, 0, .2, 1), box-shadow 200ms cubic-bezier(.4, 0, .2, 1), border-color 200ms cubic-bezier(.4, 0, .2, 1);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.hero-banner:hover {
|
|
299
|
+
transform: translateY(-2px);
|
|
300
|
+
border-color: #5876a7;
|
|
301
|
+
box-shadow: 0 16px 34px #00000066;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.eyebrow {
|
|
305
|
+
display: inline-flex;
|
|
306
|
+
align-items: center;
|
|
307
|
+
gap: 6px;
|
|
308
|
+
border: 1px solid #3d5a85;
|
|
309
|
+
border-radius: 999px;
|
|
310
|
+
padding: 7px 13px;
|
|
311
|
+
color: #c2d5f4;
|
|
312
|
+
font-size: 12px;
|
|
313
|
+
font-weight: 700;
|
|
314
|
+
letter-spacing: .35px;
|
|
315
|
+
text-transform: uppercase;
|
|
316
|
+
background: #14233f8c;
|
|
317
|
+
backdrop-filter: blur(7px);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.hero h1 {
|
|
321
|
+
font-family: "Sora", sans-serif;
|
|
322
|
+
margin: 11px 0 9px;
|
|
323
|
+
font-size: clamp(28px, 4.2vw, 46px);
|
|
324
|
+
line-height: 1.04;
|
|
325
|
+
letter-spacing: -0.02em;
|
|
326
|
+
max-width: 900px;
|
|
327
|
+
font-weight: 700;
|
|
328
|
+
background: linear-gradient(90deg, #eef5ff 0%, #8ed4ff 43%, #67e0b0 100%);
|
|
329
|
+
-webkit-background-clip: text;
|
|
330
|
+
background-clip: text;
|
|
331
|
+
color: transparent;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.lead {
|
|
335
|
+
margin: 0;
|
|
336
|
+
max-width: 720px;
|
|
337
|
+
color: #bfd0e8;
|
|
338
|
+
font-size: clamp(15px, 1.8vw, 18px);
|
|
339
|
+
line-height: 1.6;
|
|
340
|
+
font-weight: 500;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.hero-cta {
|
|
344
|
+
display: flex;
|
|
345
|
+
gap: 11px;
|
|
346
|
+
flex-wrap: wrap;
|
|
347
|
+
margin-top: 18px;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
.hero-cta .btn {
|
|
351
|
+
border-radius: 14px;
|
|
352
|
+
transition: transform 200ms ease-in-out, border-color 200ms ease-in-out, box-shadow 200ms ease-in-out, filter 200ms ease-in-out;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.hero-cta .btn:hover,
|
|
356
|
+
.hero-cta .btn:focus-visible {
|
|
357
|
+
transform: translateY(-2px) scale(1.03);
|
|
358
|
+
box-shadow: 0 12px 24px #060d1f5c;
|
|
359
|
+
border-color: #49628c;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.hero-cta .btn.primary:hover,
|
|
363
|
+
.hero-cta .btn.primary:focus-visible {
|
|
364
|
+
box-shadow: 0 14px 30px #2bcf763d;
|
|
365
|
+
filter: saturate(1.06);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.hero-stats {
|
|
369
|
+
margin-top: 24px;
|
|
370
|
+
display: grid;
|
|
371
|
+
grid-template-columns: repeat(auto-fit, minmax(196px, 1fr));
|
|
372
|
+
gap: 12px;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.hero-proof {
|
|
376
|
+
margin-top: 18px;
|
|
377
|
+
display: grid;
|
|
378
|
+
gap: 12px;
|
|
379
|
+
grid-template-columns: repeat(auto-fit, minmax(172px, 1fr));
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.proof-card {
|
|
383
|
+
border: 1px solid #38527b80;
|
|
384
|
+
border-radius: 18px;
|
|
385
|
+
padding: 12px;
|
|
386
|
+
background: linear-gradient(150deg, #12203a7d, #0d182e8a);
|
|
387
|
+
backdrop-filter: blur(9px);
|
|
388
|
+
min-height: 116px;
|
|
389
|
+
transition: transform 200ms ease-in-out, box-shadow 200ms ease-in-out, border-color 200ms ease-in-out;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.proof-card:hover {
|
|
393
|
+
transform: translateY(-2px);
|
|
394
|
+
border-color: #5678adad;
|
|
395
|
+
box-shadow: 0 14px 26px #03091552;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
.proof-value {
|
|
399
|
+
display: block;
|
|
400
|
+
font-family: "Sora", sans-serif;
|
|
401
|
+
font-size: clamp(22px, 2.4vw, 26px);
|
|
402
|
+
line-height: 1.08;
|
|
403
|
+
color: #edf6ff;
|
|
404
|
+
letter-spacing: -0.02em;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
.proof-label {
|
|
408
|
+
display: block;
|
|
409
|
+
margin-top: 4px;
|
|
410
|
+
color: #a7bbd9;
|
|
411
|
+
font-size: 12px;
|
|
412
|
+
font-weight: 600;
|
|
413
|
+
letter-spacing: 0.01em;
|
|
414
|
+
text-transform: uppercase;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
#proof-system {
|
|
418
|
+
display: inline-flex;
|
|
419
|
+
align-items: center;
|
|
420
|
+
gap: 8px;
|
|
421
|
+
margin-top: 8px;
|
|
422
|
+
border: 1px solid #4f6d98;
|
|
423
|
+
border-radius: 999px;
|
|
424
|
+
background: #12233fba;
|
|
425
|
+
padding: 6px 10px;
|
|
426
|
+
min-height: 34px;
|
|
427
|
+
font-size: 14px;
|
|
428
|
+
line-height: 1;
|
|
429
|
+
color: #ffefcf;
|
|
430
|
+
text-transform: capitalize;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
#proof-system::before {
|
|
434
|
+
content: "";
|
|
435
|
+
width: 8px;
|
|
436
|
+
height: 8px;
|
|
437
|
+
border-radius: 50%;
|
|
438
|
+
background: #f59e0b;
|
|
439
|
+
box-shadow: 0 0 0 0 #f59e0b4d;
|
|
440
|
+
animation: pulse-status 1.8s infinite;
|
|
441
|
+
flex: 0 0 auto;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.proof-card[data-status="online"] {
|
|
445
|
+
border-color: #23895796;
|
|
446
|
+
box-shadow: inset 0 0 0 1px #2389573b;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
.proof-card[data-status="degraded"],
|
|
450
|
+
.proof-card[data-status="connecting"] {
|
|
451
|
+
border-color: #9f742f99;
|
|
452
|
+
box-shadow: inset 0 0 0 1px #9f742f3a;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
.proof-card[data-status="offline"] {
|
|
456
|
+
border-color: #943535a3;
|
|
457
|
+
box-shadow: inset 0 0 0 1px #94353540;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
.proof-card[data-status="online"] #proof-system {
|
|
461
|
+
border-color: #2b9761;
|
|
462
|
+
background: #0f2a208c;
|
|
463
|
+
color: #ddffe9;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
.proof-card[data-status="online"] #proof-system::before {
|
|
467
|
+
background: #22c55e;
|
|
468
|
+
box-shadow: 0 0 0 0 #22c55e5c;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.proof-card[data-status="degraded"] #proof-system,
|
|
472
|
+
.proof-card[data-status="connecting"] #proof-system {
|
|
473
|
+
border-color: #a87b35;
|
|
474
|
+
background: #35261096;
|
|
475
|
+
color: #ffefcf;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
.proof-card[data-status="degraded"] #proof-system::before,
|
|
479
|
+
.proof-card[data-status="connecting"] #proof-system::before {
|
|
480
|
+
background: #f59e0b;
|
|
481
|
+
box-shadow: 0 0 0 0 #f59e0b5e;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
.proof-card[data-status="offline"] #proof-system {
|
|
485
|
+
border-color: #a63c3c;
|
|
486
|
+
background: #34161699;
|
|
487
|
+
color: #ffdede;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
.proof-card[data-status="offline"] #proof-system::before {
|
|
491
|
+
background: #ef4444;
|
|
492
|
+
box-shadow: 0 0 0 0 #ef44446b;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.market-preview {
|
|
496
|
+
margin: 20px 0 10px;
|
|
497
|
+
border: 1px solid #334b7391;
|
|
498
|
+
border-radius: 20px;
|
|
499
|
+
background: linear-gradient(150deg, #0f1a328f, #0e1a308f);
|
|
500
|
+
backdrop-filter: blur(8px);
|
|
501
|
+
padding: clamp(14px, 2vw, 18px);
|
|
502
|
+
box-shadow: 0 16px 34px #02081659;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
.market-preview-head {
|
|
506
|
+
display: flex;
|
|
507
|
+
align-items: center;
|
|
508
|
+
justify-content: space-between;
|
|
509
|
+
gap: 10px;
|
|
510
|
+
margin-bottom: 14px;
|
|
511
|
+
flex-wrap: wrap;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
.market-preview-title {
|
|
515
|
+
margin: 0;
|
|
516
|
+
font-family: "Sora", sans-serif;
|
|
517
|
+
font-size: 19px;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
.market-preview-status {
|
|
521
|
+
color: #9db3d3;
|
|
522
|
+
font-size: 13px;
|
|
523
|
+
font-weight: 600;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
.market-preview-grid {
|
|
527
|
+
display: grid;
|
|
528
|
+
gap: 14px;
|
|
529
|
+
grid-template-columns: repeat(auto-fit, minmax(178px, 1fr));
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
.market-pack {
|
|
533
|
+
position: relative;
|
|
534
|
+
display: block;
|
|
535
|
+
aspect-ratio: 1 / 1;
|
|
536
|
+
border: 1px solid #3b5683a3;
|
|
537
|
+
border-radius: 18px;
|
|
538
|
+
overflow: hidden;
|
|
539
|
+
background: #0b1427;
|
|
540
|
+
text-decoration: none;
|
|
541
|
+
color: inherit;
|
|
542
|
+
box-shadow: 0 10px 24px #0208174a;
|
|
543
|
+
transition: transform 200ms ease-in-out, border-color 200ms ease-in-out, box-shadow 200ms ease-in-out;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
.market-pack::after {
|
|
547
|
+
content: "";
|
|
548
|
+
position: absolute;
|
|
549
|
+
inset: 0;
|
|
550
|
+
background: linear-gradient(180deg, #08112400 30%, #091527d4 92%);
|
|
551
|
+
opacity: 0.7;
|
|
552
|
+
pointer-events: none;
|
|
553
|
+
transition: opacity 200ms ease-in-out;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
.market-pack:hover {
|
|
557
|
+
transform: translateY(-2px) scale(1.01);
|
|
558
|
+
border-color: #6388c0;
|
|
559
|
+
box-shadow: 0 16px 30px #02081763;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
.market-pack:hover::after { opacity: 0.92; }
|
|
563
|
+
|
|
564
|
+
.market-pack-thumb {
|
|
565
|
+
position: absolute;
|
|
566
|
+
inset: 0;
|
|
567
|
+
width: 100%;
|
|
568
|
+
height: 100%;
|
|
569
|
+
object-fit: cover;
|
|
570
|
+
background: radial-gradient(circle at 20% 20%, #426aa633, #0a1222);
|
|
571
|
+
transition: transform 200ms ease-in-out;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
.market-pack:hover .market-pack-thumb { transform: scale(1.06); }
|
|
575
|
+
|
|
576
|
+
.market-pack-body {
|
|
577
|
+
position: absolute;
|
|
578
|
+
left: 10px;
|
|
579
|
+
right: 10px;
|
|
580
|
+
bottom: 10px;
|
|
581
|
+
border: 1px solid #4a668f8a;
|
|
582
|
+
border-radius: 12px;
|
|
583
|
+
background: #0d1a30b8;
|
|
584
|
+
backdrop-filter: blur(9px);
|
|
585
|
+
padding: 9px 10px;
|
|
586
|
+
transform: translateY(4px);
|
|
587
|
+
transition: transform 200ms ease-in-out, border-color 200ms ease-in-out;
|
|
588
|
+
z-index: 3;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
.market-pack:hover .market-pack-body {
|
|
592
|
+
transform: translateY(0);
|
|
593
|
+
border-color: #6388c0;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
.market-pack-name {
|
|
597
|
+
margin: 0;
|
|
598
|
+
font-size: 13px;
|
|
599
|
+
font-weight: 700;
|
|
600
|
+
color: #e8f2ff;
|
|
601
|
+
line-height: 1.25;
|
|
602
|
+
min-height: 30px;
|
|
603
|
+
text-shadow: 0 2px 12px #04080f73;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
.market-pack-meta {
|
|
607
|
+
margin-top: 4px;
|
|
608
|
+
color: #b2c5e2;
|
|
609
|
+
font-size: 12px;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
.market-pack-tag {
|
|
613
|
+
position: absolute;
|
|
614
|
+
left: 10px;
|
|
615
|
+
top: 10px;
|
|
616
|
+
z-index: 4;
|
|
617
|
+
border: 1px solid #2aa16e99;
|
|
618
|
+
border-radius: 999px;
|
|
619
|
+
background: #103425bd;
|
|
620
|
+
color: #ccffdf;
|
|
621
|
+
font-size: 10px;
|
|
622
|
+
line-height: 1;
|
|
623
|
+
font-weight: 800;
|
|
624
|
+
letter-spacing: 0.06em;
|
|
625
|
+
padding: 6px 8px;
|
|
626
|
+
text-transform: uppercase;
|
|
627
|
+
backdrop-filter: blur(6px);
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
.market-pack.is-loading {
|
|
631
|
+
pointer-events: none;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
.market-pack-skeleton-thumb {
|
|
635
|
+
position: absolute;
|
|
636
|
+
inset: 0;
|
|
637
|
+
width: 100%;
|
|
638
|
+
height: 100%;
|
|
639
|
+
background: linear-gradient(90deg, #27416780, #3d629380, #27416780);
|
|
640
|
+
background-size: 200% 100%;
|
|
641
|
+
animation: skeleton-shimmer 1.1s linear infinite;
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
.market-pack-skeleton-body {
|
|
645
|
+
position: absolute;
|
|
646
|
+
left: 10px;
|
|
647
|
+
right: 10px;
|
|
648
|
+
bottom: 10px;
|
|
649
|
+
border: 1px solid #415f8c8c;
|
|
650
|
+
border-radius: 12px;
|
|
651
|
+
background: #101d34bf;
|
|
652
|
+
backdrop-filter: blur(8px);
|
|
653
|
+
padding: 9px 10px;
|
|
654
|
+
display: grid;
|
|
655
|
+
gap: 6px;
|
|
656
|
+
z-index: 3;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
.market-pack-skeleton-line {
|
|
660
|
+
height: 9px;
|
|
661
|
+
border-radius: 999px;
|
|
662
|
+
background: linear-gradient(90deg, #3859877a, #5c86be7a, #3859877a);
|
|
663
|
+
background-size: 220% 100%;
|
|
664
|
+
animation: skeleton-shimmer 1.1s linear infinite;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
.market-pack-skeleton-line.short {
|
|
668
|
+
width: 66%;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
.reveal {
|
|
672
|
+
opacity: 0;
|
|
673
|
+
transform: translateY(12px);
|
|
674
|
+
transition: opacity .48s ease, transform .48s ease;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
.reveal.in-view {
|
|
678
|
+
opacity: 1;
|
|
679
|
+
transform: translateY(0);
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
.chip {
|
|
683
|
+
border: 1px solid #3a557d;
|
|
684
|
+
border-radius: 16px;
|
|
685
|
+
padding: 11px 13px;
|
|
686
|
+
background: linear-gradient(145deg, #11203a8a, #0e1a3185);
|
|
687
|
+
backdrop-filter: blur(7px);
|
|
688
|
+
color: #c9daf2;
|
|
689
|
+
font-size: 14px;
|
|
690
|
+
transition: transform 200ms cubic-bezier(.4, 0, .2, 1), box-shadow 200ms cubic-bezier(.4, 0, .2, 1), border-color 200ms cubic-bezier(.4, 0, .2, 1);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.chip:hover {
|
|
694
|
+
transform: translateY(-2px);
|
|
695
|
+
border-color: #5d81ba;
|
|
696
|
+
box-shadow: 0 12px 22px #040a183f;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
.section-title {
|
|
700
|
+
margin: 34px 0 12px;
|
|
701
|
+
font-family: "Sora", sans-serif;
|
|
702
|
+
font-size: 24px;
|
|
703
|
+
letter-spacing: -0.01em;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
.grid {
|
|
707
|
+
display: grid;
|
|
708
|
+
gap: 12px;
|
|
709
|
+
grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
.card {
|
|
713
|
+
border: 1px solid #36517a8f;
|
|
714
|
+
border-radius: 16px;
|
|
715
|
+
background: linear-gradient(150deg, #12213a8f, #101b308f);
|
|
716
|
+
backdrop-filter: blur(7px);
|
|
717
|
+
padding: 16px;
|
|
718
|
+
animation: rise .55s ease-out;
|
|
719
|
+
transition: transform 200ms cubic-bezier(.4, 0, .2, 1), box-shadow 200ms cubic-bezier(.4, 0, .2, 1), border-color 200ms cubic-bezier(.4, 0, .2, 1), background 200ms cubic-bezier(.4, 0, .2, 1);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.card:hover {
|
|
723
|
+
transform: translateY(-2px);
|
|
724
|
+
border-color: #5c81bb;
|
|
725
|
+
background: linear-gradient(150deg, #14264196, #11203a96);
|
|
726
|
+
box-shadow: 0 14px 28px #02081657;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
.card h3 { margin: 0 0 8px; font-size: 18px; color: #eaf4ff; }
|
|
730
|
+
.card p { margin: 0; color: #b2c4df; line-height: 1.56; }
|
|
731
|
+
|
|
732
|
+
.card h3 .icon-inline { color: #8dd6ff; }
|
|
733
|
+
|
|
734
|
+
.api {
|
|
735
|
+
margin-top: 14px;
|
|
736
|
+
border: 1px solid #2c4067;
|
|
737
|
+
border-radius: 14px;
|
|
738
|
+
overflow: hidden;
|
|
739
|
+
background: #0c1529;
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
.api-head {
|
|
743
|
+
padding: 10px 14px;
|
|
744
|
+
border-bottom: 1px solid #26395d;
|
|
745
|
+
color: #b8c8e2;
|
|
746
|
+
font-size: 13px;
|
|
747
|
+
font-weight: 700;
|
|
748
|
+
text-transform: uppercase;
|
|
749
|
+
letter-spacing: .35px;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
pre {
|
|
753
|
+
margin: 0;
|
|
754
|
+
padding: 14px;
|
|
755
|
+
overflow: auto;
|
|
756
|
+
color: #d3f7e0;
|
|
757
|
+
font-size: 13px;
|
|
758
|
+
line-height: 1.55;
|
|
759
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
.final-cta {
|
|
763
|
+
margin: 26px 0;
|
|
764
|
+
padding: 24px;
|
|
765
|
+
border-radius: 18px;
|
|
766
|
+
border: 1px solid #476ca3;
|
|
767
|
+
background: linear-gradient(135deg, #132244, #12305a);
|
|
768
|
+
box-shadow: 0 16px 30px #03081757, inset 0 1px 0 #98c7ff22;
|
|
769
|
+
display: flex;
|
|
770
|
+
align-items: center;
|
|
771
|
+
justify-content: space-between;
|
|
772
|
+
gap: 14px;
|
|
773
|
+
flex-wrap: wrap;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
.rank-panel {
|
|
777
|
+
margin-top: 16px;
|
|
778
|
+
border: 1px solid #3d5b8980;
|
|
779
|
+
border-radius: 18px;
|
|
780
|
+
background: linear-gradient(160deg, #101b32e9, #12213fe6);
|
|
781
|
+
box-shadow: 0 15px 28px #03091652;
|
|
782
|
+
padding: 16px;
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
.github-spotlight {
|
|
786
|
+
margin-top: 10px;
|
|
787
|
+
border-color: #4a6ea8;
|
|
788
|
+
box-shadow: 0 18px 34px #04102366;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
.rank-title {
|
|
792
|
+
margin: 0 0 10px;
|
|
793
|
+
font-family: "Sora", sans-serif;
|
|
794
|
+
font-size: 22px;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
.rank-meta {
|
|
798
|
+
margin: 0 0 10px;
|
|
799
|
+
color: #9fb0cc;
|
|
800
|
+
font-size: 14px;
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
.rank-list {
|
|
804
|
+
margin: 0;
|
|
805
|
+
padding: 0;
|
|
806
|
+
list-style: none;
|
|
807
|
+
display: grid;
|
|
808
|
+
gap: 8px;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
.rank-item {
|
|
812
|
+
border: 1px solid #3a57829e;
|
|
813
|
+
border-radius: 12px;
|
|
814
|
+
padding: 10px 12px;
|
|
815
|
+
background: #0f1a31cc;
|
|
816
|
+
display: flex;
|
|
817
|
+
justify-content: space-between;
|
|
818
|
+
gap: 8px;
|
|
819
|
+
align-items: center;
|
|
820
|
+
min-width: 0;
|
|
821
|
+
transition: transform 200ms cubic-bezier(.4, 0, .2, 1), border-color 200ms cubic-bezier(.4, 0, .2, 1), background 200ms cubic-bezier(.4, 0, .2, 1);
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
.rank-item:hover {
|
|
825
|
+
transform: translateY(-1px);
|
|
826
|
+
border-color: #6289c2;
|
|
827
|
+
background: #12203bcc;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
.rank-item:nth-child(1),
|
|
831
|
+
.rank-item:nth-child(2),
|
|
832
|
+
.rank-item:nth-child(3) {
|
|
833
|
+
border-color: #4f73aa;
|
|
834
|
+
background: linear-gradient(120deg, #132644b8, #11223db8);
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
.rank-item:nth-child(1) {
|
|
838
|
+
box-shadow: inset 0 0 0 1px #7da7eb3d;
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
.rank-item:nth-child(2) {
|
|
842
|
+
box-shadow: inset 0 0 0 1px #6b94d83d;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
.rank-item:nth-child(3) {
|
|
846
|
+
box-shadow: inset 0 0 0 1px #5a84c83d;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
.rank-user {
|
|
850
|
+
display: inline-flex;
|
|
851
|
+
align-items: center;
|
|
852
|
+
gap: 10px;
|
|
853
|
+
flex: 1 1 auto;
|
|
854
|
+
min-width: 0;
|
|
855
|
+
max-width: 100%;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
.rank-avatar {
|
|
859
|
+
width: 34px;
|
|
860
|
+
height: 34px;
|
|
861
|
+
border-radius: 50%;
|
|
862
|
+
object-fit: cover;
|
|
863
|
+
border: 1px solid #40649a;
|
|
864
|
+
background: #14243f;
|
|
865
|
+
box-shadow: 0 0 0 2px #1b304f, 0 0 18px #5aa3ff35;
|
|
866
|
+
flex: 0 0 auto;
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
.rank-name {
|
|
870
|
+
color: #dce7f9;
|
|
871
|
+
font-weight: 700;
|
|
872
|
+
font-size: 14px;
|
|
873
|
+
max-width: 100%;
|
|
874
|
+
white-space: nowrap;
|
|
875
|
+
overflow: hidden;
|
|
876
|
+
text-overflow: ellipsis;
|
|
877
|
+
overflow-wrap: anywhere;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
.rank-value {
|
|
881
|
+
color: #9fb0cc;
|
|
882
|
+
font-size: 13px;
|
|
883
|
+
text-align: right;
|
|
884
|
+
white-space: nowrap;
|
|
885
|
+
min-width: 0;
|
|
886
|
+
flex: 0 0 auto;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
.final-cta p { margin: 0; color: #c2d0e5; }
|
|
890
|
+
|
|
891
|
+
.final-cta .btn.primary {
|
|
892
|
+
padding: 12px 18px;
|
|
893
|
+
font-size: 15px;
|
|
894
|
+
box-shadow: 0 12px 24px #22c55e3d;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
footer {
|
|
898
|
+
border-top: 1px solid #243452;
|
|
899
|
+
padding: 24px 0 30px;
|
|
900
|
+
color: #8fa6c7;
|
|
901
|
+
font-size: 14px;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
.foot-grid {
|
|
905
|
+
display: grid;
|
|
906
|
+
grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
|
|
907
|
+
gap: 14px;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
.foot-col h4 {
|
|
911
|
+
margin: 0 0 8px;
|
|
912
|
+
color: #d3dff2;
|
|
913
|
+
font-size: 14px;
|
|
914
|
+
font-weight: 700;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
.foot-col a {
|
|
918
|
+
display: block;
|
|
919
|
+
color: #93abcb;
|
|
920
|
+
text-decoration: none;
|
|
921
|
+
margin: 4px 0;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
.foot-col a:hover { color: #d3e3fb; }
|
|
925
|
+
|
|
926
|
+
.wpp-float {
|
|
927
|
+
position: fixed;
|
|
928
|
+
right: 18px;
|
|
929
|
+
bottom: 18px;
|
|
930
|
+
width: 58px;
|
|
931
|
+
height: 58px;
|
|
932
|
+
border-radius: 999px;
|
|
933
|
+
border: 1px solid #2fb86f;
|
|
934
|
+
background: linear-gradient(135deg, #25d366, #1ea952);
|
|
935
|
+
color: #052111;
|
|
936
|
+
display: inline-flex;
|
|
937
|
+
align-items: center;
|
|
938
|
+
justify-content: center;
|
|
939
|
+
box-shadow: 0 10px 25px #25d3664d;
|
|
940
|
+
text-decoration: none;
|
|
941
|
+
z-index: 30;
|
|
942
|
+
font-size: 27px;
|
|
943
|
+
line-height: 1;
|
|
944
|
+
transition: transform .2s ease, box-shadow .2s ease;
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
.wpp-float i {
|
|
948
|
+
font-size: 30px;
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
.wpp-float:hover {
|
|
952
|
+
transform: translateY(-2px);
|
|
953
|
+
box-shadow: 0 14px 30px #25d36666;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
@media (max-width: 520px) {
|
|
957
|
+
.rank-item {
|
|
958
|
+
flex-direction: column;
|
|
959
|
+
align-items: stretch;
|
|
960
|
+
gap: 6px;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
.rank-user {
|
|
964
|
+
max-width: 100%;
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
.rank-name {
|
|
968
|
+
white-space: normal;
|
|
969
|
+
display: -webkit-box;
|
|
970
|
+
-webkit-line-clamp: 2;
|
|
971
|
+
-webkit-box-orient: vertical;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
.rank-value {
|
|
975
|
+
white-space: normal;
|
|
976
|
+
text-align: left;
|
|
977
|
+
padding-left: 44px;
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
.hero-banner {
|
|
981
|
+
max-height: 140px;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
.wpp-float {
|
|
985
|
+
width: 54px;
|
|
986
|
+
height: 54px;
|
|
987
|
+
right: 14px;
|
|
988
|
+
bottom: 14px;
|
|
989
|
+
font-size: 25px;
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
.wpp-float i {
|
|
993
|
+
font-size: 27px;
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
@keyframes pulse-status {
|
|
998
|
+
0% {
|
|
999
|
+
transform: scale(1);
|
|
1000
|
+
opacity: 1;
|
|
1001
|
+
}
|
|
1002
|
+
50% {
|
|
1003
|
+
transform: scale(1.18);
|
|
1004
|
+
opacity: 0.72;
|
|
1005
|
+
}
|
|
1006
|
+
100% {
|
|
1007
|
+
transform: scale(1);
|
|
1008
|
+
opacity: 1;
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
@keyframes skeleton-shimmer {
|
|
1013
|
+
0% {
|
|
1014
|
+
background-position: 100% 0;
|
|
1015
|
+
}
|
|
1016
|
+
100% {
|
|
1017
|
+
background-position: -100% 0;
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
@keyframes rise {
|
|
1022
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
1023
|
+
to { opacity: 1; transform: translateY(0); }
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1027
|
+
* {
|
|
1028
|
+
animation-duration: 0.01ms !important;
|
|
1029
|
+
animation-iteration-count: 1 !important;
|
|
1030
|
+
transition-duration: 0.01ms !important;
|
|
1031
|
+
scroll-behavior: auto !important;
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
</style>
|
|
1035
|
+
</head>
|
|
1036
|
+
<body>
|
|
1037
|
+
<header class="top">
|
|
1038
|
+
<div class="container top-inner">
|
|
1039
|
+
<div class="top-head">
|
|
1040
|
+
<div class="brand">
|
|
1041
|
+
<img
|
|
1042
|
+
class="brand-logo"
|
|
1043
|
+
src="https://iili.io/FC3FABe.jpg"
|
|
1044
|
+
alt="OmniZap"
|
|
1045
|
+
loading="lazy"
|
|
1046
|
+
decoding="async"
|
|
1047
|
+
/>
|
|
1048
|
+
<span>OmniZap System</span>
|
|
1049
|
+
</div>
|
|
1050
|
+
<button
|
|
1051
|
+
id="nav-toggle"
|
|
1052
|
+
class="nav-toggle"
|
|
1053
|
+
type="button"
|
|
1054
|
+
aria-expanded="false"
|
|
1055
|
+
aria-controls="main-nav"
|
|
1056
|
+
aria-label="Abrir menu"
|
|
1057
|
+
>☰</button>
|
|
1058
|
+
</div>
|
|
1059
|
+
<nav id="main-nav" class="nav">
|
|
1060
|
+
<a class="btn" href="/api-docs/"><i class="fa-solid fa-code icon-inline" aria-hidden="true"></i>API</a>
|
|
1061
|
+
<a class="btn" href="https://github.com/Kaikygr/omnizap-system" target="_blank" rel="noreferrer noopener"><i class="fa-brands fa-github icon-inline" aria-hidden="true"></i>GitHub</a>
|
|
1062
|
+
</nav>
|
|
1063
|
+
</div>
|
|
1064
|
+
</header>
|
|
1065
|
+
|
|
1066
|
+
<main class="container">
|
|
1067
|
+
<section class="hero">
|
|
1068
|
+
<img class="hero-banner" src="https://iili.io/fSNGag2.png" alt="Banner OmniZap System" loading="lazy" decoding="async" />
|
|
1069
|
+
<span class="eyebrow">Plataforma Open Source de Automação WhatsApp</span>
|
|
1070
|
+
<h1>Infraestrutura completa para bots, automação e gestão de WhatsApp em escala.</h1>
|
|
1071
|
+
<p class="lead">Foco em API, observabilidade, gestão de grupos, mídia, comandos automatizados e arquitetura pronta para produção.</p>
|
|
1072
|
+
<div class="hero-cta">
|
|
1073
|
+
<a class="btn primary" href="https://github.com/Kaikygr/omnizap-system" target="_blank" rel="noreferrer noopener"><i class="fa-brands fa-github icon-inline" aria-hidden="true"></i>Ver no GitHub</a>
|
|
1074
|
+
<a class="btn" href="/api-docs/"><i class="fa-solid fa-book icon-inline" aria-hidden="true"></i>Documentação da API</a>
|
|
1075
|
+
<a class="btn" href="#infra-arquitetura"><i class="fa-solid fa-diagram-project icon-inline" aria-hidden="true"></i>Ver Arquitetura</a>
|
|
1076
|
+
</div>
|
|
1077
|
+
<section class="hero-proof">
|
|
1078
|
+
<article class="proof-card">
|
|
1079
|
+
<span id="proof-packs" class="proof-value">--</span>
|
|
1080
|
+
<span class="proof-label">packs no módulo stickers</span>
|
|
1081
|
+
</article>
|
|
1082
|
+
<article class="proof-card">
|
|
1083
|
+
<span id="proof-stickers" class="proof-value">--</span>
|
|
1084
|
+
<span class="proof-label">stickers indexados</span>
|
|
1085
|
+
</article>
|
|
1086
|
+
<article class="proof-card">
|
|
1087
|
+
<span id="proof-downloads" class="proof-value">--</span>
|
|
1088
|
+
<span class="proof-label">aberturas do catálogo</span>
|
|
1089
|
+
</article>
|
|
1090
|
+
<article class="proof-card">
|
|
1091
|
+
<span id="proof-users" class="proof-value">--</span>
|
|
1092
|
+
<span class="proof-label">usuários monitorados</span>
|
|
1093
|
+
</article>
|
|
1094
|
+
<article class="proof-card">
|
|
1095
|
+
<span id="proof-groups" class="proof-value">--</span>
|
|
1096
|
+
<span class="proof-label">grupos monitorados</span>
|
|
1097
|
+
</article>
|
|
1098
|
+
<article class="proof-card">
|
|
1099
|
+
<span id="proof-system" class="proof-value">--</span>
|
|
1100
|
+
<span class="proof-label">status do sistema</span>
|
|
1101
|
+
</article>
|
|
1102
|
+
</section>
|
|
1103
|
+
</section>
|
|
1104
|
+
|
|
1105
|
+
<h2 class="section-title"><i class="fa-solid fa-circle-info icon-inline" aria-hidden="true"></i>Sobre o Sistema</h2>
|
|
1106
|
+
<section class="grid">
|
|
1107
|
+
<article class="card">
|
|
1108
|
+
<h3><i class="fa-solid fa-circle-info icon-inline" aria-hidden="true"></i>Visão Geral</h3>
|
|
1109
|
+
<p>O OmniZap é uma plataforma open source para operação de bots e automações WhatsApp com base técnica orientada a produção.</p>
|
|
1110
|
+
</article>
|
|
1111
|
+
<article class="card">
|
|
1112
|
+
<h3><i class="fa-solid fa-users-gear icon-inline" aria-hidden="true"></i>Para Quem É</h3>
|
|
1113
|
+
<p>Projetado para devs, equipes de produto, empresas e operadores SaaS que precisam de automação confiável em alto volume.</p>
|
|
1114
|
+
</article>
|
|
1115
|
+
<article class="card">
|
|
1116
|
+
<h3><i class="fa-solid fa-microchip icon-inline" aria-hidden="true"></i>Diferencial Técnico</h3>
|
|
1117
|
+
<p>Camadas de observabilidade, fila de escrita, reconciliação LID/JID e serviços modulares para reduzir risco operacional.</p>
|
|
1118
|
+
</article>
|
|
1119
|
+
<article class="card">
|
|
1120
|
+
<h3><i class="fa-solid fa-cubes-stacked icon-inline" aria-hidden="true"></i>Estrutura Modular</h3>
|
|
1121
|
+
<p>Domínios de comando isolados por módulos, facilitando manutenção, evolução incremental e integração com novos recursos.</p>
|
|
1122
|
+
</article>
|
|
1123
|
+
</section>
|
|
1124
|
+
|
|
1125
|
+
<h2 id="infra-arquitetura" class="section-title"><i class="fa-solid fa-sitemap icon-inline" aria-hidden="true"></i>Infraestrutura e Arquitetura</h2>
|
|
1126
|
+
<section class="grid">
|
|
1127
|
+
<article class="card">
|
|
1128
|
+
<h3><i class="fa-solid fa-server icon-inline" aria-hidden="true"></i>Camada de Execução</h3>
|
|
1129
|
+
<p>Node.js com Baileys para conexão com WhatsApp, controle de sessão, recuperação e reconexão resiliente.</p>
|
|
1130
|
+
</article>
|
|
1131
|
+
<article class="card">
|
|
1132
|
+
<h3><i class="fa-solid fa-database icon-inline" aria-hidden="true"></i>Persistência</h3>
|
|
1133
|
+
<p>MySQL com schema evolutivo, fila de escrita e proteção de consistência para chats, mensagens e metadados.</p>
|
|
1134
|
+
</article>
|
|
1135
|
+
<article class="card">
|
|
1136
|
+
<h3><i class="fa-solid fa-layer-group icon-inline" aria-hidden="true"></i>Módulos de Domínio</h3>
|
|
1137
|
+
<p>Administração de grupos, mídia, IA, stickers, ranking e utilitários operam como blocos independentes.</p>
|
|
1138
|
+
</article>
|
|
1139
|
+
<article class="card">
|
|
1140
|
+
<h3><i class="fa-solid fa-shield-halved icon-inline" aria-hidden="true"></i>Operação em Produção</h3>
|
|
1141
|
+
<p>Logs estruturados, limites de retry e fluxo de monitoramento para suportar crescimento com previsibilidade.</p>
|
|
1142
|
+
</article>
|
|
1143
|
+
</section>
|
|
1144
|
+
|
|
1145
|
+
<h2 class="section-title"><i class="fa-solid fa-plug-circle-bolt icon-inline" aria-hidden="true"></i>API e Integrações</h2>
|
|
1146
|
+
<section class="grid">
|
|
1147
|
+
<article class="card">
|
|
1148
|
+
<h3><i class="fa-solid fa-code-branch icon-inline" aria-hidden="true"></i>Endpoints Públicos</h3>
|
|
1149
|
+
<p>APIs HTTP para catálogo, ranking, status do sistema e dados de descoberta consumíveis por frontends e integrações.</p>
|
|
1150
|
+
</article>
|
|
1151
|
+
<article class="card">
|
|
1152
|
+
<h3><i class="fa-solid fa-link icon-inline" aria-hidden="true"></i>Integração com Serviços</h3>
|
|
1153
|
+
<p>Fluxos preparados para conectar monitoramento, pipelines de conteúdo, serviços de IA e rotinas externas.</p>
|
|
1154
|
+
</article>
|
|
1155
|
+
<article class="card">
|
|
1156
|
+
<h3><i class="fa-solid fa-key icon-inline" aria-hidden="true"></i>Governança de Acesso</h3>
|
|
1157
|
+
<p>Rotas técnicas e documentação organizada para facilitar controle de consumo e expansão por ambiente.</p>
|
|
1158
|
+
</article>
|
|
1159
|
+
<article class="card">
|
|
1160
|
+
<h3><i class="fa-solid fa-gear icon-inline" aria-hidden="true"></i>Pronto para SaaS</h3>
|
|
1161
|
+
<p>Base adequada para produtos multi-módulo com evolução incremental sem reescrever o núcleo do sistema.</p>
|
|
1162
|
+
</article>
|
|
1163
|
+
</section>
|
|
1164
|
+
|
|
1165
|
+
<h2 class="section-title"><i class="fa-solid fa-gauge-high icon-inline" aria-hidden="true"></i>Status e Telemetria do Sistema</h2>
|
|
1166
|
+
<section class="hero-stats">
|
|
1167
|
+
<div class="chip" id="metric-host-cpu">CPU host: carregando...</div>
|
|
1168
|
+
<div class="chip" id="metric-host-memory">RAM host: carregando...</div>
|
|
1169
|
+
<div class="chip" id="metric-process-uptime">Uptime processo: carregando...</div>
|
|
1170
|
+
<div class="chip" id="metric-observability">Observabilidade: carregando...</div>
|
|
1171
|
+
</section>
|
|
1172
|
+
|
|
1173
|
+
<section class="rank-panel">
|
|
1174
|
+
<h2 class="rank-title"><i class="fa-solid fa-ranking-star icon-inline" aria-hidden="true"></i>Painel de atividade recente</h2>
|
|
1175
|
+
<p class="rank-meta" id="rank-summary">Carregando ranking global...</p>
|
|
1176
|
+
<ul class="rank-list" id="rank-list">
|
|
1177
|
+
<li class="rank-item"><span class="rank-name">Carregando...</span><span class="rank-value">--</span></li>
|
|
1178
|
+
</ul>
|
|
1179
|
+
</section>
|
|
1180
|
+
|
|
1181
|
+
<h2 class="section-title"><i class="fa-solid fa-laptop-code icon-inline" aria-hidden="true"></i>Stack Tecnológica</h2>
|
|
1182
|
+
<section class="grid">
|
|
1183
|
+
<article class="card">
|
|
1184
|
+
<h3><i class="fa-brands fa-node-js icon-inline" aria-hidden="true"></i>Node.js + Baileys</h3>
|
|
1185
|
+
<p>Runtime principal de mensageria, orquestração de eventos e automações operacionais de WhatsApp.</p>
|
|
1186
|
+
</article>
|
|
1187
|
+
<article class="card">
|
|
1188
|
+
<h3><i class="fa-solid fa-database icon-inline" aria-hidden="true"></i>MySQL + Migrations</h3>
|
|
1189
|
+
<p>Persistência transacional com versionamento de schema para manter evolução segura do sistema.</p>
|
|
1190
|
+
</article>
|
|
1191
|
+
<article class="card">
|
|
1192
|
+
<h3><i class="fa-solid fa-chart-column icon-inline" aria-hidden="true"></i>Observabilidade</h3>
|
|
1193
|
+
<p>Métricas e endpoints operacionais compatíveis com Prometheus, Grafana e monitoramento de latência.</p>
|
|
1194
|
+
</article>
|
|
1195
|
+
<article class="card">
|
|
1196
|
+
<h3><i class="fa-solid fa-layer-group icon-inline" aria-hidden="true"></i>Frontend Web</h3>
|
|
1197
|
+
<p>Painéis web para catálogo, documentação e administração, consumindo os mesmos serviços de API.</p>
|
|
1198
|
+
</article>
|
|
1199
|
+
</section>
|
|
1200
|
+
|
|
1201
|
+
<h2 class="section-title"><i class="fa-brands fa-github icon-inline" aria-hidden="true"></i>Projeto Open Source no GitHub</h2>
|
|
1202
|
+
<section class="rank-panel github-spotlight">
|
|
1203
|
+
<p class="rank-meta">Indicadores públicos do repositório: stars, forks, issues, releases e evolução contínua do projeto.</p>
|
|
1204
|
+
<div
|
|
1205
|
+
id="github-project-panel-root"
|
|
1206
|
+
data-owner="kaikybrofc"
|
|
1207
|
+
data-repo="omnizap-system"
|
|
1208
|
+
data-endpoint="/api/sticker-packs/project-summary"
|
|
1209
|
+
></div>
|
|
1210
|
+
</section>
|
|
1211
|
+
|
|
1212
|
+
<h2 class="section-title"><i class="fa-solid fa-code icon-inline" aria-hidden="true"></i>Bloco Técnico</h2>
|
|
1213
|
+
<section class="api">
|
|
1214
|
+
<div class="api-head"><i class="fa-solid fa-flask-vial icon-inline" aria-hidden="true"></i>Referência rápida de integração</div>
|
|
1215
|
+
<pre><code># Autenticação (exemplo via header)
|
|
1216
|
+
Authorization: Bearer <token-de-acesso>
|
|
1217
|
+
|
|
1218
|
+
# Health check da API
|
|
1219
|
+
GET /api/sticker-packs?limit=1
|
|
1220
|
+
|
|
1221
|
+
# Endpoints úteis
|
|
1222
|
+
GET /api/sticker-packs?visibility=public&limit=24&offset=0
|
|
1223
|
+
GET /api/sticker-packs/global-ranking-summary
|
|
1224
|
+
GET /api/sticker-packs/system-summary
|
|
1225
|
+
GET /api/sticker-packs/orphan-stickers?limit=120&offset=0
|
|
1226
|
+
GET /api/sticker-packs/:packKey
|
|
1227
|
+
GET /data/stickers/:owner/:file.webp
|
|
1228
|
+
|
|
1229
|
+
# Consumo via curl
|
|
1230
|
+
curl -sS https://omnizap.shop/api/sticker-packs/system-summary | jq</code></pre>
|
|
1231
|
+
</section>
|
|
1232
|
+
|
|
1233
|
+
<h2 class="section-title"><i class="fa-solid fa-icons icon-inline" aria-hidden="true"></i>Módulo de Catálogo e Stickers</h2>
|
|
1234
|
+
<section class="market-preview">
|
|
1235
|
+
<div class="market-preview-head">
|
|
1236
|
+
<h2 class="market-preview-title"><i class="fa-solid fa-fire icon-inline" aria-hidden="true"></i>Packs em destaque do módulo stickers</h2>
|
|
1237
|
+
<span id="hero-preview-status" class="market-preview-status">Carregando dados do módulo...</span>
|
|
1238
|
+
</div>
|
|
1239
|
+
<div id="hero-pack-preview" class="market-preview-grid"></div>
|
|
1240
|
+
</section>
|
|
1241
|
+
|
|
1242
|
+
<section class="grid">
|
|
1243
|
+
<article class="card">
|
|
1244
|
+
<h3><i class="fa-solid fa-puzzle-piece icon-inline" aria-hidden="true"></i>Módulo Secundário</h3>
|
|
1245
|
+
<p>O catálogo de stickers é um recurso da plataforma, integrado ao núcleo de API e operação do OmniZap.</p>
|
|
1246
|
+
</article>
|
|
1247
|
+
<article class="card">
|
|
1248
|
+
<h3><i class="fa-solid fa-globe icon-inline" aria-hidden="true"></i>Packs Públicos</h3>
|
|
1249
|
+
<p>Listagem com busca e ordenação para navegar por coleções compartilhadas e abrir detalhes de cada pack.</p>
|
|
1250
|
+
</article>
|
|
1251
|
+
<article class="card">
|
|
1252
|
+
<h3><i class="fa-solid fa-share-nodes icon-inline" aria-hidden="true"></i>Compartilhamento Direto</h3>
|
|
1253
|
+
<p>Cada pack possui link dedicado para distribuição rápida no WhatsApp e integração com fluxos de comunidade.</p>
|
|
1254
|
+
</article>
|
|
1255
|
+
<article class="card">
|
|
1256
|
+
<h3><i class="fa-solid fa-box-open icon-inline" aria-hidden="true"></i>Curadoria Operacional</h3>
|
|
1257
|
+
<p>Área para organizar figurinhas sem pack, manter qualidade do acervo e apoiar fluxos de conteúdo do bot.</p>
|
|
1258
|
+
</article>
|
|
1259
|
+
</section>
|
|
1260
|
+
|
|
1261
|
+
<section class="final-cta">
|
|
1262
|
+
<p><strong>Pronto para produção.</strong><br />Acesse o repositório, consulte a API e implemente o OmniZap na sua stack de automação.</p>
|
|
1263
|
+
<a class="btn primary" href="https://github.com/Kaikygr/omnizap-system" target="_blank" rel="noreferrer noopener"><i class="fa-brands fa-github icon-inline" aria-hidden="true"></i>Iniciar no GitHub</a>
|
|
1264
|
+
</section>
|
|
1265
|
+
</main>
|
|
1266
|
+
|
|
1267
|
+
<footer>
|
|
1268
|
+
<div class="container foot-grid">
|
|
1269
|
+
<div class="foot-col">
|
|
1270
|
+
<h4><i class="fa-solid fa-cube icon-inline" aria-hidden="true"></i>Produto</h4>
|
|
1271
|
+
<a href="/"><i class="fa-solid fa-house icon-inline" aria-hidden="true"></i>Home</a>
|
|
1272
|
+
<a href="/stickers/"><i class="fa-solid fa-icons icon-inline" aria-hidden="true"></i>Stickers</a>
|
|
1273
|
+
<a href="/stickers/create/"><i class="fa-solid fa-plus icon-inline" aria-hidden="true"></i>Criar Pack</a>
|
|
1274
|
+
<a href="/api-docs/"><i class="fa-solid fa-book icon-inline" aria-hidden="true"></i>API Docs</a>
|
|
1275
|
+
<a href="/termos-de-uso/"><i class="fa-solid fa-file-contract icon-inline" aria-hidden="true"></i>Termos de Uso</a>
|
|
1276
|
+
<a href="/licenca/"><i class="fa-solid fa-scale-balanced icon-inline" aria-hidden="true"></i>Licença</a>
|
|
1277
|
+
</div>
|
|
1278
|
+
<div class="foot-col">
|
|
1279
|
+
<h4><i class="fa-solid fa-diagram-project icon-inline" aria-hidden="true"></i>Projeto</h4>
|
|
1280
|
+
<a href="https://github.com/Kaikygr/omnizap-system" target="_blank" rel="noreferrer noopener"><i class="fa-brands fa-github icon-inline" aria-hidden="true"></i>GitHub</a>
|
|
1281
|
+
<a href="/api/sticker-packs?limit=1"><i class="fa-solid fa-heart-pulse icon-inline" aria-hidden="true"></i>Health API</a>
|
|
1282
|
+
</div>
|
|
1283
|
+
<div class="foot-col">
|
|
1284
|
+
<h4><i class="fa-solid fa-server icon-inline" aria-hidden="true"></i>Stack</h4>
|
|
1285
|
+
<a href="#"><i class="fa-brands fa-node-js icon-inline" aria-hidden="true"></i>Node.js</a>
|
|
1286
|
+
<a href="#"><i class="fa-solid fa-database icon-inline" aria-hidden="true"></i>MySQL</a>
|
|
1287
|
+
<a href="#"><i class="fa-solid fa-chart-column icon-inline" aria-hidden="true"></i>Prometheus/Grafana</a>
|
|
1288
|
+
</div>
|
|
1289
|
+
<div class="foot-col">
|
|
1290
|
+
<h4><i class="fa-solid fa-robot icon-inline" aria-hidden="true"></i>OmniZap</h4>
|
|
1291
|
+
<div>OmniZap System - 2026</div>
|
|
1292
|
+
</div>
|
|
1293
|
+
</div>
|
|
1294
|
+
</footer>
|
|
1295
|
+
|
|
1296
|
+
<a
|
|
1297
|
+
id="wpp-float"
|
|
1298
|
+
class="wpp-float"
|
|
1299
|
+
href="#"
|
|
1300
|
+
target="_blank"
|
|
1301
|
+
rel="noreferrer noopener"
|
|
1302
|
+
aria-label="Falar com o bot no WhatsApp"
|
|
1303
|
+
title="Falar com o bot"
|
|
1304
|
+
hidden
|
|
1305
|
+
><i class="fa-brands fa-whatsapp" aria-hidden="true"></i></a>
|
|
1306
|
+
|
|
1307
|
+
<div id="home-react-root" hidden></div>
|
|
1308
|
+
<script type="module" src="/js/apps/homeApp.js?v=20260227c"></script>
|
|
1309
|
+
<script type="module" src="/js/github-panel/index.js?v=20260226a"></script>
|
|
1310
|
+
</body>
|
|
1311
|
+
</html>
|