@conversionpros/aiva 1.0.1 → 2.0.0

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 (149) hide show
  1. package/bin/aiva.js +26 -14
  2. package/lib/bluebubbles.js +145 -0
  3. package/lib/config-gen.js +253 -0
  4. package/lib/constants.js +72 -0
  5. package/lib/launch-agent.js +112 -0
  6. package/lib/prerequisites.js +236 -0
  7. package/lib/process.js +59 -145
  8. package/lib/setup.js +224 -194
  9. package/lib/validate.js +194 -0
  10. package/package.json +7 -32
  11. package/auto-deploy.js +0 -190
  12. package/cli-sync.js +0 -126
  13. package/d2a-prompt-template.txt +0 -106
  14. package/diagnostics-api.js +0 -304
  15. package/docs/ara-dedup-fix-scope.md +0 -112
  16. package/docs/ara-fix-round2-scope.md +0 -61
  17. package/docs/ara-greeting-fix-scope.md +0 -70
  18. package/docs/calendar-date-fix-scope.md +0 -28
  19. package/docs/getting-started.md +0 -115
  20. package/docs/network-architecture-rollout-scope.md +0 -43
  21. package/docs/scope-google-oauth-integration.md +0 -351
  22. package/docs/settings-page-scope.md +0 -50
  23. package/docs/xai-imagine-scope.md +0 -116
  24. package/docs/xai-voice-integration-scope.md +0 -115
  25. package/docs/xai-voice-tools-scope.md +0 -165
  26. package/email-router.js +0 -512
  27. package/follow-up-handler.js +0 -606
  28. package/gateway-monitor.js +0 -158
  29. package/google-email.js +0 -379
  30. package/google-oauth.js +0 -310
  31. package/grok-imagine.js +0 -97
  32. package/health-reporter.js +0 -287
  33. package/invisible-prefix-base.txt +0 -206
  34. package/invisible-prefix-owner.txt +0 -26
  35. package/invisible-prefix-slim.txt +0 -10
  36. package/invisible-prefix.txt +0 -43
  37. package/knowledge-base.js +0 -472
  38. package/lib/cli.js +0 -19
  39. package/lib/server.js +0 -42
  40. package/meta-capi.js +0 -206
  41. package/meta-leads.js +0 -411
  42. package/notion-oauth.js +0 -323
  43. package/public/agent-config.html +0 -241
  44. package/public/aiva-avatar-anime.png +0 -0
  45. package/public/css/docs.css.bak +0 -688
  46. package/public/css/onboarding.css +0 -543
  47. package/public/diagrams/claude-subscription-pool.html +0 -329
  48. package/public/diagrams/claude-subscription-pool.png +0 -0
  49. package/public/docs-icon.png +0 -0
  50. package/public/escalation.html +0 -237
  51. package/public/group-config.html +0 -300
  52. package/public/icon-192.png +0 -0
  53. package/public/icon-512.png +0 -0
  54. package/public/icons/agents.svg +0 -1
  55. package/public/icons/attach.svg +0 -1
  56. package/public/icons/characters.svg +0 -1
  57. package/public/icons/chat.svg +0 -1
  58. package/public/icons/docs.svg +0 -1
  59. package/public/icons/heartbeat.svg +0 -1
  60. package/public/icons/messages.svg +0 -1
  61. package/public/icons/mic.svg +0 -1
  62. package/public/icons/notes.svg +0 -1
  63. package/public/icons/settings.svg +0 -1
  64. package/public/icons/tasks.svg +0 -1
  65. package/public/images/onboarding/p0-communication-layer.png +0 -0
  66. package/public/images/onboarding/p0-infinite-surface.png +0 -0
  67. package/public/images/onboarding/p0-learning-model.png +0 -0
  68. package/public/images/onboarding/p0-meet-aiva.png +0 -0
  69. package/public/images/onboarding/p4-contact-intelligence.png +0 -0
  70. package/public/images/onboarding/p4-context-compounds.png +0 -0
  71. package/public/images/onboarding/p4-message-router.png +0 -0
  72. package/public/images/onboarding/p4-per-contact-rules.png +0 -0
  73. package/public/images/onboarding/p4-send-messages.png +0 -0
  74. package/public/images/onboarding/p6-be-precise.png +0 -0
  75. package/public/images/onboarding/p6-review-escalations.png +0 -0
  76. package/public/images/onboarding/p6-voice-input.png +0 -0
  77. package/public/images/onboarding/p7-completion.png +0 -0
  78. package/public/index.html +0 -11594
  79. package/public/js/onboarding.js +0 -699
  80. package/public/manifest.json +0 -24
  81. package/public/messages-v2.html +0 -2824
  82. package/public/permission-approve.html.bak +0 -107
  83. package/public/permissions.html +0 -150
  84. package/public/styles/design-system.css +0 -68
  85. package/router-db.js +0 -604
  86. package/router-utils.js +0 -28
  87. package/router-v2/adapters/imessage.js +0 -191
  88. package/router-v2/adapters/quo.js +0 -82
  89. package/router-v2/adapters/whatsapp.js +0 -192
  90. package/router-v2/contact-manager.js +0 -234
  91. package/router-v2/conversation-engine.js +0 -498
  92. package/router-v2/data/knowledge-base.json +0 -176
  93. package/router-v2/data/router-v2.db +0 -0
  94. package/router-v2/data/router-v2.db-shm +0 -0
  95. package/router-v2/data/router-v2.db-wal +0 -0
  96. package/router-v2/data/router.db +0 -0
  97. package/router-v2/db.js +0 -457
  98. package/router-v2/escalation-bridge.js +0 -540
  99. package/router-v2/follow-up-engine.js +0 -347
  100. package/router-v2/index.js +0 -441
  101. package/router-v2/ingestion.js +0 -213
  102. package/router-v2/knowledge-base.js +0 -231
  103. package/router-v2/lead-qualifier.js +0 -152
  104. package/router-v2/learning-loop.js +0 -202
  105. package/router-v2/outbound-sender.js +0 -160
  106. package/router-v2/package.json +0 -13
  107. package/router-v2/permission-gate.js +0 -86
  108. package/router-v2/playbook.js +0 -177
  109. package/router-v2/prompts/base.js +0 -52
  110. package/router-v2/prompts/first-contact.js +0 -38
  111. package/router-v2/prompts/lead-qualification.js +0 -37
  112. package/router-v2/prompts/scheduling.js +0 -72
  113. package/router-v2/prompts/style-overrides.js +0 -22
  114. package/router-v2/scheduler.js +0 -301
  115. package/router-v2/scripts/migrate-v1-to-v2.js +0 -215
  116. package/router-v2/scripts/seed-faq.js +0 -67
  117. package/router-v2/seed-knowledge-base.js +0 -39
  118. package/router-v2/utils/ai.js +0 -129
  119. package/router-v2/utils/phone.js +0 -52
  120. package/router-v2/utils/response-validator.js +0 -98
  121. package/router-v2/utils/sanitize.js +0 -222
  122. package/router.js +0 -5005
  123. package/routes/google-calendar.js +0 -186
  124. package/scripts/deploy.sh +0 -62
  125. package/scripts/macos-calendar.sh +0 -232
  126. package/scripts/onboard-device.sh +0 -466
  127. package/server.js +0 -5131
  128. package/start.sh +0 -24
  129. package/templates/AGENTS.md +0 -548
  130. package/templates/IDENTITY.md +0 -15
  131. package/templates/docs-agents.html +0 -132
  132. package/templates/docs-app.html +0 -130
  133. package/templates/docs-home.html +0 -83
  134. package/templates/docs-imessage.html +0 -121
  135. package/templates/docs-tasks.html +0 -123
  136. package/templates/docs-tips.html +0 -175
  137. package/templates/getting-started.html +0 -809
  138. package/templates/invisible-prefix-base.txt +0 -171
  139. package/templates/invisible-prefix-owner.txt +0 -282
  140. package/templates/invisible-prefix.txt +0 -338
  141. package/templates/manifest.json +0 -61
  142. package/templates/memory-org/clients.md +0 -7
  143. package/templates/memory-org/credentials.md +0 -9
  144. package/templates/memory-org/devices.md +0 -7
  145. package/templates/updates.html +0 -464
  146. package/tts-proxy.js +0 -96
  147. package/voice-call-local.js +0 -731
  148. package/voice-call.js +0 -732
  149. package/wa-listener.js +0 -354
