lynkr 8.0.0 → 9.0.1

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 (128) hide show
  1. package/.lynkr/telemetry.db +0 -0
  2. package/.lynkr/telemetry.db-shm +0 -0
  3. package/.lynkr/telemetry.db-wal +0 -0
  4. package/README.md +196 -322
  5. package/lynkr-skill.tar.gz +0 -0
  6. package/package.json +4 -3
  7. package/src/api/openai-router.js +64 -13
  8. package/src/api/providers-handler.js +171 -3
  9. package/src/api/router.js +9 -2
  10. package/src/clients/circuit-breaker.js +10 -247
  11. package/src/clients/codex-process.js +342 -0
  12. package/src/clients/codex-utils.js +143 -0
  13. package/src/clients/databricks.js +210 -63
  14. package/src/clients/resilience.js +540 -0
  15. package/src/clients/retry.js +22 -167
  16. package/src/clients/standard-tools.js +23 -0
  17. package/src/config/index.js +77 -0
  18. package/src/context/compression.js +42 -9
  19. package/src/context/distill.js +492 -0
  20. package/src/orchestrator/index.js +48 -8
  21. package/src/routing/complexity-analyzer.js +258 -5
  22. package/src/routing/index.js +12 -2
  23. package/src/routing/latency-tracker.js +148 -0
  24. package/src/routing/model-tiers.js +2 -0
  25. package/src/routing/quality-scorer.js +113 -0
  26. package/src/routing/telemetry.js +464 -0
  27. package/src/server.js +13 -12
  28. package/src/tools/code-graph.js +538 -0
  29. package/src/tools/code-mode.js +304 -0
  30. package/src/tools/index.js +4 -0
  31. package/src/tools/lazy-loader.js +18 -0
  32. package/src/tools/mcp-remote.js +7 -0
  33. package/src/tools/smart-selection.js +11 -0
  34. package/src/tools/tinyfish.js +358 -0
  35. package/src/tools/truncate.js +1 -0
  36. package/src/utils/payload.js +206 -0
  37. package/src/utils/perf-timer.js +80 -0
  38. package/.github/FUNDING.yml +0 -15
  39. package/.github/workflows/README.md +0 -215
  40. package/.github/workflows/ci.yml +0 -69
  41. package/.github/workflows/index.yml +0 -62
  42. package/.github/workflows/web-tools-tests.yml +0 -56
  43. package/CITATIONS.bib +0 -6
  44. package/DEPLOYMENT.md +0 -1001
  45. package/LYNKR-TUI-PLAN.md +0 -984
  46. package/PERFORMANCE-REPORT.md +0 -866
  47. package/PLAN-per-client-model-routing.md +0 -252
  48. package/docs/42642f749da6234f41b6b425c3bb07c9.txt +0 -1
  49. package/docs/BingSiteAuth.xml +0 -4
  50. package/docs/docs-style.css +0 -478
  51. package/docs/docs.html +0 -198
  52. package/docs/google5be250e608e6da39.html +0 -1
  53. package/docs/index.html +0 -577
  54. package/docs/index.md +0 -584
  55. package/docs/robots.txt +0 -4
  56. package/docs/sitemap.xml +0 -44
  57. package/docs/style.css +0 -1223
  58. package/docs/toon-integration-spec.md +0 -130
  59. package/documentation/README.md +0 -101
  60. package/documentation/api.md +0 -806
  61. package/documentation/claude-code-cli.md +0 -679
  62. package/documentation/codex-cli.md +0 -397
  63. package/documentation/contributing.md +0 -571
  64. package/documentation/cursor-integration.md +0 -734
  65. package/documentation/docker.md +0 -874
  66. package/documentation/embeddings.md +0 -762
  67. package/documentation/faq.md +0 -713
  68. package/documentation/features.md +0 -403
  69. package/documentation/headroom.md +0 -519
  70. package/documentation/installation.md +0 -758
  71. package/documentation/memory-system.md +0 -476
  72. package/documentation/production.md +0 -636
  73. package/documentation/providers.md +0 -1009
  74. package/documentation/routing.md +0 -476
  75. package/documentation/testing.md +0 -629
  76. package/documentation/token-optimization.md +0 -325
  77. package/documentation/tools.md +0 -697
  78. package/documentation/troubleshooting.md +0 -969
  79. package/final-test.js +0 -33
  80. package/headroom-sidecar/config.py +0 -93
  81. package/headroom-sidecar/requirements.txt +0 -14
  82. package/headroom-sidecar/server.py +0 -451
  83. package/monitor-agents.sh +0 -31
  84. package/scripts/audit-log-reader.js +0 -399
  85. package/scripts/compact-dictionary.js +0 -204
  86. package/scripts/test-deduplication.js +0 -448
  87. package/src/db/database.sqlite +0 -0
  88. package/te +0 -11622
  89. package/test/README.md +0 -212
  90. package/test/azure-openai-config.test.js +0 -213
  91. package/test/azure-openai-error-resilience.test.js +0 -238
  92. package/test/azure-openai-format-conversion.test.js +0 -354
  93. package/test/azure-openai-integration.test.js +0 -287
  94. package/test/azure-openai-routing.test.js +0 -175
  95. package/test/azure-openai-streaming.test.js +0 -171
  96. package/test/bedrock-integration.test.js +0 -457
  97. package/test/comprehensive-test-suite.js +0 -928
  98. package/test/config-validation.test.js +0 -207
  99. package/test/cursor-integration.test.js +0 -484
  100. package/test/format-conversion.test.js +0 -578
  101. package/test/hybrid-routing-integration.test.js +0 -269
  102. package/test/hybrid-routing-performance.test.js +0 -428
  103. package/test/llamacpp-integration.test.js +0 -882
  104. package/test/lmstudio-integration.test.js +0 -347
  105. package/test/memory/extractor.test.js +0 -398
  106. package/test/memory/retriever.test.js +0 -613
  107. package/test/memory/retriever.test.js.bak +0 -585
  108. package/test/memory/search.test.js +0 -537
  109. package/test/memory/search.test.js.bak +0 -389
  110. package/test/memory/store.test.js +0 -344
  111. package/test/memory/store.test.js.bak +0 -312
  112. package/test/memory/surprise.test.js +0 -300
  113. package/test/memory-performance.test.js +0 -472
  114. package/test/openai-integration.test.js +0 -683
  115. package/test/openrouter-error-resilience.test.js +0 -418
  116. package/test/passthrough-mode.test.js +0 -385
  117. package/test/performance-benchmark.js +0 -351
  118. package/test/performance-tests.js +0 -528
  119. package/test/routing.test.js +0 -225
  120. package/test/toon-compression.test.js +0 -131
  121. package/test/web-tools.test.js +0 -329
  122. package/test-agents-simple.js +0 -43
  123. package/test-cli-connection.sh +0 -33
  124. package/test-learning-unit.js +0 -126
  125. package/test-learning.js +0 -112
  126. package/test-parallel-agents.sh +0 -124
  127. package/test-parallel-direct.js +0 -155
  128. package/test-subagents.sh +0 -117
