@conversionpros/aiva 1.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 (152) hide show
  1. package/README.md +148 -0
  2. package/auto-deploy.js +190 -0
  3. package/bin/aiva.js +81 -0
  4. package/cli-sync.js +126 -0
  5. package/d2a-prompt-template.txt +106 -0
  6. package/diagnostics-api.js +304 -0
  7. package/docs/ara-dedup-fix-scope.md +112 -0
  8. package/docs/ara-fix-round2-scope.md +61 -0
  9. package/docs/ara-greeting-fix-scope.md +70 -0
  10. package/docs/calendar-date-fix-scope.md +28 -0
  11. package/docs/getting-started.md +115 -0
  12. package/docs/network-architecture-rollout-scope.md +43 -0
  13. package/docs/scope-google-oauth-integration.md +351 -0
  14. package/docs/settings-page-scope.md +50 -0
  15. package/docs/xai-imagine-scope.md +116 -0
  16. package/docs/xai-voice-integration-scope.md +115 -0
  17. package/docs/xai-voice-tools-scope.md +165 -0
  18. package/email-router.js +512 -0
  19. package/follow-up-handler.js +606 -0
  20. package/gateway-monitor.js +158 -0
  21. package/google-email.js +379 -0
  22. package/google-oauth.js +310 -0
  23. package/grok-imagine.js +97 -0
  24. package/health-reporter.js +287 -0
  25. package/invisible-prefix-base.txt +206 -0
  26. package/invisible-prefix-owner.txt +26 -0
  27. package/invisible-prefix-slim.txt +10 -0
  28. package/invisible-prefix.txt +43 -0
  29. package/knowledge-base.js +472 -0
  30. package/lib/cli.js +19 -0
  31. package/lib/config.js +124 -0
  32. package/lib/health.js +57 -0
  33. package/lib/process.js +207 -0
  34. package/lib/server.js +42 -0
  35. package/lib/setup.js +472 -0
  36. package/meta-capi.js +206 -0
  37. package/meta-leads.js +411 -0
  38. package/notion-oauth.js +323 -0
  39. package/package.json +61 -0
  40. package/public/agent-config.html +241 -0
  41. package/public/aiva-avatar-anime.png +0 -0
  42. package/public/css/docs.css.bak +688 -0
  43. package/public/css/onboarding.css +543 -0
  44. package/public/diagrams/claude-subscription-pool.html +329 -0
  45. package/public/diagrams/claude-subscription-pool.png +0 -0
  46. package/public/docs-icon.png +0 -0
  47. package/public/escalation.html +237 -0
  48. package/public/group-config.html +300 -0
  49. package/public/icon-192.png +0 -0
  50. package/public/icon-512.png +0 -0
  51. package/public/icons/agents.svg +1 -0
  52. package/public/icons/attach.svg +1 -0
  53. package/public/icons/characters.svg +1 -0
  54. package/public/icons/chat.svg +1 -0
  55. package/public/icons/docs.svg +1 -0
  56. package/public/icons/heartbeat.svg +1 -0
  57. package/public/icons/messages.svg +1 -0
  58. package/public/icons/mic.svg +1 -0
  59. package/public/icons/notes.svg +1 -0
  60. package/public/icons/settings.svg +1 -0
  61. package/public/icons/tasks.svg +1 -0
  62. package/public/images/onboarding/p0-communication-layer.png +0 -0
  63. package/public/images/onboarding/p0-infinite-surface.png +0 -0
  64. package/public/images/onboarding/p0-learning-model.png +0 -0
  65. package/public/images/onboarding/p0-meet-aiva.png +0 -0
  66. package/public/images/onboarding/p4-contact-intelligence.png +0 -0
  67. package/public/images/onboarding/p4-context-compounds.png +0 -0
  68. package/public/images/onboarding/p4-message-router.png +0 -0
  69. package/public/images/onboarding/p4-per-contact-rules.png +0 -0
  70. package/public/images/onboarding/p4-send-messages.png +0 -0
  71. package/public/images/onboarding/p6-be-precise.png +0 -0
  72. package/public/images/onboarding/p6-review-escalations.png +0 -0
  73. package/public/images/onboarding/p6-voice-input.png +0 -0
  74. package/public/images/onboarding/p7-completion.png +0 -0
  75. package/public/index.html +11594 -0
  76. package/public/js/onboarding.js +699 -0
  77. package/public/manifest.json +24 -0
  78. package/public/messages-v2.html +2824 -0
  79. package/public/permission-approve.html.bak +107 -0
  80. package/public/permissions.html +150 -0
  81. package/public/styles/design-system.css +68 -0
  82. package/router-db.js +604 -0
  83. package/router-utils.js +28 -0
  84. package/router-v2/adapters/imessage.js +191 -0
  85. package/router-v2/adapters/quo.js +82 -0
  86. package/router-v2/adapters/whatsapp.js +192 -0
  87. package/router-v2/contact-manager.js +234 -0
  88. package/router-v2/conversation-engine.js +498 -0
  89. package/router-v2/data/knowledge-base.json +176 -0
  90. package/router-v2/data/router-v2.db +0 -0
  91. package/router-v2/data/router-v2.db-shm +0 -0
  92. package/router-v2/data/router-v2.db-wal +0 -0
  93. package/router-v2/data/router.db +0 -0
  94. package/router-v2/db.js +457 -0
  95. package/router-v2/escalation-bridge.js +540 -0
  96. package/router-v2/follow-up-engine.js +347 -0
  97. package/router-v2/index.js +441 -0
  98. package/router-v2/ingestion.js +213 -0
  99. package/router-v2/knowledge-base.js +231 -0
  100. package/router-v2/lead-qualifier.js +152 -0
  101. package/router-v2/learning-loop.js +202 -0
  102. package/router-v2/outbound-sender.js +160 -0
  103. package/router-v2/package.json +13 -0
  104. package/router-v2/permission-gate.js +86 -0
  105. package/router-v2/playbook.js +177 -0
  106. package/router-v2/prompts/base.js +52 -0
  107. package/router-v2/prompts/first-contact.js +38 -0
  108. package/router-v2/prompts/lead-qualification.js +37 -0
  109. package/router-v2/prompts/scheduling.js +72 -0
  110. package/router-v2/prompts/style-overrides.js +22 -0
  111. package/router-v2/scheduler.js +301 -0
  112. package/router-v2/scripts/migrate-v1-to-v2.js +215 -0
  113. package/router-v2/scripts/seed-faq.js +67 -0
  114. package/router-v2/seed-knowledge-base.js +39 -0
  115. package/router-v2/utils/ai.js +129 -0
  116. package/router-v2/utils/phone.js +52 -0
  117. package/router-v2/utils/response-validator.js +98 -0
  118. package/router-v2/utils/sanitize.js +222 -0
  119. package/router.js +5005 -0
  120. package/routes/google-calendar.js +186 -0
  121. package/scripts/deploy.sh +62 -0
  122. package/scripts/macos-calendar.sh +232 -0
  123. package/scripts/onboard-device.sh +466 -0
  124. package/server.js +5131 -0
  125. package/start.sh +24 -0
  126. package/templates/AGENTS.md +548 -0
  127. package/templates/IDENTITY.md +15 -0
  128. package/templates/docs-agents.html +132 -0
  129. package/templates/docs-app.html +130 -0
  130. package/templates/docs-home.html +83 -0
  131. package/templates/docs-imessage.html +121 -0
  132. package/templates/docs-tasks.html +123 -0
  133. package/templates/docs-tips.html +175 -0
  134. package/templates/getting-started.html +809 -0
  135. package/templates/invisible-prefix-base.txt +171 -0
  136. package/templates/invisible-prefix-owner.txt +282 -0
  137. package/templates/invisible-prefix.txt +338 -0
  138. package/templates/manifest.json +61 -0
  139. package/templates/memory-org/clients.md +7 -0
  140. package/templates/memory-org/credentials.md +9 -0
  141. package/templates/memory-org/devices.md +7 -0
  142. package/templates/updates.html +464 -0
  143. package/templates/workspace/AGENTS.md.tmpl +161 -0
  144. package/templates/workspace/HEARTBEAT.md.tmpl +17 -0
  145. package/templates/workspace/IDENTITY.md.tmpl +15 -0
  146. package/templates/workspace/MEMORY.md.tmpl +16 -0
  147. package/templates/workspace/SOUL.md.tmpl +51 -0
  148. package/templates/workspace/USER.md.tmpl +25 -0
  149. package/tts-proxy.js +96 -0
  150. package/voice-call-local.js +731 -0
  151. package/voice-call.js +732 -0
  152. package/wa-listener.js +354 -0
@@ -0,0 +1,688 @@
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
+ }