@@ -1,688 +0,0 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap');
2
-
3
- *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
4
-
5
- :root {
6
- --bg: #0a0a0f;
7
- --bg-elevated: #111118;
8
- --bg-card: rgba(255,255,255,0.03);
9
- --border: rgba(255,255,255,0.06);
10
- --border-hover: rgba(255,255,255,0.12);
11
- --text: #b0b0b8;
12
- --text-secondary: #707078;
13
- --text-heading: #f0f0f5;
14
- --accent: #7b8cff;
15
- --accent-soft: rgba(123,140,255,0.08);
16
- --accent-glow: rgba(123,140,255,0.15);
17
- --radius: 16px;
18
- --radius-sm: 10px;
19
- --sidebar-width: 260px;
20
- }
21
-
22
- body {
23
- background: var(--bg);
24
- color: var(--text);
25
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
26
- line-height: 1.7;
27
- -webkit-font-smoothing: antialiased;
28
- -moz-osx-font-smoothing: grayscale;
29
- overflow-x: hidden;
30
- }
31
-
32
- /* ── Sidebar (Desktop) ── */
33
- .docs-sidebar {
34
- position: fixed;
35
- top: 0;
36
- left: 0;
37
- width: var(--sidebar-width);
38
- height: 100vh;
39
- background: var(--bg-elevated);
40
- border-right: 1px solid var(--border);
41
- padding: 2rem 0;
42
- overflow-y: auto;
43
- z-index: 100;
44
- display: flex;
45
- flex-direction: column;
46
- }
47
-
48
- .sidebar-header {
49
- padding: 0 1.5rem 1.5rem;
50
- border-bottom: 1px solid var(--border);
51
- margin-bottom: 0.5rem;
52
- }
53
-
54
- .sidebar-logo {
55
- font-size: 1.1rem;
56
- font-weight: 700;
57
- color: var(--text-heading);
58
- text-decoration: none;
59
- letter-spacing: -0.02em;
60
- }
61
-
62
- .sidebar-logo span {
63
- color: var(--accent);
64
- }
65
-
66
- .sidebar-label {
67
- font-size: 0.7rem;
68
- font-weight: 600;
69
- text-transform: uppercase;
70
- letter-spacing: 0.1em;
71
- color: var(--text-secondary);
72
- padding: 1rem 1.5rem 0.5rem;
73
- }
74
-
75
- .sidebar-nav {
76
- flex: 1;
77
- }
78
-
79
- .sidebar-nav a {
80
- display: block;
81
- padding: 0.6rem 1.5rem;
82
- color: var(--text);
83
- text-decoration: none;
84
- font-size: 0.9rem;
85
- font-weight: 450;
86
- transition: color 0.2s, background 0.2s;
87
- border-left: 3px solid transparent;
88
- }
89
-
90
- .sidebar-nav a:hover {
91
- color: var(--text-heading);
92
- background: rgba(255,255,255,0.02);
93
- }
94
-
95
- .sidebar-nav a.active {
96
- color: var(--accent);
97
- background: var(--accent-soft);
98
- border-left-color: var(--accent);
99
- font-weight: 550;
100
- }
101
-
102
- .sidebar-nav .nav-divider {
103
- height: 1px;
104
- background: var(--border);
105
- margin: 0.75rem 1.5rem;
106
- }
107
-
108
- /* ── Mobile Hamburger ── */
109
- .mobile-header {
110
- display: none;
111
- position: fixed;
112
- top: 0;
113
- left: 0;
114
- right: 0;
115
- height: 56px;
116
- background: var(--bg-elevated);
117
- border-bottom: 1px solid var(--border);
118
- z-index: 200;
119
- align-items: center;
120
- padding: 0 1rem;
121
- }
122
-
123
- .hamburger-btn {
124
- width: 40px;
125
- height: 40px;
126
- border-radius: 10px;
127
- background: transparent;
128
- border: 1px solid var(--border);
129
- display: flex;
130
- align-items: center;
131
- justify-content: center;
132
- cursor: pointer;
133
- transition: background 0.2s;
134
- }
135
-
136
- .hamburger-btn:hover {
137
- background: rgba(255,255,255,0.04);
138
- }
139
-
140
- .hamburger-btn span {
141
- display: block;
142
- width: 18px;
143
- height: 2px;
144
- background: var(--text-heading);
145
- position: relative;
146
- transition: all 0.3s;
147
- }
148
-
149
- .hamburger-btn span::before,
150
- .hamburger-btn span::after {
151
- content: '';
152
- position: absolute;
153
- left: 0;
154
- width: 18px;
155
- height: 2px;
156
- background: var(--text-heading);
157
- transition: all 0.3s;
158
- }
159
-
160
- .hamburger-btn span::before { top: -6px; }
161
- .hamburger-btn span::after { top: 6px; }
162
-
163
- .hamburger-btn.open span { background: transparent; }
164
- .hamburger-btn.open span::before { top: 0; transform: rotate(45deg); }
165
- .hamburger-btn.open span::after { top: 0; transform: rotate(-45deg); }
166
-
167
- .mobile-title {
168
- font-size: 0.95rem;
169
- font-weight: 600;
170
- color: var(--text-heading);
171
- margin-left: 0.75rem;
172
- }
173
-
174
- .mobile-overlay {
175
- position: fixed;
176
- inset: 0;
177
- background: rgba(0,0,0,0.6);
178
- z-index: 150;
179
- opacity: 0;
180
- pointer-events: none;
181
- transition: opacity 0.3s;
182
- }
183
-
184
- .mobile-overlay.open {
185
- opacity: 1;
186
- pointer-events: auto;
187
- }
188
-
189
- /* ── Content Area ── */
190
- .docs-content {
191
- margin-left: var(--sidebar-width);
192
- min-height: 100vh;
193
- padding: 3rem 3rem 4rem;
194
- max-width: calc(var(--sidebar-width) + 820px);
195
- }
196
-
197
- .content-inner {
198
- max-width: 720px;
199
- }
200
-
201
- /* ── Page Header ── */
202
- .page-label {
203
- font-size: 0.75rem;
204
- font-weight: 600;
205
- text-transform: uppercase;
206
- letter-spacing: 0.1em;
207
- color: var(--accent);
208
- margin-bottom: 0.75rem;
209
- }
210
-
211
- .page-title {
212
- font-size: clamp(1.8rem, 4vw, 2.4rem);
213
- font-weight: 800;
214
- color: var(--text-heading);
215
- letter-spacing: -0.03em;
216
- line-height: 1.15;
217
- margin-bottom: 1rem;
218
- }
219
-
220
- .page-desc {
221
- font-size: 1.1rem;
222
- color: var(--text-secondary);
223
- line-height: 1.7;
224
- margin-bottom: 2.5rem;
225
- }
226
-
227
- /* ── Section ── */
228
- .doc-section {
229
- margin-bottom: 3rem;
230
- }
231
-
232
- .doc-section + .doc-section {
233
- padding-top: 2.5rem;
234
- border-top: 1px solid var(--border);
235
- }
236
-
237
- .section-title {
238
- font-size: 1.4rem;
239
- font-weight: 700;
240
- color: var(--text-heading);
241
- letter-spacing: -0.02em;
242
- margin-bottom: 0.75rem;
243
- line-height: 1.2;
244
- }
245
-
246
- .section-desc {
247
- font-size: 1rem;
248
- color: var(--text);
249
- line-height: 1.7;
250
- margin-bottom: 1.5rem;
251
- }
252
-
253
- /* ── Agent Cards ── */
254
- .agent-grid {
255
- display: grid;
256
- grid-template-columns: repeat(2, 1fr);
257
- gap: 1.25rem;
258
- }
259
-
260
- .agent-card {
261
- background: var(--bg-card);
262
- border: 1px solid var(--border);
263
- border-radius: var(--radius);
264
- padding: 1.75rem;
265
- transition: border-color 0.3s ease, box-shadow 0.3s ease;
266
- }
267
-
268
- .agent-card:hover {
269
- border-color: var(--border-hover);
270
- box-shadow: 0 0 40px rgba(123,140,255,0.04);
271
- }
272
-
273
- .agent-card .agent-icon {
274
- width: 40px;
275
- height: 40px;
276
- border-radius: 10px;
277
- background: var(--accent-soft);
278
- display: flex;
279
- align-items: center;
280
- justify-content: center;
281
- margin-bottom: 1rem;
282
- }
283
-
284
- .agent-card .agent-icon svg {
285
- width: 20px;
286
- height: 20px;
287
- stroke: var(--accent);
288
- fill: none;
289
- stroke-width: 1.5;
290
- stroke-linecap: round;
291
- stroke-linejoin: round;
292
- }
293
-
294
- .agent-card h3 {
295
- font-size: 1.05rem;
296
- font-weight: 600;
297
- color: var(--text-heading);
298
- margin-bottom: 0.25rem;
299
- }
300
-
301
- .agent-card .agent-role {
302
- font-size: 0.82rem;
303
- color: var(--accent);
304
- font-weight: 500;
305
- margin-bottom: 0.75rem;
306
- }
307
-
308
- .agent-card p {
309
- font-size: 0.92rem;
310
- line-height: 1.65;
311
- color: var(--text);
312
- }
313
-
314
- .agent-card ul {
315
- list-style: none;
316
- padding: 0;
317
- margin: 0.75rem 0 0;
318
- }
319
-
320
- .agent-card ul li {
321
- font-size: 0.88rem;
322
- color: var(--text);
323
- padding: 0.25rem 0;
324
- padding-left: 1.1rem;
325
- position: relative;
326
- }
327
-
328
- .agent-card ul li::before {
329
- content: '';
330
- position: absolute;
331
- left: 0;
332
- top: 0.65rem;
333
- width: 5px;
334
- height: 5px;
335
- border-radius: 50%;
336
- background: var(--accent);
337
- opacity: 0.5;
338
- }
339
-
340
- .agent-card.full-width {
341
- grid-column: 1 / -1;
342
- }
343
-
344
- /* ── Comm Cards ── */
345
- .comm-grid {
346
- display: grid;
347
- grid-template-columns: repeat(2, 1fr);
348
- gap: 1.25rem;
349
- }
350
-
351
- .comm-card {
352
- background: var(--bg-card);
353
- border: 1px solid var(--border);
354
- border-radius: var(--radius);
355
- padding: 2rem;
356
- }
357
-
358
- .comm-card h3 {
359
- font-size: 1.1rem;
360
- font-weight: 600;
361
- color: var(--text-heading);
362
- margin-bottom: 0.5rem;
363
- }
364
-
365
- .comm-card .comm-subtitle {
366
- font-size: 0.85rem;
367
- color: var(--accent);
368
- font-weight: 500;
369
- margin-bottom: 1.25rem;
370
- }
371
-
372
- .comm-card ul {
373
- list-style: none;
374
- padding: 0;
375
- margin: 0;
376
- }
377
-
378
- .comm-card ul li {
379
- font-size: 0.92rem;
380
- color: var(--text);
381
- padding: 0.4rem 0;
382
- padding-left: 1.1rem;
383
- position: relative;
384
- line-height: 1.55;
385
- }
386
-
387
- .comm-card ul li::before {
388
- content: '';
389
- position: absolute;
390
- left: 0;
391
- top: 0.7rem;
392
- width: 5px;
393
- height: 5px;
394
- border-radius: 50%;
395
- background: var(--accent);
396
- opacity: 0.4;
397
- }
398
-
399
- /* ── Callout / Pro Tip ── */
400
- .callout {
401
- padding: 1rem 1.25rem;
402
- background: var(--accent-soft);
403
- border-radius: var(--radius-sm);
404
- font-size: 0.92rem;
405
- color: var(--text);
406
- line-height: 1.6;
407
- margin-top: 1.25rem;
408
- }
409
-
410
- .callout strong {
411
- color: var(--text-heading);
412
- }
413
-
414
- .callout.warning {
415
- background: rgba(242,131,107,0.08);
416
- border: 1px solid rgba(242,131,107,0.15);
417
- }
418
-
419
- .callout.warning strong {
420
- color: #f2836b;
421
- }
422
-
423
- /* ── Workflow Steps ── */
424
- .workflow-step {
425
- display: flex;
426
- gap: 1.25rem;
427
- padding: 1.25rem 0;
428
- }
429
-
430
- .workflow-step + .workflow-step {
431
- border-top: 1px solid var(--border);
432
- }
433
-
434
- .step-num {
435
- flex-shrink: 0;
436
- width: 36px;
437
- height: 36px;
438
- border-radius: 10px;
439
- background: var(--accent-soft);
440
- display: flex;
441
- align-items: center;
442
- justify-content: center;
443
- font-size: 0.85rem;
444
- font-weight: 600;
445
- color: var(--accent);
446
- }
447
-
448
- .step-content {
449
- flex: 1;
450
- }
451
-
452
- .step-content strong {
453
- display: block;
454
- color: var(--text-heading);
455
- font-size: 0.95rem;
456
- margin-bottom: 0.15rem;
457
- }
458
-
459
- .step-content span {
460
- font-size: 0.9rem;
461
- color: var(--text);
462
- }
463
-
464
- /* ── Best Practices ── */
465
- .practices-grid {
466
- display: grid;
467
- grid-template-columns: repeat(2, 1fr);
468
- gap: 1.25rem;
469
- }
470
-
471
- .practice-card {
472
- background: var(--bg-card);
473
- border: 1px solid var(--border);
474
- border-radius: var(--radius);
475
- padding: 2rem;
476
- }
477
-
478
- .practice-card h3 {
479
- font-size: 1rem;
480
- font-weight: 600;
481
- margin-bottom: 1.25rem;
482
- display: flex;
483
- align-items: center;
484
- gap: 0.5rem;
485
- }
486
-
487
- .practice-card.do h3 { color: #6fcf97; }
488
- .practice-card.dont h3 { color: #f2836b; }
489
-
490
- .practice-card ul {
491
- list-style: none;
492
- padding: 0;
493
- margin: 0;
494
- }
495
-
496
- .practice-card ul li {
497
- font-size: 0.92rem;
498
- color: var(--text);
499
- padding: 0.5rem 0;
500
- line-height: 1.6;
501
- border-top: 1px solid var(--border);
502
- }
503
-
504
- .practice-card ul li:first-child {
505
- border-top: none;
506
- padding-top: 0;
507
- }
508
-
509
- .practice-card ul li strong {
510
- color: var(--text-heading);
511
- }
512
-
513
- /* ── FAQ ── */
514
- .faq-list {
515
- display: flex;
516
- flex-direction: column;
517
- }
518
-
519
- .faq-item {
520
- border-bottom: 1px solid var(--border);
521
- }
522
-
523
- .faq-item:first-child {
524
- border-top: 1px solid var(--border);
525
- }
526
-
527
- .faq-question {
528
- width: 100%;
529
- background: none;
530
- border: none;
531
- padding: 1.25rem 0;
532
- font-size: 1rem;
533
- font-weight: 500;
534
- color: var(--text-heading);
535
- text-align: left;
536
- cursor: pointer;
537
- display: flex;
538
- justify-content: space-between;
539
- align-items: center;
540
- font-family: inherit;
541
- line-height: 1.5;
542
- }
543
-
544
- .faq-question:hover { color: #fff; }
545
-
546
- .faq-question svg {
547
- flex-shrink: 0;
548
- width: 18px;
549
- height: 18px;
550
- stroke: var(--text-secondary);
551
- fill: none;
552
- stroke-width: 2;
553
- transition: transform 0.3s ease;
554
- margin-left: 1rem;
555
- }
556
-
557
- .faq-item.open .faq-question svg {
558
- transform: rotate(45deg);
559
- }
560
-
561
- .faq-answer {
562
- max-height: 0;
563
- overflow: hidden;
564
- transition: max-height 0.4s cubic-bezier(0.16, 1, 0.3, 1), padding 0.3s ease;
565
- }
566
-
567
- .faq-item.open .faq-answer {
568
- max-height: 300px;
569
- padding-bottom: 1.25rem;
570
- }
571
-
572
- .faq-answer p {
573
- font-size: 0.95rem;
574
- color: var(--text);
575
- line-height: 1.7;
576
- }
577
-
578
- /* ── Prev/Next Navigation ── */
579
- .docs-nav-footer {
580
- display: flex;
581
- justify-content: space-between;
582
- gap: 1.25rem;
583
- margin-top: 4rem;
584
- padding-top: 2rem;
585
- border-top: 1px solid var(--border);
586
- }
587
-
588
- .nav-link {
589
- display: flex;
590
- flex-direction: column;
591
- gap: 0.25rem;
592
- padding: 1rem 1.5rem;
593
- background: var(--bg-card);
594
- border: 1px solid var(--border);
595
- border-radius: var(--radius);
596
- text-decoration: none;
597
- transition: border-color 0.2s, box-shadow 0.2s;
598
- min-width: 0;
599
- flex: 1;
600
- max-width: 50%;
601
- }
602
-
603
- .nav-link:hover {
604
- border-color: var(--border-hover);
605
- box-shadow: 0 0 30px rgba(123,140,255,0.04);
606
- }
607
-
608
- .nav-link.next {
609
- text-align: right;
610
- margin-left: auto;
611
- }
612
-
613
- .nav-link .nav-label {
614
- font-size: 0.75rem;
615
- font-weight: 500;
616
- color: var(--text-secondary);
617
- text-transform: uppercase;
618
- letter-spacing: 0.05em;
619
- }
620
-
621
- .nav-link .nav-title {
622
- font-size: 0.95rem;
623
- font-weight: 600;
624
- color: var(--accent);
625
- }
626
-
627
- /* ── Page Footer ── */
628
- .page-footer {
629
- padding: 2rem 0;
630
- margin-top: 3rem;
631
- border-top: 1px solid var(--border);
632
- text-align: center;
633
- }
634
-
635
- .page-footer p {
636
- font-size: 0.85rem;
637
- color: var(--text-secondary);
638
- }
639
-
640
- /* ── Animations ── */
641
- @keyframes fadeUp {
642
- from { opacity: 0; transform: translateY(20px); }
643
- to { opacity: 1; transform: translateY(0); }
644
- }
645
-
646
- .fade-in {
647
- animation: fadeUp 0.6s ease-out;
648
- }
649
-
650
- /* ── Responsive ── */
651
- @media (max-width: 768px) {
652
- .docs-sidebar {
653
- transform: translateX(-100%);
654
- transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
655
- z-index: 300;
656
- width: 280px;
657
- }
658
-
659
- .docs-sidebar.open {
660
- transform: translateX(0);
661
- }
662
-
663
- .mobile-header {
664
- display: flex;
665
- }
666
-
667
- .docs-content {
668
- margin-left: 0;
669
- padding: 72px 1.25rem 3rem;
670
- max-width: 100%;
671
- }
672
-
673
- .agent-grid { grid-template-columns: 1fr; }
674
- .comm-grid { grid-template-columns: 1fr; }
675
- .practices-grid { grid-template-columns: 1fr; }
676
-
677
- .docs-nav-footer {
678
- flex-direction: column;
679
- }
680
-
681
- .nav-link {
682
- max-width: 100%;
683
- }
684
-
685
- .nav-link.next {
686
- text-align: left;
687
- }
688
- }