package/docs/style.css DELETED
@@ -1,1223 +0,0 @@
1
- /* =========================================
2
- LYNKR - World-Class Design System
3
- Inspired by shadcn/ui + liquidos.ai
4
- ========================================= */
5
-
6
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500;600&display=swap');
7
-
8
- /* ===== DESIGN TOKENS (shadcn-inspired) ===== */
9
- :root {
10
- /* Backgrounds - shadcn dark palette */
11
- --background: #09090b;
12
- --background-secondary: #0c0c0f;
13
- --background-tertiary: #111114;
14
- --card: rgba(17, 17, 20, 0.8);
15
- --card-hover: rgba(24, 24, 28, 0.9);
16
- --popover: #0c0c0f;
17
-
18
- /* Foreground/Text */
19
- --foreground: #fafafa;
20
- --foreground-secondary: #a1a1aa;
21
- --foreground-muted: #71717a;
22
-
23
- /* Primary accent - Purple/Violet */
24
- --primary: #8b5cf6;
25
- --primary-hover: #a78bfa;
26
- --primary-muted: rgba(139, 92, 246, 0.1);
27
-
28
- /* Secondary accents */
29
- --secondary: #6366f1;
30
- --accent: #3b82f6;
31
- --cyan: #06b6d4;
32
- --pink: #ec4899;
33
- --green: #22c55e;
34
- --orange: #f97316;
35
-
36
- /* Gradients */
37
- --gradient-primary: linear-gradient(135deg, #8b5cf6 0%, #6366f1 50%, #3b82f6 100%);
38
- --gradient-vivid: linear-gradient(135deg, #a855f7 0%, #6366f1 30%, #3b82f6 60%, #06b6d4 100%);
39
- --gradient-aurora: linear-gradient(135deg, #8b5cf6 0%, #ec4899 25%, #3b82f6 50%, #06b6d4 75%, #8b5cf6 100%);
40
- --gradient-mesh: radial-gradient(at 40% 20%, rgba(139, 92, 246, 0.3) 0px, transparent 50%),
41
- radial-gradient(at 80% 0%, rgba(99, 102, 241, 0.2) 0px, transparent 50%),
42
- radial-gradient(at 0% 50%, rgba(59, 130, 246, 0.2) 0px, transparent 50%),
43
- radial-gradient(at 80% 50%, rgba(6, 182, 212, 0.15) 0px, transparent 50%),
44
- radial-gradient(at 0% 100%, rgba(236, 72, 153, 0.1) 0px, transparent 50%);
45
-
46
- /* Borders */
47
- --border: rgba(255, 255, 255, 0.06);
48
- --border-hover: rgba(139, 92, 246, 0.4);
49
- --ring: rgba(139, 92, 246, 0.5);
50
-
51
- /* Radius */
52
- --radius-sm: 6px;
53
- --radius-md: 10px;
54
- --radius-lg: 16px;
55
- --radius-xl: 24px;
56
- --radius-2xl: 32px;
57
- --radius-full: 9999px;
58
-
59
- /* Shadows */
60
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.5);
61
- --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
62
- --shadow-lg: 0 10px 40px rgba(0, 0, 0, 0.5);
63
- --shadow-glow: 0 0 60px rgba(139, 92, 246, 0.25);
64
- --shadow-glow-lg: 0 0 100px rgba(139, 92, 246, 0.3);
65
-
66
- /* Animation */
67
- --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
68
- --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
69
- --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
70
- --transition-slower: 500ms cubic-bezier(0.4, 0, 0.2, 1);
71
- }
72
-
73
- /* ===== RESET & BASE ===== */
74
- *, *::before, *::after {
75
- margin: 0;
76
- padding: 0;
77
- box-sizing: border-box;
78
- }
79
-
80
- html {
81
- scroll-behavior: smooth;
82
- -webkit-font-smoothing: antialiased;
83
- -moz-osx-font-smoothing: grayscale;
84
- }
85
-
86
- body {
87
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
88
- background: var(--background);
89
- color: var(--foreground);
90
- line-height: 1.6;
91
- overflow-x: hidden;
92
- min-height: 100vh;
93
- }
94
-
95
- /* Override GitHub Pages */
96
- .markdown-body {
97
- background: transparent !important;
98
- color: var(--foreground) !important;
99
- max-width: none !important;
100
- font-family: inherit !important;
101
- }
102
-
103
- /* ===== ANIMATED BACKGROUND SYSTEM ===== */
104
-
105
- /* Base gradient layer */
106
- .bg-gradient {
107
- position: fixed;
108
- inset: 0;
109
- pointer-events: none;
110
- z-index: -3;
111
- background: var(--background);
112
- }
113
-
114
- /* Aurora effect layer */
115
- .bg-gradient::before {
116
- content: '';
117
- position: absolute;
118
- inset: -50%;
119
- background: conic-gradient(
120
- from 90deg at 50% 50%,
121
- transparent 0deg,
122
- rgba(139, 92, 246, 0.08) 60deg,
123
- transparent 120deg,
124
- rgba(99, 102, 241, 0.06) 180deg,
125
- transparent 240deg,
126
- rgba(59, 130, 246, 0.08) 300deg,
127
- transparent 360deg
128
- );
129
- animation: aurora-spin 30s linear infinite;
130
- }
131
-
132
- /* Mesh gradient layer */
133
- .bg-gradient::after {
134
- content: '';
135
- position: absolute;
136
- inset: 0;
137
- background: var(--gradient-mesh);
138
- opacity: 0.8;
139
- animation: mesh-float 20s ease-in-out infinite;
140
- }
141
-
142
- @keyframes aurora-spin {
143
- from { transform: rotate(0deg); }
144
- to { transform: rotate(360deg); }
145
- }
146
-
147
- @keyframes mesh-float {
148
- 0%, 100% { transform: translate(0, 0) scale(1); }
149
- 33% { transform: translate(2%, 1%) scale(1.02); }
150
- 66% { transform: translate(-1%, 2%) scale(0.98); }
151
- }
152
-
153
- /* Grid pattern */
154
- .particles {
155
- position: fixed;
156
- inset: 0;
157
- pointer-events: none;
158
- z-index: -2;
159
- background-image:
160
- linear-gradient(rgba(139, 92, 246, 0.03) 1px, transparent 1px),
161
- linear-gradient(90deg, rgba(139, 92, 246, 0.03) 1px, transparent 1px);
162
- background-size: 80px 80px;
163
- mask-image: radial-gradient(ellipse 80% 60% at 50% 30%, black 20%, transparent 70%);
164
- -webkit-mask-image: radial-gradient(ellipse 80% 60% at 50% 30%, black 20%, transparent 70%);
165
- }
166
-
167
- /* Floating orbs */
168
- .particles::before {
169
- content: '';
170
- position: absolute;
171
- inset: 0;
172
- background-image:
173
- radial-gradient(3px 3px at 15% 25%, rgba(139, 92, 246, 0.5), transparent),
174
- radial-gradient(2px 2px at 35% 65%, rgba(99, 102, 241, 0.4), transparent),
175
- radial-gradient(2.5px 2.5px at 55% 35%, rgba(139, 92, 246, 0.5), transparent),
176
- radial-gradient(2px 2px at 75% 75%, rgba(59, 130, 246, 0.4), transparent),
177
- radial-gradient(3px 3px at 90% 45%, rgba(6, 182, 212, 0.3), transparent),
178
- radial-gradient(2px 2px at 20% 85%, rgba(236, 72, 153, 0.3), transparent),
179
- radial-gradient(2.5px 2.5px at 80% 15%, rgba(139, 92, 246, 0.5), transparent);
180
- animation: particles-float 30s ease-in-out infinite;
181
- }
182
-
183
- @keyframes particles-float {
184
- 0%, 100% { transform: translateY(0) translateX(0); opacity: 0.7; }
185
- 25% { transform: translateY(-20px) translateX(10px); opacity: 1; }
186
- 50% { transform: translateY(-10px) translateX(-15px); opacity: 0.8; }
187
- 75% { transform: translateY(-30px) translateX(5px); opacity: 1; }
188
- }
189
-
190
- /* Noise texture overlay */
191
- .particles::after {
192
- content: '';
193
- position: absolute;
194
- inset: 0;
195
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
196
- opacity: 0.015;
197
- pointer-events: none;
198
- }
199
-
200
- /* ===== NAVIGATION ===== */
201
- .nav {
202
- position: fixed;
203
- top: 0;
204
- left: 0;
205
- right: 0;
206
- z-index: 100;
207
- padding: 16px 24px;
208
- background: rgba(9, 9, 11, 0.6);
209
- backdrop-filter: blur(20px) saturate(180%);
210
- -webkit-backdrop-filter: blur(20px) saturate(180%);
211
- border-bottom: 1px solid var(--border);
212
- transition: var(--transition-base);
213
- }
214
-
215
- .nav::before {
216
- content: '';
217
- position: absolute;
218
- bottom: 0;
219
- left: 0;
220
- right: 0;
221
- height: 1px;
222
- background: linear-gradient(90deg,
223
- transparent 0%,
224
- rgba(139, 92, 246, 0.5) 20%,
225
- rgba(99, 102, 241, 0.5) 50%,
226
- rgba(59, 130, 246, 0.5) 80%,
227
- transparent 100%
228
- );
229
- opacity: 0.5;
230
- }
231
-
232
- .nav-inner {
233
- max-width: 1280px;
234
- margin: 0 auto;
235
- display: flex;
236
- justify-content: space-between;
237
- align-items: center;
238
- }
239
-
240
- .nav-logo {
241
- display: flex;
242
- align-items: center;
243
- gap: 12px;
244
- text-decoration: none;
245
- }
246
-
247
- .nav-logo-icon {
248
- width: 42px;
249
- height: 42px;
250
- background: var(--gradient-vivid);
251
- border-radius: var(--radius-md);
252
- display: flex;
253
- align-items: center;
254
- justify-content: center;
255
- font-size: 22px;
256
- font-weight: 800;
257
- color: white;
258
- box-shadow: var(--shadow-glow);
259
- transition: var(--transition-base);
260
- }
261
-
262
- .nav-logo:hover .nav-logo-icon {
263
- transform: scale(1.05);
264
- box-shadow: var(--shadow-glow-lg);
265
- }
266
-
267
- .nav-logo-text {
268
- font-size: 26px;
269
- font-weight: 800;
270
- color: var(--foreground);
271
- letter-spacing: -0.5px;
272
- }
273
-
274
- .nav-links {
275
- display: flex;
276
- gap: 36px;
277
- list-style: none;
278
- }
279
-
280
- .nav-links a {
281
- color: var(--foreground-secondary);
282
- text-decoration: none;
283
- font-size: 14px;
284
- font-weight: 500;
285
- transition: var(--transition-fast);
286
- position: relative;
287
- }
288
-
289
- .nav-links a::after {
290
- content: '';
291
- position: absolute;
292
- bottom: -4px;
293
- left: 0;
294
- width: 0;
295
- height: 2px;
296
- background: var(--gradient-primary);
297
- border-radius: var(--radius-full);
298
- transition: var(--transition-base);
299
- }
300
-
301
- .nav-links a:hover {
302
- color: var(--foreground);
303
- }
304
-
305
- .nav-links a:hover::after {
306
- width: 100%;
307
- }
308
-
309
- .nav-cta {
310
- display: flex;
311
- gap: 12px;
312
- }
313
-
314
- /* ===== BUTTONS ===== */
315
- .btn {
316
- display: inline-flex;
317
- align-items: center;
318
- justify-content: center;
319
- gap: 8px;
320
- padding: 12px 24px;
321
- border-radius: var(--radius-md);
322
- font-size: 14px;
323
- font-weight: 600;
324
- text-decoration: none;
325
- transition: var(--transition-base);
326
- cursor: pointer;
327
- border: none;
328
- position: relative;
329
- overflow: hidden;
330
- }
331
-
332
- .btn-primary {
333
- background: var(--gradient-vivid);
334
- background-size: 200% 200%;
335
- color: white;
336
- box-shadow: var(--shadow-glow);
337
- }
338
-
339
- .btn-primary::before {
340
- content: '';
341
- position: absolute;
342
- inset: 0;
343
- background: linear-gradient(90deg, transparent, rgba(255,255,255,0.25), transparent);
344
- transform: translateX(-100%);
345
- transition: transform 0.6s;
346
- }
347
-
348
- .btn-primary:hover {
349
- transform: translateY(-2px);
350
- box-shadow: var(--shadow-glow-lg);
351
- animation: gradient-shift 3s ease infinite;
352
- }
353
-
354
- .btn-primary:hover::before {
355
- transform: translateX(100%);
356
- }
357
-
358
- @keyframes gradient-shift {
359
- 0%, 100% { background-position: 0% 50%; }
360
- 50% { background-position: 100% 50%; }
361
- }
362
-
363
- .btn-secondary {
364
- background: var(--card);
365
- color: var(--foreground);
366
- border: 1px solid var(--border);
367
- backdrop-filter: blur(10px);
368
- }
369
-
370
- .btn-secondary:hover {
371
- background: var(--card-hover);
372
- border-color: var(--border-hover);
373
- transform: translateY(-2px);
374
- }
375
-
376
- .btn-ghost {
377
- background: transparent;
378
- color: var(--foreground-secondary);
379
- padding: 8px 16px;
380
- }
381
-
382
- .btn-ghost:hover {
383
- color: var(--foreground);
384
- background: var(--primary-muted);
385
- }
386
-
387
- /* ===== HERO SECTION ===== */
388
- .hero {
389
- min-height: 100vh;
390
- display: flex;
391
- flex-direction: column;
392
- justify-content: center;
393
- align-items: center;
394
- text-align: center;
395
- padding: 140px 24px 100px;
396
- position: relative;
397
- }
398
-
399
- /* Hero spotlight effect */
400
- .hero::before {
401
- content: '';
402
- position: absolute;
403
- top: 0;
404
- left: 50%;
405
- transform: translateX(-50%);
406
- width: 150%;
407
- height: 600px;
408
- background: radial-gradient(ellipse 50% 80% at 50% 0%, rgba(139, 92, 246, 0.15), transparent);
409
- pointer-events: none;
410
- }
411
-
412
- .hero-badge {
413
- display: inline-flex;
414
- align-items: center;
415
- gap: 10px;
416
- padding: 8px 18px;
417
- background: var(--card);
418
- border: 1px solid var(--border);
419
- border-radius: var(--radius-full);
420
- font-size: 13px;
421
- font-weight: 500;
422
- color: var(--foreground-secondary);
423
- margin-bottom: 36px;
424
- backdrop-filter: blur(10px);
425
- animation: fade-in-up 0.6s ease-out;
426
- }
427
-
428
- .hero-badge-dot {
429
- width: 8px;
430
- height: 8px;
431
- background: var(--green);
432
- border-radius: 50%;
433
- animation: pulse-glow 2s ease-in-out infinite;
434
- box-shadow: 0 0 10px rgba(34, 197, 94, 0.5);
435
- }
436
-
437
- @keyframes pulse-glow {
438
- 0%, 100% { opacity: 1; box-shadow: 0 0 10px rgba(34, 197, 94, 0.5); }
439
- 50% { opacity: 0.6; box-shadow: 0 0 20px rgba(34, 197, 94, 0.8); }
440
- }
441
-
442
- @keyframes fade-in-up {
443
- from { opacity: 0; transform: translateY(20px); }
444
- to { opacity: 1; transform: translateY(0); }
445
- }
446
-
447
- .hero-title {
448
- font-size: clamp(52px, 9vw, 88px);
449
- font-weight: 900;
450
- letter-spacing: -3px;
451
- line-height: 1.0;
452
- margin-bottom: 28px;
453
- max-width: 1000px;
454
- animation: fade-in-up 0.6s ease-out 0.1s both;
455
- }
456
-
457
- .hero-title-gradient {
458
- background: var(--gradient-aurora);
459
- background-size: 300% 300%;
460
- -webkit-background-clip: text;
461
- -webkit-text-fill-color: transparent;
462
- background-clip: text;
463
- animation: aurora-gradient 8s ease infinite;
464
- position: relative;
465
- display: inline-block;
466
- }
467
-
468
- @keyframes aurora-gradient {
469
- 0%, 100% { background-position: 0% 50%; }
470
- 25% { background-position: 50% 0%; }
471
- 50% { background-position: 100% 50%; }
472
- 75% { background-position: 50% 100%; }
473
- }
474
-
475
- .hero-subtitle {
476
- font-size: clamp(18px, 2.5vw, 22px);
477
- color: var(--foreground-secondary);
478
- max-width: 640px;
479
- margin-bottom: 48px;
480
- line-height: 1.7;
481
- animation: fade-in-up 0.6s ease-out 0.2s both;
482
- }
483
-
484
- .hero-actions {
485
- display: flex;
486
- gap: 16px;
487
- flex-wrap: wrap;
488
- justify-content: center;
489
- margin-bottom: 72px;
490
- animation: fade-in-up 0.6s ease-out 0.3s both;
491
- }
492
-
493
- .hero-stats {
494
- display: flex;
495
- gap: 56px;
496
- flex-wrap: wrap;
497
- justify-content: center;
498
- animation: fade-in-up 0.6s ease-out 0.4s both;
499
- }
500
-
501
- .hero-stat {
502
- text-align: center;
503
- }
504
-
505
- .hero-stat-value {
506
- font-size: 42px;
507
- font-weight: 800;
508
- color: var(--foreground);
509
- margin-bottom: 6px;
510
- letter-spacing: -1px;
511
- }
512
-
513
- .hero-stat-label {
514
- font-size: 12px;
515
- color: var(--foreground-muted);
516
- text-transform: uppercase;
517
- letter-spacing: 1.5px;
518
- font-weight: 600;
519
- }
520
-
521
- /* ===== SECTIONS ===== */
522
- .container {
523
- max-width: 1280px;
524
- margin: 0 auto;
525
- padding: 0 24px;
526
- }
527
-
528
- .section {
529
- padding: 100px 0;
530
- position: relative;
531
- }
532
-
533
- .section-header {
534
- text-align: center;
535
- margin-bottom: 72px;
536
- }
537
-
538
- .section-tag {
539
- display: inline-flex;
540
- align-items: center;
541
- gap: 8px;
542
- padding: 6px 16px;
543
- background: var(--primary-muted);
544
- border: 1px solid rgba(139, 92, 246, 0.2);
545
- border-radius: var(--radius-full);
546
- font-size: 12px;
547
- font-weight: 600;
548
- color: var(--primary);
549
- text-transform: uppercase;
550
- letter-spacing: 1px;
551
- margin-bottom: 24px;
552
- }
553
-
554
- .section-title {
555
- font-size: clamp(36px, 5vw, 52px);
556
- font-weight: 800;
557
- letter-spacing: -1.5px;
558
- margin-bottom: 20px;
559
- line-height: 1.1;
560
- }
561
-
562
- .section-description {
563
- font-size: 18px;
564
- color: var(--foreground-secondary);
565
- max-width: 600px;
566
- margin: 0 auto;
567
- line-height: 1.7;
568
- }
569
-
570
- /* ===== FEATURE CARDS ===== */
571
- .features-grid {
572
- display: grid;
573
- grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
574
- gap: 24px;
575
- }
576
-
577
- .feature-card {
578
- background: var(--card);
579
- border-radius: var(--radius-xl);
580
- padding: 36px;
581
- transition: var(--transition-slow);
582
- position: relative;
583
- overflow: hidden;
584
- backdrop-filter: blur(20px);
585
- -webkit-backdrop-filter: blur(20px);
586
- }
587
-
588
- /* Animated gradient border */
589
- .feature-card::before {
590
- content: '';
591
- position: absolute;
592
- inset: 0;
593
- border-radius: var(--radius-xl);
594
- padding: 1px;
595
- background: linear-gradient(135deg,
596
- rgba(139, 92, 246, 0.4) 0%,
597
- transparent 25%,
598
- transparent 50%,
599
- rgba(59, 130, 246, 0.4) 75%,
600
- rgba(6, 182, 212, 0.3) 100%
601
- );
602
- background-size: 300% 300%;
603
- -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
604
- mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
605
- -webkit-mask-composite: xor;
606
- mask-composite: exclude;
607
- opacity: 0.5;
608
- transition: var(--transition-slow);
609
- }
610
-
611
- /* Top accent line */
612
- .feature-card::after {
613
- content: '';
614
- position: absolute;
615
- top: 0;
616
- left: 20%;
617
- right: 20%;
618
- height: 1px;
619
- background: var(--gradient-vivid);
620
- opacity: 0;
621
- transition: var(--transition-slow);
622
- }
623
-
624
- .feature-card:hover {
625
- background: var(--card-hover);
626
- transform: translateY(-8px);
627
- box-shadow: var(--shadow-glow), var(--shadow-lg);
628
- }
629
-
630
- .feature-card:hover::before {
631
- opacity: 1;
632
- animation: border-dance 4s linear infinite;
633
- }
634
-
635
- .feature-card:hover::after {
636
- opacity: 1;
637
- left: 10%;
638
- right: 10%;
639
- }
640
-
641
- @keyframes border-dance {
642
- 0%, 100% { background-position: 0% 50%; }
643
- 50% { background-position: 100% 50%; }
644
- }
645
-
646
- .feature-icon {
647
- width: 56px;
648
- height: 56px;
649
- background: var(--primary-muted);
650
- border-radius: var(--radius-lg);
651
- display: flex;
652
- align-items: center;
653
- justify-content: center;
654
- font-size: 28px;
655
- margin-bottom: 24px;
656
- transition: var(--transition-base);
657
- }
658
-
659
- .feature-card:hover .feature-icon {
660
- transform: scale(1.1);
661
- box-shadow: 0 0 30px rgba(139, 92, 246, 0.3);
662
- }
663
-
664
- .feature-title {
665
- font-size: 22px;
666
- font-weight: 700;
667
- margin-bottom: 12px;
668
- color: var(--foreground);
669
- letter-spacing: -0.3px;
670
- }
671
-
672
- .feature-description {
673
- font-size: 15px;
674
- color: var(--foreground-secondary);
675
- line-height: 1.7;
676
- }
677
-
678
- /* ===== PROVIDER CARDS ===== */
679
- .providers-grid {
680
- display: grid;
681
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
682
- gap: 16px;
683
- }
684
-
685
- .provider-card {
686
- background: var(--card);
687
- border-radius: var(--radius-lg);
688
- padding: 28px 20px;
689
- text-align: center;
690
- transition: var(--transition-slow);
691
- position: relative;
692
- overflow: hidden;
693
- backdrop-filter: blur(10px);
694
- }
695
-
696
- .provider-card::before {
697
- content: '';
698
- position: absolute;
699
- inset: 0;
700
- border-radius: var(--radius-lg);
701
- padding: 1px;
702
- background: linear-gradient(135deg, rgba(139, 92, 246, 0.2), transparent 50%, rgba(59, 130, 246, 0.2));
703
- -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
704
- mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
705
- -webkit-mask-composite: xor;
706
- mask-composite: exclude;
707
- transition: var(--transition-slow);
708
- }
709
-
710
- .provider-card:hover {
711
- background: var(--card-hover);
712
- transform: translateY(-6px) scale(1.02);
713
- box-shadow: 0 20px 40px -20px rgba(139, 92, 246, 0.4);
714
- }
715
-
716
- .provider-card:hover::before {
717
- background: linear-gradient(135deg, rgba(139, 92, 246, 0.5), transparent 50%, rgba(59, 130, 246, 0.5));
718
- }
719
-
720
- .provider-icon {
721
- font-size: 36px;
722
- margin-bottom: 14px;
723
- display: block;
724
- }
725
-
726
- .provider-name {
727
- font-size: 17px;
728
- font-weight: 700;
729
- color: var(--foreground);
730
- margin-bottom: 4px;
731
- }
732
-
733
- .provider-type {
734
- font-size: 11px;
735
- color: var(--foreground-muted);
736
- text-transform: uppercase;
737
- letter-spacing: 1px;
738
- font-weight: 600;
739
- }
740
-
741
- .provider-badge {
742
- display: inline-block;
743
- padding: 5px 12px;
744
- background: rgba(34, 197, 94, 0.1);
745
- color: var(--green);
746
- font-size: 10px;
747
- font-weight: 700;
748
- border-radius: var(--radius-full);
749
- margin-top: 12px;
750
- letter-spacing: 0.5px;
751
- }
752
-
753
- .provider-badge.paid {
754
- background: var(--primary-muted);
755
- color: var(--primary);
756
- }
757
-
758
- /* ===== CLIENT CARDS ===== */
759
- .clients-grid {
760
- display: grid;
761
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
762
- gap: 20px;
763
- }
764
-
765
- .client-card {
766
- background: var(--card);
767
- border-radius: var(--radius-lg);
768
- padding: 24px;
769
- display: flex;
770
- align-items: center;
771
- gap: 18px;
772
- transition: var(--transition-base);
773
- position: relative;
774
- overflow: hidden;
775
- }
776
-
777
- .client-card::before {
778
- content: '';
779
- position: absolute;
780
- inset: 0;
781
- border-radius: var(--radius-lg);
782
- padding: 1px;
783
- background: linear-gradient(135deg, rgba(139, 92, 246, 0.15), transparent);
784
- -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
785
- mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
786
- -webkit-mask-composite: xor;
787
- mask-composite: exclude;
788
- }
789
-
790
- .client-card:hover {
791
- background: var(--card-hover);
792
- transform: translateX(4px);
793
- }
794
-
795
- .client-icon {
796
- width: 52px;
797
- height: 52px;
798
- background: var(--background-tertiary);
799
- border-radius: var(--radius-md);
800
- display: flex;
801
- align-items: center;
802
- justify-content: center;
803
- font-size: 26px;
804
- flex-shrink: 0;
805
- }
806
-
807
- .client-info {
808
- flex: 1;
809
- }
810
-
811
- .client-name {
812
- font-size: 17px;
813
- font-weight: 700;
814
- color: var(--foreground);
815
- margin-bottom: 4px;
816
- }
817
-
818
- .client-desc {
819
- font-size: 13px;
820
- color: var(--foreground-muted);
821
- }
822
-
823
- /* ===== CODE BLOCKS ===== */
824
- .code-block {
825
- background: var(--background-secondary);
826
- border: 1px solid var(--border);
827
- border-radius: var(--radius-lg);
828
- overflow: hidden;
829
- margin: 20px 0;
830
- }
831
-
832
- .code-header {
833
- display: flex;
834
- justify-content: space-between;
835
- align-items: center;
836
- padding: 14px 18px;
837
- background: var(--background-tertiary);
838
- border-bottom: 1px solid var(--border);
839
- }
840
-
841
- .code-dots {
842
- display: flex;
843
- gap: 8px;
844
- }
845
-
846
- .code-dot {
847
- width: 12px;
848
- height: 12px;
849
- border-radius: 50%;
850
- }
851
-
852
- .code-dot.red { background: #ff5f57; }
853
- .code-dot.yellow { background: #febc2e; }
854
- .code-dot.green { background: #28c840; }
855
-
856
- .code-title {
857
- font-size: 13px;
858
- color: var(--foreground-muted);
859
- font-weight: 600;
860
- }
861
-
862
- .code-content {
863
- padding: 20px;
864
- overflow-x: auto;
865
- }
866
-
867
- .code-content pre {
868
- margin: 0;
869
- font-family: 'JetBrains Mono', monospace;
870
- font-size: 14px;
871
- line-height: 1.7;
872
- color: var(--foreground);
873
- }
874
-
875
- .code-content code {
876
- font-family: inherit;
877
- }
878
-
879
- /* Syntax colors */
880
- .code-comment { color: var(--foreground-muted); }
881
- .code-keyword { color: var(--primary); }
882
- .code-string { color: var(--green); }
883
- .code-variable { color: var(--accent); }
884
-
885
- /* ===== STEPS ===== */
886
- .steps {
887
- display: flex;
888
- flex-direction: column;
889
- gap: 40px;
890
- max-width: 760px;
891
- margin: 0 auto;
892
- }
893
-
894
- .step {
895
- display: flex;
896
- gap: 28px;
897
- align-items: flex-start;
898
- }
899
-
900
- .step-number {
901
- width: 56px;
902
- height: 56px;
903
- background: var(--gradient-vivid);
904
- border-radius: var(--radius-lg);
905
- display: flex;
906
- align-items: center;
907
- justify-content: center;
908
- font-size: 24px;
909
- font-weight: 800;
910
- color: white;
911
- flex-shrink: 0;
912
- box-shadow: var(--shadow-glow);
913
- }
914
-
915
- .step-content {
916
- flex: 1;
917
- padding-top: 4px;
918
- }
919
-
920
- .step-title {
921
- font-size: 20px;
922
- font-weight: 700;
923
- color: var(--foreground);
924
- margin-bottom: 10px;
925
- }
926
-
927
- .step-description {
928
- font-size: 15px;
929
- color: var(--foreground-secondary);
930
- line-height: 1.6;
931
- }
932
-
933
- /* ===== ARCHITECTURE ===== */
934
- .architecture {
935
- background: var(--card);
936
- border: 1px solid var(--border);
937
- border-radius: var(--radius-xl);
938
- padding: 56px;
939
- text-align: center;
940
- position: relative;
941
- overflow: hidden;
942
- }
943
-
944
- .architecture::before {
945
- content: '';
946
- position: absolute;
947
- inset: 0;
948
- border-radius: var(--radius-xl);
949
- padding: 1px;
950
- background: linear-gradient(135deg, rgba(139, 92, 246, 0.2), transparent, rgba(59, 130, 246, 0.2));
951
- -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
952
- mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
953
- -webkit-mask-composite: xor;
954
- mask-composite: exclude;
955
- }
956
-
957
- .architecture-diagram {
958
- font-family: 'JetBrains Mono', monospace;
959
- font-size: 14px;
960
- color: var(--foreground-secondary);
961
- white-space: pre;
962
- line-height: 1.5;
963
- display: inline-block;
964
- text-align: left;
965
- }
966
-
967
- .architecture-highlight {
968
- color: var(--primary);
969
- font-weight: 700;
970
- }
971
-
972
- /* ===== CTA SECTION ===== */
973
- .cta-section {
974
- background: var(--card);
975
- border: 1px solid var(--border);
976
- border-radius: var(--radius-2xl);
977
- padding: 80px 48px;
978
- text-align: center;
979
- position: relative;
980
- overflow: hidden;
981
- }
982
-
983
- .cta-section::before {
984
- content: '';
985
- position: absolute;
986
- top: -100%;
987
- left: -100%;
988
- width: 300%;
989
- height: 300%;
990
- background: radial-gradient(circle at center, rgba(139, 92, 246, 0.1) 0%, transparent 40%);
991
- animation: cta-glow 10s ease-in-out infinite;
992
- pointer-events: none;
993
- }
994
-
995
- @keyframes cta-glow {
996
- 0%, 100% { transform: translate(0, 0); }
997
- 50% { transform: translate(10%, 10%); }
998
- }
999
-
1000
- .cta-section::after {
1001
- content: '';
1002
- position: absolute;
1003
- inset: 0;
1004
- border-radius: var(--radius-2xl);
1005
- padding: 1px;
1006
- background: var(--gradient-vivid);
1007
- -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
1008
- mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
1009
- -webkit-mask-composite: xor;
1010
- mask-composite: exclude;
1011
- opacity: 0.3;
1012
- pointer-events: none;
1013
- }
1014
-
1015
- .cta-title {
1016
- font-size: clamp(32px, 5vw, 48px);
1017
- font-weight: 800;
1018
- margin-bottom: 20px;
1019
- position: relative;
1020
- z-index: 1;
1021
- letter-spacing: -1px;
1022
- }
1023
-
1024
- .cta-description {
1025
- font-size: 19px;
1026
- color: var(--foreground-secondary);
1027
- margin-bottom: 40px;
1028
- position: relative;
1029
- z-index: 1;
1030
- max-width: 500px;
1031
- margin-left: auto;
1032
- margin-right: auto;
1033
- }
1034
-
1035
- .cta-actions {
1036
- display: flex;
1037
- gap: 16px;
1038
- justify-content: center;
1039
- flex-wrap: wrap;
1040
- position: relative;
1041
- z-index: 1;
1042
- }
1043
-
1044
- /* ===== FOOTER ===== */
1045
- .footer {
1046
- padding: 80px 24px;
1047
- border-top: 1px solid var(--border);
1048
- text-align: center;
1049
- position: relative;
1050
- }
1051
-
1052
- .footer::before {
1053
- content: '';
1054
- position: absolute;
1055
- top: 0;
1056
- left: 0;
1057
- right: 0;
1058
- height: 1px;
1059
- background: linear-gradient(90deg, transparent, rgba(139, 92, 246, 0.3), rgba(59, 130, 246, 0.3), transparent);
1060
- }
1061
-
1062
- .footer-logo {
1063
- font-size: 32px;
1064
- font-weight: 800;
1065
- color: var(--foreground);
1066
- margin-bottom: 24px;
1067
- letter-spacing: -0.5px;
1068
- }
1069
-
1070
- .footer-links {
1071
- display: flex;
1072
- gap: 36px;
1073
- justify-content: center;
1074
- margin-bottom: 36px;
1075
- flex-wrap: wrap;
1076
- }
1077
-
1078
- .footer-links a {
1079
- color: var(--foreground-secondary);
1080
- text-decoration: none;
1081
- font-size: 14px;
1082
- font-weight: 500;
1083
- transition: var(--transition-fast);
1084
- }
1085
-
1086
- .footer-links a:hover {
1087
- color: var(--foreground);
1088
- }
1089
-
1090
- .footer-meta {
1091
- font-size: 14px;
1092
- color: var(--foreground-muted);
1093
- }
1094
-
1095
- .footer-meta a {
1096
- color: var(--primary);
1097
- text-decoration: none;
1098
- transition: var(--transition-fast);
1099
- }
1100
-
1101
- .footer-meta a:hover {
1102
- color: var(--primary-hover);
1103
- }
1104
-
1105
- /* ===== UTILITIES ===== */
1106
- .text-gradient {
1107
- background: var(--gradient-vivid);
1108
- -webkit-background-clip: text;
1109
- -webkit-text-fill-color: transparent;
1110
- background-clip: text;
1111
- }
1112
-
1113
- .divider {
1114
- height: 1px;
1115
- background: var(--border);
1116
- margin: 100px 0;
1117
- }
1118
-
1119
- /* ===== RESPONSIVE ===== */
1120
- @media (max-width: 768px) {
1121
- .nav-links {
1122
- display: none;
1123
- }
1124
-
1125
- .nav-cta .btn-secondary {
1126
- display: none;
1127
- }
1128
-
1129
- .hero {
1130
- padding: 120px 20px 80px;
1131
- }
1132
-
1133
- .hero-title {
1134
- letter-spacing: -2px;
1135
- }
1136
-
1137
- .hero-stats {
1138
- gap: 32px;
1139
- }
1140
-
1141
- .hero-stat-value {
1142
- font-size: 32px;
1143
- }
1144
-
1145
- .section {
1146
- padding: 80px 0;
1147
- }
1148
-
1149
- .section-header {
1150
- margin-bottom: 48px;
1151
- }
1152
-
1153
- .features-grid {
1154
- grid-template-columns: 1fr;
1155
- gap: 16px;
1156
- }
1157
-
1158
- .feature-card {
1159
- padding: 28px;
1160
- }
1161
-
1162
- .providers-grid {
1163
- grid-template-columns: repeat(2, 1fr);
1164
- gap: 12px;
1165
- }
1166
-
1167
- .provider-card {
1168
- padding: 20px 16px;
1169
- }
1170
-
1171
- .clients-grid {
1172
- grid-template-columns: 1fr;
1173
- }
1174
-
1175
- .cta-section {
1176
- padding: 48px 24px;
1177
- }
1178
-
1179
- .architecture {
1180
- padding: 24px;
1181
- overflow-x: auto;
1182
- }
1183
-
1184
- .step {
1185
- gap: 20px;
1186
- }
1187
-
1188
- .step-number {
1189
- width: 48px;
1190
- height: 48px;
1191
- font-size: 20px;
1192
- }
1193
- }
1194
-
1195
- /* Hide default markdown h1 */
1196
- h1:first-of-type {
1197
- display: none;
1198
- }
1199
-
1200
- /* Selection styling */
1201
- ::selection {
1202
- background: rgba(139, 92, 246, 0.3);
1203
- color: var(--foreground);
1204
- }
1205
-
1206
- /* Scrollbar styling */
1207
- ::-webkit-scrollbar {
1208
- width: 8px;
1209
- height: 8px;
1210
- }
1211
-
1212
- ::-webkit-scrollbar-track {
1213
- background: var(--background);
1214
- }
1215
-
1216
- ::-webkit-scrollbar-thumb {
1217
- background: var(--foreground-muted);
1218
- border-radius: var(--radius-full);
1219
- }
1220
-
1221
- ::-webkit-scrollbar-thumb:hover {
1222
- background: var(--foreground-secondary);
1223
- }