@rubytech/create-maxy 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 (181) hide show
  1. package/dist/index.js +428 -0
  2. package/package.json +31 -0
  3. package/payload/maxy/.env.example +12 -0
  4. package/payload/maxy/app/admin/components/ActivityTimeline.tsx +348 -0
  5. package/payload/maxy/app/admin/components/MarkdownMessage.tsx +40 -0
  6. package/payload/maxy/app/api/admin/chat/route.ts +72 -0
  7. package/payload/maxy/app/api/admin/logs/route.ts +40 -0
  8. package/payload/maxy/app/api/admin/session/route.ts +74 -0
  9. package/payload/maxy/app/api/chat/route.ts +72 -0
  10. package/payload/maxy/app/api/health/route.ts +26 -0
  11. package/payload/maxy/app/api/onboarding/claude-auth/route.ts +216 -0
  12. package/payload/maxy/app/api/onboarding/set-pin/route.ts +44 -0
  13. package/payload/maxy/app/api/session/route.ts +51 -0
  14. package/payload/maxy/app/api/telegram/webhook/route.ts +107 -0
  15. package/payload/maxy/app/apple-icon.png +0 -0
  16. package/payload/maxy/app/bot/page.tsx +373 -0
  17. package/payload/maxy/app/favicon.ico +0 -0
  18. package/payload/maxy/app/globals.css +1681 -0
  19. package/payload/maxy/app/layout.tsx +58 -0
  20. package/payload/maxy/app/lib/claude-agent.ts +503 -0
  21. package/payload/maxy/app/og/layout.tsx +15 -0
  22. package/payload/maxy/app/og/page.tsx +252 -0
  23. package/payload/maxy/app/page.tsx +594 -0
  24. package/payload/maxy/app/privacy/page.tsx +72 -0
  25. package/payload/maxy/app/public/page.tsx +266 -0
  26. package/payload/maxy/next.config.mjs +26 -0
  27. package/payload/maxy/package-lock.json +2198 -0
  28. package/payload/maxy/package.json +25 -0
  29. package/payload/maxy/proxy.ts +41 -0
  30. package/payload/maxy/public/brand/claude.png +0 -0
  31. package/payload/maxy/public/brand/maxy-black.png +0 -0
  32. package/payload/maxy/public/brand/maxy.png +0 -0
  33. package/payload/maxy/public/favicon.ico +0 -0
  34. package/payload/maxy/public/og-landscape.png +0 -0
  35. package/payload/maxy/public/og-portrait.png +0 -0
  36. package/payload/maxy/public/og-square.png +0 -0
  37. package/payload/maxy/public/pi-5.jpg +0 -0
  38. package/payload/maxy/public/robots.txt +5 -0
  39. package/payload/maxy/tsconfig.json +41 -0
  40. package/payload/maxy/tsconfig.tsbuildinfo +1 -0
  41. package/payload/maxy/ui.md +28 -0
  42. package/payload/platform/config/cloudflared.yml +17 -0
  43. package/payload/platform/knowledge/maxy.md +161 -0
  44. package/payload/platform/neo4j/schema.cypher +108 -0
  45. package/payload/platform/package-lock.json +1835 -0
  46. package/payload/platform/package.json +17 -0
  47. package/payload/platform/plugins/admin/PLUGIN.md +24 -0
  48. package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +56 -0
  49. package/payload/platform/plugins/admin/hooks/session-start.sh +20 -0
  50. package/payload/platform/plugins/admin/mcp/dist/index.d.ts +2 -0
  51. package/payload/platform/plugins/admin/mcp/dist/index.d.ts.map +1 -0
  52. package/payload/platform/plugins/admin/mcp/dist/index.js +149 -0
  53. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -0
  54. package/payload/platform/plugins/admin/mcp/package.json +18 -0
  55. package/payload/platform/plugins/anthropic/PLUGIN.md +30 -0
  56. package/payload/platform/plugins/anthropic/references/setup-guide.md +146 -0
  57. package/payload/platform/plugins/business-assistant/PLUGIN.md +46 -0
  58. package/payload/platform/plugins/business-assistant/references/crm.md +112 -0
  59. package/payload/platform/plugins/business-assistant/references/document-management.md +96 -0
  60. package/payload/platform/plugins/business-assistant/references/escalation.md +126 -0
  61. package/payload/platform/plugins/business-assistant/references/invoicing.md +163 -0
  62. package/payload/platform/plugins/business-assistant/references/quoting.md +56 -0
  63. package/payload/platform/plugins/business-assistant/references/scheduling.md +127 -0
  64. package/payload/platform/plugins/cloudflare/PLUGIN.md +31 -0
  65. package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts +2 -0
  66. package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts.map +1 -0
  67. package/payload/platform/plugins/cloudflare/mcp/dist/index.js +174 -0
  68. package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -0
  69. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +45 -0
  70. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +1 -0
  71. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +256 -0
  72. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -0
  73. package/payload/platform/plugins/cloudflare/mcp/package.json +18 -0
  74. package/payload/platform/plugins/cloudflare/references/setup-guide.md +110 -0
  75. package/payload/platform/plugins/contacts/PLUGIN.md +18 -0
  76. package/payload/platform/plugins/contacts/mcp/dist/index.d.ts +2 -0
  77. package/payload/platform/plugins/contacts/mcp/dist/index.d.ts.map +1 -0
  78. package/payload/platform/plugins/contacts/mcp/dist/index.js +182 -0
  79. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -0
  80. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts +5 -0
  81. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts.map +1 -0
  82. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +34 -0
  83. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -0
  84. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts +19 -0
  85. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts.map +1 -0
  86. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +68 -0
  87. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -0
  88. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts +22 -0
  89. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts.map +1 -0
  90. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js +46 -0
  91. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js.map +1 -0
  92. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts +20 -0
  93. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -0
  94. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +56 -0
  95. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -0
  96. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts +13 -0
  97. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts.map +1 -0
  98. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js +54 -0
  99. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js.map +1 -0
  100. package/payload/platform/plugins/contacts/mcp/package.json +19 -0
  101. package/payload/platform/plugins/documents/PLUGIN.md +12 -0
  102. package/payload/platform/plugins/documents/mcp/dist/index.d.ts +2 -0
  103. package/payload/platform/plugins/documents/mcp/dist/index.d.ts.map +1 -0
  104. package/payload/platform/plugins/documents/mcp/dist/index.js +82 -0
  105. package/payload/platform/plugins/documents/mcp/dist/index.js.map +1 -0
  106. package/payload/platform/plugins/documents/mcp/package.json +20 -0
  107. package/payload/platform/plugins/memory/PLUGIN.md +17 -0
  108. package/payload/platform/plugins/memory/mcp/dist/index.d.ts +2 -0
  109. package/payload/platform/plugins/memory/mcp/dist/index.d.ts.map +1 -0
  110. package/payload/platform/plugins/memory/mcp/dist/index.js +164 -0
  111. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -0
  112. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts +3 -0
  113. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts.map +1 -0
  114. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js +29 -0
  115. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js.map +1 -0
  116. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts +5 -0
  117. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts.map +1 -0
  118. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +34 -0
  119. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -0
  120. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts +8 -0
  121. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts.map +1 -0
  122. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js +71 -0
  123. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js.map +1 -0
  124. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts +24 -0
  125. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -0
  126. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +125 -0
  127. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -0
  128. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +18 -0
  129. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -0
  130. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +56 -0
  131. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -0
  132. package/payload/platform/plugins/memory/mcp/package.json +19 -0
  133. package/payload/platform/plugins/sales/PLUGIN.md +65 -0
  134. package/payload/platform/plugins/sales/references/close-tracking.md +76 -0
  135. package/payload/platform/plugins/sales/references/closing-framework.md +108 -0
  136. package/payload/platform/plugins/sales/references/comparisons.md +99 -0
  137. package/payload/platform/plugins/sales/references/competitive-positioning.md +51 -0
  138. package/payload/platform/plugins/sales/references/faq.md +62 -0
  139. package/payload/platform/plugins/sales/references/objection-handling.md +157 -0
  140. package/payload/platform/plugins/sales/references/pricing.md +71 -0
  141. package/payload/platform/plugins/sales/references/waitlist.md +23 -0
  142. package/payload/platform/plugins/scheduling/PLUGIN.md +12 -0
  143. package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts +2 -0
  144. package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts.map +1 -0
  145. package/payload/platform/plugins/scheduling/mcp/dist/index.js +13 -0
  146. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -0
  147. package/payload/platform/plugins/scheduling/mcp/package.json +18 -0
  148. package/payload/platform/plugins/telegram/PLUGIN.md +31 -0
  149. package/payload/platform/plugins/telegram/mcp/dist/index.d.ts +2 -0
  150. package/payload/platform/plugins/telegram/mcp/dist/index.d.ts.map +1 -0
  151. package/payload/platform/plugins/telegram/mcp/dist/index.js +101 -0
  152. package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -0
  153. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts +27 -0
  154. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts.map +1 -0
  155. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js +41 -0
  156. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js.map +1 -0
  157. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts +16 -0
  158. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts.map +1 -0
  159. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +62 -0
  160. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -0
  161. package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts +20 -0
  162. package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts.map +1 -0
  163. package/payload/platform/plugins/telegram/mcp/dist/tools/message.js +34 -0
  164. package/payload/platform/plugins/telegram/mcp/dist/tools/message.js.map +1 -0
  165. package/payload/platform/plugins/telegram/mcp/package.json +19 -0
  166. package/payload/platform/plugins/telegram/references/setup-guide.md +50 -0
  167. package/payload/platform/plugins/web/PLUGIN.md +12 -0
  168. package/payload/platform/plugins/web/mcp/dist/index.d.ts +2 -0
  169. package/payload/platform/plugins/web/mcp/dist/index.d.ts.map +1 -0
  170. package/payload/platform/plugins/web/mcp/dist/index.js +12 -0
  171. package/payload/platform/plugins/web/mcp/dist/index.js.map +1 -0
  172. package/payload/platform/plugins/web/mcp/package.json +18 -0
  173. package/payload/platform/scripts/seed-neo4j.sh +73 -0
  174. package/payload/platform/scripts/setup.sh +177 -0
  175. package/payload/platform/scripts/start.sh +62 -0
  176. package/payload/platform/templates/account.json +4 -0
  177. package/payload/platform/templates/agents/admin/IDENTITY.md +28 -0
  178. package/payload/platform/templates/agents/admin/SOUL.md +1 -0
  179. package/payload/platform/templates/agents/public/IDENTITY.md +21 -0
  180. package/payload/platform/templates/agents/public/SOUL.md +1 -0
  181. package/payload/platform/tsconfig.base.json +18 -0
@@ -0,0 +1,1681 @@
1
+ /* ============================================
2
+ Maxy — Global Styles
3
+ Aesthetic: Refined minimalism. Warm. Quiet.
4
+ Reference: cal.com clarity + warmth
5
+ ============================================ */
6
+
7
+ /* --- Reset --- */
8
+ *, *::before, *::after {
9
+ box-sizing: border-box;
10
+ margin: 0;
11
+ padding: 0;
12
+ }
13
+
14
+ /* --- Variables --- */
15
+ :root {
16
+ /* Palette */
17
+ --bg: #FAFAF8;
18
+ --bg-chat: #FFFFFF;
19
+ --surface: #F5F2ED;
20
+ --surface-cool: #EEF1F4;
21
+ --text: #1A1A1A;
22
+ --text-secondary: #6B6B6B;
23
+ --text-tertiary: #9A9A9A;
24
+ --border: rgba(0, 0, 0, 0.06);
25
+ --border-strong: rgba(0, 0, 0, 0.1);
26
+ --sage: #7C8C72;
27
+ --sage-hover: #6A7A62;
28
+ --sage-subtle: rgba(124, 140, 114, 0.08);
29
+ --sage-glow: rgba(124, 140, 114, 0.15);
30
+ --maxy-bubble: #F5F2ED;
31
+ --visitor-bubble: #E8ECF0;
32
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
33
+ --shadow-md: 0 2px 8px rgba(0, 0, 0, 0.06);
34
+ --shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.08);
35
+ --radius-sm: 6px;
36
+ --radius-md: 12px;
37
+ --radius-lg: 20px;
38
+ --radius-full: 9999px;
39
+
40
+ /* Typography */
41
+ --font-display: 'Cormorant', Georgia, serif;
42
+ --font-body: 'DM Sans', -apple-system, BlinkMacSystemFont, sans-serif;
43
+ }
44
+
45
+ /* --- Base --- */
46
+ html {
47
+ scroll-behavior: smooth;
48
+ -webkit-font-smoothing: antialiased;
49
+ -moz-osx-font-smoothing: grayscale;
50
+ }
51
+
52
+ body {
53
+ font-family: var(--font-body);
54
+ font-size: 16px;
55
+ line-height: 1.6;
56
+ color: var(--text);
57
+ background: var(--bg);
58
+ overflow-x: hidden;
59
+ }
60
+
61
+ a {
62
+ color: var(--sage);
63
+ text-decoration: none;
64
+ transition: color 0.2s;
65
+ }
66
+
67
+ a:hover {
68
+ color: var(--sage-hover);
69
+ }
70
+
71
+ /* ============================================
72
+ CHAT PAGE (maxy.chat — the front door)
73
+ ============================================ */
74
+
75
+ .chat-page {
76
+ display: flex;
77
+ flex-direction: column;
78
+ height: 100dvh;
79
+ max-width: 680px;
80
+ margin: 0 auto;
81
+ padding: 0 20px;
82
+ }
83
+
84
+ /* --- Tagline --- */
85
+ .chat-header {
86
+ padding: 48px 0 24px;
87
+ text-align: center;
88
+ flex-shrink: 0;
89
+ }
90
+
91
+ .chat-logo {
92
+ width: 64px;
93
+ height: 64px;
94
+ object-fit: contain;
95
+ margin-bottom: 16px;
96
+ }
97
+
98
+ .chat-tagline {
99
+ font-family: var(--font-display);
100
+ font-weight: 300;
101
+ font-size: clamp(28px, 5vw, 42px);
102
+ color: var(--text);
103
+ letter-spacing: -0.01em;
104
+ line-height: 1.2;
105
+ margin-bottom: 12px;
106
+ }
107
+
108
+ .chat-intro {
109
+ font-size: 15px;
110
+ color: var(--text-secondary);
111
+ line-height: 1.6;
112
+ margin: 0 0 12px;
113
+ }
114
+
115
+ .chat-trust {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ gap: 8px;
120
+ font-size: 13px;
121
+ color: var(--text-tertiary);
122
+ }
123
+
124
+ .chat-trust-sep {
125
+ opacity: 0.4;
126
+ }
127
+
128
+ /* --- Messages area --- */
129
+ .chat-messages {
130
+ flex: 1;
131
+ overflow-y: auto;
132
+ padding: 16px 0;
133
+ display: flex;
134
+ flex-direction: column;
135
+ gap: 12px;
136
+ scrollbar-width: thin;
137
+ scrollbar-color: var(--border-strong) transparent;
138
+ }
139
+
140
+ .chat-messages::-webkit-scrollbar {
141
+ width: 4px;
142
+ }
143
+
144
+ .chat-messages::-webkit-scrollbar-track {
145
+ background: transparent;
146
+ }
147
+
148
+ .chat-messages::-webkit-scrollbar-thumb {
149
+ background: var(--border-strong);
150
+ border-radius: var(--radius-full);
151
+ }
152
+
153
+ /* --- Message bubbles --- */
154
+ .message {
155
+ display: flex;
156
+ animation: messageIn 0.3s ease-out;
157
+ }
158
+
159
+ .message.maxy {
160
+ justify-content: flex-start;
161
+ }
162
+
163
+ .message.visitor {
164
+ justify-content: flex-end;
165
+ }
166
+
167
+ .bubble {
168
+ max-width: 85%;
169
+ padding: 12px 16px;
170
+ border-radius: var(--radius-lg);
171
+ font-size: 15px;
172
+ line-height: 1.55;
173
+ word-wrap: break-word;
174
+ white-space: pre-wrap;
175
+ }
176
+
177
+ .message.maxy .bubble {
178
+ background: var(--maxy-bubble);
179
+ color: var(--text);
180
+ border-bottom-left-radius: var(--radius-sm);
181
+ }
182
+
183
+ .message.visitor .bubble {
184
+ background: var(--visitor-bubble);
185
+ color: var(--text);
186
+ border-bottom-right-radius: var(--radius-sm);
187
+ }
188
+
189
+ /* --- Typing indicator --- */
190
+ .typing-indicator {
191
+ display: flex;
192
+ align-items: center;
193
+ gap: 4px;
194
+ padding: 14px 18px;
195
+ }
196
+
197
+ .typing-dot {
198
+ width: 6px;
199
+ height: 6px;
200
+ border-radius: 50%;
201
+ background: var(--text-tertiary);
202
+ animation: typingPulse 1.4s ease-in-out infinite;
203
+ }
204
+
205
+ .typing-dot:nth-child(2) {
206
+ animation-delay: 0.2s;
207
+ }
208
+
209
+ .typing-dot:nth-child(3) {
210
+ animation-delay: 0.4s;
211
+ }
212
+
213
+ /* --- Suggestion chips --- */
214
+ .chat-suggestions {
215
+ display: flex;
216
+ flex-wrap: wrap;
217
+ gap: 8px;
218
+ padding: 4px 0 8px;
219
+ animation: messageIn 0.3s ease-out;
220
+ }
221
+
222
+ .chat-suggestion {
223
+ background: var(--bg-chat);
224
+ border: 1px solid var(--border-strong);
225
+ border-radius: var(--radius-full);
226
+ padding: 8px 14px;
227
+ font-family: var(--font-body);
228
+ font-size: 13px;
229
+ color: var(--text-secondary);
230
+ cursor: pointer;
231
+ transition: border-color 0.2s, color 0.2s;
232
+ }
233
+
234
+ .chat-suggestion:hover {
235
+ border-color: rgba(124, 140, 114, 0.3);
236
+ color: var(--text);
237
+ }
238
+
239
+ /* --- Input area --- */
240
+ .chat-input-area {
241
+ flex-shrink: 0;
242
+ padding: 16px 0 24px;
243
+ }
244
+
245
+ /* --- Actions row (below input) --- */
246
+ .chat-actions {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: 16px;
250
+ padding: 8px 4px 0;
251
+ }
252
+
253
+ .chat-action {
254
+ display: inline-flex;
255
+ align-items: center;
256
+ gap: 6px;
257
+ background: none;
258
+ border: none;
259
+ font-family: var(--font-body);
260
+ font-size: 12px;
261
+ color: var(--text-tertiary);
262
+ cursor: pointer;
263
+ padding: 0;
264
+ transition: color 0.15s;
265
+ }
266
+
267
+ .chat-action:hover {
268
+ color: var(--text-secondary);
269
+ }
270
+
271
+ .chat-form {
272
+ display: flex;
273
+ align-items: center;
274
+ gap: 8px;
275
+ background: var(--bg-chat);
276
+ border: 1px solid var(--border-strong);
277
+ border-radius: var(--radius-full);
278
+ padding: 6px 6px 6px 20px;
279
+ transition: border-color 0.2s, box-shadow 0.2s;
280
+ }
281
+
282
+ .chat-form:focus-within {
283
+ border-color: rgba(124, 140, 114, 0.3);
284
+ box-shadow: 0 0 0 3px var(--sage-subtle);
285
+ }
286
+
287
+ .chat-input {
288
+ flex: 1;
289
+ border: none;
290
+ outline: none;
291
+ font-family: var(--font-body);
292
+ font-size: 15px;
293
+ color: var(--text);
294
+ background: transparent;
295
+ line-height: 1.4;
296
+ }
297
+
298
+ .chat-input::placeholder {
299
+ color: var(--text-tertiary);
300
+ }
301
+
302
+ .chat-send {
303
+ display: flex;
304
+ align-items: center;
305
+ justify-content: center;
306
+ width: 38px;
307
+ height: 38px;
308
+ border-radius: 50%;
309
+ border: none;
310
+ background: var(--sage);
311
+ color: white;
312
+ cursor: pointer;
313
+ flex-shrink: 0;
314
+ transition: background 0.2s, transform 0.1s;
315
+ }
316
+
317
+ .chat-send:hover {
318
+ background: var(--sage-hover);
319
+ }
320
+
321
+ .chat-send:active {
322
+ transform: scale(0.95);
323
+ }
324
+
325
+ .chat-send:disabled {
326
+ opacity: 0.4;
327
+ cursor: not-allowed;
328
+ }
329
+
330
+ .chat-send svg {
331
+ width: 16px;
332
+ height: 16px;
333
+ }
334
+
335
+ /* --- Footer link --- */
336
+ .chat-footer {
337
+ text-align: center;
338
+ padding: 0 0 20px;
339
+ flex-shrink: 0;
340
+ }
341
+
342
+ .chat-footer a {
343
+ font-size: 13px;
344
+ color: var(--text-tertiary);
345
+ transition: color 0.2s;
346
+ }
347
+
348
+ .chat-footer a:hover {
349
+ color: var(--sage);
350
+ }
351
+
352
+ /* ============================================
353
+ PRODUCT PAGE (maxy.bot)
354
+ ============================================ */
355
+
356
+ .product-page {
357
+ max-width: 1100px;
358
+ margin: 0 auto;
359
+ padding: 0 24px;
360
+ }
361
+
362
+ /* --- Hero --- */
363
+ .hero {
364
+ padding: 120px 0 80px;
365
+ text-align: center;
366
+ }
367
+
368
+ .hero-logo {
369
+ width: 80px;
370
+ height: 80px;
371
+ object-fit: contain;
372
+ margin-bottom: 24px;
373
+ }
374
+
375
+ .hero-tagline {
376
+ font-family: var(--font-display);
377
+ font-weight: 300;
378
+ font-size: clamp(36px, 6vw, 56px);
379
+ color: var(--text);
380
+ letter-spacing: -0.02em;
381
+ line-height: 1.15;
382
+ margin-bottom: 24px;
383
+ }
384
+
385
+ .hero-description {
386
+ font-size: clamp(17px, 2.5vw, 19px);
387
+ color: var(--text-secondary);
388
+ line-height: 1.7;
389
+ max-width: 520px;
390
+ margin: 0 auto 40px;
391
+ }
392
+
393
+ .hero-ctas {
394
+ display: flex;
395
+ gap: 12px;
396
+ justify-content: center;
397
+ flex-wrap: wrap;
398
+ }
399
+
400
+ /* --- Buttons --- */
401
+ .btn {
402
+ display: inline-flex;
403
+ align-items: center;
404
+ gap: 8px;
405
+ padding: 12px 24px;
406
+ border-radius: var(--radius-full);
407
+ font-family: var(--font-body);
408
+ font-size: 15px;
409
+ font-weight: 500;
410
+ cursor: pointer;
411
+ transition: all 0.2s;
412
+ border: none;
413
+ text-decoration: none;
414
+ }
415
+
416
+ .btn-primary {
417
+ background: var(--sage);
418
+ color: white;
419
+ }
420
+
421
+ .btn-primary:hover {
422
+ background: var(--sage-hover);
423
+ color: white;
424
+ }
425
+
426
+ .btn-secondary {
427
+ background: transparent;
428
+ color: var(--text);
429
+ border: 1px solid var(--border-strong);
430
+ }
431
+
432
+ .btn-secondary:hover {
433
+ border-color: var(--sage);
434
+ color: var(--sage);
435
+ }
436
+
437
+ /* --- Sections --- */
438
+ .section {
439
+ padding: 64px 0;
440
+ border-top: 1px solid var(--border);
441
+ }
442
+
443
+ .section-label {
444
+ font-size: 12px;
445
+ font-weight: 500;
446
+ text-transform: uppercase;
447
+ letter-spacing: 0.1em;
448
+ color: var(--sage);
449
+ margin-bottom: 16px;
450
+ }
451
+
452
+ .section-heading {
453
+ font-family: var(--font-display);
454
+ font-weight: 400;
455
+ font-size: clamp(26px, 4vw, 36px);
456
+ color: var(--text);
457
+ letter-spacing: -0.01em;
458
+ line-height: 1.25;
459
+ margin-bottom: 24px;
460
+ }
461
+
462
+ .section-text {
463
+ font-size: 16px;
464
+ color: var(--text-secondary);
465
+ line-height: 1.7;
466
+ margin-bottom: 16px;
467
+ }
468
+
469
+ /* --- How it works --- */
470
+ .steps {
471
+ display: flex;
472
+ flex-direction: column;
473
+ gap: 32px;
474
+ margin-top: 32px;
475
+ }
476
+
477
+ .step {
478
+ display: flex;
479
+ gap: 20px;
480
+ align-items: flex-start;
481
+ }
482
+
483
+ .step-number {
484
+ width: 36px;
485
+ height: 36px;
486
+ border-radius: 50%;
487
+ background: var(--sage-subtle);
488
+ color: var(--sage);
489
+ display: flex;
490
+ align-items: center;
491
+ justify-content: center;
492
+ font-size: 14px;
493
+ font-weight: 500;
494
+ flex-shrink: 0;
495
+ margin-top: 2px;
496
+ }
497
+
498
+ .step-content h3 {
499
+ font-family: var(--font-body);
500
+ font-size: 16px;
501
+ font-weight: 500;
502
+ color: var(--text);
503
+ margin-bottom: 4px;
504
+ }
505
+
506
+ .step-content p {
507
+ font-size: 15px;
508
+ color: var(--text-secondary);
509
+ line-height: 1.6;
510
+ }
511
+
512
+ /* --- Before / After --- */
513
+ .before-after-layout {
514
+ display: flex;
515
+ flex-direction: column;
516
+ margin-top: 32px;
517
+ }
518
+
519
+ .section-image {
520
+ max-width: 480px;
521
+ margin: 0 auto 32px;
522
+ }
523
+
524
+ .section-image img {
525
+ width: 100%;
526
+ border-radius: var(--radius-md);
527
+ object-fit: cover;
528
+ }
529
+
530
+ .scenarios {
531
+ display: flex;
532
+ flex-direction: column;
533
+ gap: 24px;
534
+ }
535
+
536
+ .scenario {
537
+ background: var(--bg-chat);
538
+ border: 1px solid var(--border);
539
+ border-radius: var(--radius-md);
540
+ overflow: hidden;
541
+ }
542
+
543
+ .scenario-before,
544
+ .scenario-after {
545
+ padding: 20px 24px;
546
+ }
547
+
548
+ .scenario-before {
549
+ border-bottom: 1px solid var(--border);
550
+ }
551
+
552
+ .scenario-label {
553
+ font-size: 11px;
554
+ font-weight: 500;
555
+ text-transform: uppercase;
556
+ letter-spacing: 0.08em;
557
+ margin-bottom: 8px;
558
+ }
559
+
560
+ .scenario-before .scenario-label {
561
+ color: var(--text-tertiary);
562
+ }
563
+
564
+ .scenario-after .scenario-label {
565
+ color: var(--sage);
566
+ }
567
+
568
+ .scenario-text {
569
+ font-size: 15px;
570
+ line-height: 1.6;
571
+ color: var(--text-secondary);
572
+ }
573
+
574
+ .scenario-after {
575
+ background: var(--sage-subtle);
576
+ }
577
+
578
+ .scenario-after .scenario-text {
579
+ color: var(--text);
580
+ }
581
+
582
+ /* --- Pricing --- */
583
+ .pricing-cards {
584
+ display: grid;
585
+ grid-template-columns: 1fr 1fr;
586
+ gap: 16px;
587
+ margin-top: 32px;
588
+ }
589
+
590
+ .pricing-card {
591
+ background: var(--bg-chat);
592
+ border: 1px solid var(--border);
593
+ border-radius: var(--radius-md);
594
+ padding: 28px 24px;
595
+ }
596
+
597
+ .pricing-card.featured {
598
+ border-color: var(--sage);
599
+ box-shadow: 0 0 0 1px var(--sage);
600
+ }
601
+
602
+ .pricing-tier {
603
+ font-family: var(--font-body);
604
+ font-size: 14px;
605
+ font-weight: 500;
606
+ color: var(--text-secondary);
607
+ margin-bottom: 8px;
608
+ }
609
+
610
+ .pricing-price {
611
+ font-family: var(--font-display);
612
+ font-size: 36px;
613
+ font-weight: 400;
614
+ color: var(--text);
615
+ line-height: 1;
616
+ margin-bottom: 4px;
617
+ }
618
+
619
+ .pricing-period {
620
+ font-size: 14px;
621
+ color: var(--text-tertiary);
622
+ margin-bottom: 20px;
623
+ }
624
+
625
+ .pricing-features {
626
+ list-style: none;
627
+ display: flex;
628
+ flex-direction: column;
629
+ gap: 10px;
630
+ }
631
+
632
+ .pricing-features li {
633
+ font-size: 14px;
634
+ color: var(--text-secondary);
635
+ line-height: 1.5;
636
+ padding-left: 20px;
637
+ position: relative;
638
+ }
639
+
640
+ .pricing-features li::before {
641
+ content: '';
642
+ position: absolute;
643
+ left: 0;
644
+ top: 7px;
645
+ width: 6px;
646
+ height: 6px;
647
+ border-radius: 50%;
648
+ background: var(--sage);
649
+ opacity: 0.5;
650
+ }
651
+
652
+ .pricing-note {
653
+ margin-top: 24px;
654
+ font-size: 14px;
655
+ color: var(--text-tertiary);
656
+ line-height: 1.6;
657
+ }
658
+
659
+ /* --- Privacy --- */
660
+ .privacy-block {
661
+ background: var(--sage-subtle);
662
+ border-radius: var(--radius-md);
663
+ padding: 32px;
664
+ margin-top: 24px;
665
+ }
666
+
667
+ .privacy-block p {
668
+ font-size: 16px;
669
+ line-height: 1.7;
670
+ color: var(--text);
671
+ }
672
+
673
+ .privacy-block p + p {
674
+ margin-top: 12px;
675
+ color: var(--text-secondary);
676
+ }
677
+
678
+ /* --- FAQ --- */
679
+ .faq-list {
680
+ display: flex;
681
+ flex-direction: column;
682
+ gap: 0;
683
+ margin-top: 24px;
684
+ }
685
+
686
+ .faq-item {
687
+ border-bottom: 1px solid var(--border);
688
+ overflow: hidden;
689
+ }
690
+
691
+ .faq-question {
692
+ display: flex;
693
+ align-items: center;
694
+ justify-content: space-between;
695
+ width: 100%;
696
+ padding: 20px 0;
697
+ background: none;
698
+ border: none;
699
+ cursor: pointer;
700
+ font-family: var(--font-body);
701
+ font-size: 15px;
702
+ font-weight: 500;
703
+ color: var(--text);
704
+ text-align: left;
705
+ transition: color 0.2s;
706
+ }
707
+
708
+ .faq-question:hover {
709
+ color: var(--sage);
710
+ }
711
+
712
+ .faq-icon {
713
+ font-size: 18px;
714
+ color: var(--text-tertiary);
715
+ transition: transform 0.3s;
716
+ flex-shrink: 0;
717
+ margin-left: 16px;
718
+ }
719
+
720
+ .faq-item.open .faq-icon {
721
+ transform: rotate(45deg);
722
+ }
723
+
724
+ .faq-answer {
725
+ max-height: 0;
726
+ overflow: hidden;
727
+ transition: max-height 0.3s ease-out, padding 0.3s ease-out;
728
+ }
729
+
730
+ .faq-item.open .faq-answer {
731
+ max-height: 300px;
732
+ padding-bottom: 20px;
733
+ }
734
+
735
+ .faq-answer p {
736
+ font-size: 15px;
737
+ color: var(--text-secondary);
738
+ line-height: 1.65;
739
+ }
740
+
741
+ /* --- Final CTA --- */
742
+ .final-cta {
743
+ padding: 80px 0;
744
+ text-align: center;
745
+ border-top: 1px solid var(--border);
746
+ }
747
+
748
+ .final-cta .hero-ctas {
749
+ justify-content: center;
750
+ }
751
+
752
+ .final-tagline {
753
+ font-family: var(--font-display);
754
+ font-weight: 300;
755
+ font-size: clamp(28px, 5vw, 40px);
756
+ color: var(--text);
757
+ margin-bottom: 32px;
758
+ }
759
+
760
+ /* --- Product footer --- */
761
+ .product-footer {
762
+ padding: 32px 0;
763
+ border-top: 1px solid var(--border);
764
+ text-align: center;
765
+ }
766
+
767
+ .product-footer p {
768
+ font-size: 13px;
769
+ color: var(--text-tertiary);
770
+ }
771
+
772
+ .product-footer a {
773
+ color: var(--text-tertiary);
774
+ }
775
+
776
+ .product-footer a:hover {
777
+ color: var(--sage);
778
+ }
779
+
780
+ /* --- Hero section (text + image) --- */
781
+ .hero-section {
782
+ display: flex;
783
+ flex-direction: column;
784
+ }
785
+
786
+ .hero-image {
787
+ max-width: 600px;
788
+ margin: -32px auto 0;
789
+ padding: 0;
790
+ }
791
+
792
+ .hero-image img {
793
+ width: 100%;
794
+ border-radius: var(--radius-md);
795
+ object-fit: cover;
796
+ }
797
+
798
+ /* --- Hardware options --- */
799
+ .hardware-options {
800
+ display: grid;
801
+ grid-template-columns: 1fr 1fr;
802
+ gap: 20px;
803
+ margin-top: 32px;
804
+ }
805
+
806
+ .hardware-card {
807
+ background: var(--bg-chat);
808
+ border: 1px solid var(--border);
809
+ border-radius: var(--radius-md);
810
+ overflow: hidden;
811
+ display: flex;
812
+ flex-direction: column;
813
+ }
814
+
815
+ .hardware-card .hardware-desc {
816
+ flex: 1;
817
+ }
818
+
819
+ .hardware-card.featured {
820
+ border-color: var(--sage);
821
+ box-shadow: 0 0 0 1px var(--sage);
822
+ }
823
+
824
+ .hardware-image {
825
+ width: 100%;
826
+ aspect-ratio: 16 / 10;
827
+ overflow: hidden;
828
+ }
829
+
830
+ .hardware-image img {
831
+ width: 100%;
832
+ height: 100%;
833
+ object-fit: cover;
834
+ object-position: top;
835
+ }
836
+
837
+ .hardware-card h3 {
838
+ font-family: var(--font-body);
839
+ font-size: 16px;
840
+ font-weight: 500;
841
+ color: var(--text);
842
+ padding: 16px 20px 0;
843
+ }
844
+
845
+ .hardware-price {
846
+ font-family: var(--font-display);
847
+ font-size: 22px;
848
+ font-weight: 400;
849
+ color: var(--text);
850
+ padding: 4px 20px 0;
851
+ }
852
+
853
+ .hardware-desc {
854
+ font-size: 14px;
855
+ color: var(--text-secondary);
856
+ line-height: 1.6;
857
+ padding: 8px 20px 20px;
858
+ }
859
+
860
+ /* --- Skill packs --- */
861
+ .skill-grid {
862
+ display: grid;
863
+ grid-template-columns: repeat(3, 1fr);
864
+ gap: 12px;
865
+ margin-top: 24px;
866
+ }
867
+
868
+ .skill-card {
869
+ background: var(--bg-chat);
870
+ border: 1px solid var(--border);
871
+ border-radius: var(--radius-md);
872
+ padding: 20px 16px;
873
+ text-align: center;
874
+ cursor: pointer;
875
+ transition: border-color 0.2s, box-shadow 0.2s;
876
+ display: flex;
877
+ flex-direction: column;
878
+ align-items: center;
879
+ font-family: var(--font-body);
880
+ }
881
+
882
+ .skill-card:hover {
883
+ border-color: rgba(124, 140, 114, 0.3);
884
+ }
885
+
886
+ .skill-card-icon {
887
+ color: var(--sage);
888
+ margin-bottom: 8px;
889
+ }
890
+
891
+ .skill-card-name {
892
+ font-size: 14px;
893
+ font-weight: 500;
894
+ color: var(--text);
895
+ margin-bottom: 4px;
896
+ }
897
+
898
+ .skill-card-price {
899
+ font-size: 13px;
900
+ color: var(--text-tertiary);
901
+ }
902
+
903
+ /* --- Skill modal --- */
904
+ .skill-modal-backdrop {
905
+ position: fixed;
906
+ inset: 0;
907
+ background: rgba(0, 0, 0, 0.4);
908
+ display: flex;
909
+ align-items: center;
910
+ justify-content: center;
911
+ z-index: 100;
912
+ padding: 24px;
913
+ animation: fadeIn 0.15s ease-out;
914
+ }
915
+
916
+ .skill-modal {
917
+ background: var(--bg-chat);
918
+ border-radius: var(--radius-md);
919
+ padding: 36px 32px;
920
+ max-width: 400px;
921
+ width: 100%;
922
+ text-align: center;
923
+ position: relative;
924
+ animation: scaleIn 0.2s ease-out;
925
+ box-shadow: var(--shadow-lg);
926
+ }
927
+
928
+ .skill-modal-close {
929
+ position: absolute;
930
+ top: 12px;
931
+ right: 16px;
932
+ background: none;
933
+ border: none;
934
+ font-size: 24px;
935
+ color: var(--text-tertiary);
936
+ cursor: pointer;
937
+ line-height: 1;
938
+ padding: 4px;
939
+ }
940
+
941
+ .skill-modal-close:hover {
942
+ color: var(--text);
943
+ }
944
+
945
+ .skill-modal-icon {
946
+ color: var(--sage);
947
+ margin-bottom: 12px;
948
+ }
949
+
950
+ .skill-modal-name {
951
+ font-family: var(--font-body);
952
+ font-size: 18px;
953
+ font-weight: 500;
954
+ color: var(--text);
955
+ margin-bottom: 4px;
956
+ }
957
+
958
+ .skill-modal-price {
959
+ font-size: 14px;
960
+ color: var(--text-tertiary);
961
+ margin-bottom: 16px;
962
+ }
963
+
964
+ .skill-modal-desc {
965
+ font-size: 15px;
966
+ color: var(--text-secondary);
967
+ line-height: 1.65;
968
+ }
969
+
970
+ /* --- Premium skills --- */
971
+ .premium-skills {
972
+ margin-top: 48px;
973
+ padding-top: 32px;
974
+ border-top: 1px solid var(--border);
975
+ }
976
+
977
+ .premium-skills-heading {
978
+ font-family: var(--font-body);
979
+ font-size: 12px;
980
+ font-weight: 500;
981
+ text-transform: uppercase;
982
+ letter-spacing: 0.1em;
983
+ color: var(--sage);
984
+ margin-bottom: 12px;
985
+ }
986
+
987
+ .premium-card {
988
+ display: block;
989
+ background: var(--bg-chat);
990
+ border: 1px solid var(--sage);
991
+ box-shadow: 0 0 0 1px var(--sage);
992
+ border-radius: var(--radius-md);
993
+ padding: 28px 24px;
994
+ margin-top: 20px;
995
+ text-decoration: none;
996
+ color: inherit;
997
+ transition: box-shadow 0.2s;
998
+ }
999
+
1000
+ .premium-card:hover {
1001
+ box-shadow: 0 0 0 1px var(--sage), var(--shadow-md);
1002
+ color: inherit;
1003
+ }
1004
+
1005
+ .premium-card-header {
1006
+ display: flex;
1007
+ align-items: center;
1008
+ gap: 14px;
1009
+ margin-bottom: 16px;
1010
+ }
1011
+
1012
+ .premium-card-icon {
1013
+ color: var(--sage);
1014
+ flex-shrink: 0;
1015
+ }
1016
+
1017
+ .premium-card-name {
1018
+ font-size: 18px;
1019
+ font-weight: 500;
1020
+ color: var(--text);
1021
+ line-height: 1.2;
1022
+ }
1023
+
1024
+ .premium-card-tag {
1025
+ font-size: 13px;
1026
+ color: var(--text-tertiary);
1027
+ margin-top: 2px;
1028
+ }
1029
+
1030
+ .premium-card-desc {
1031
+ font-size: 15px;
1032
+ color: var(--text-secondary);
1033
+ line-height: 1.65;
1034
+ margin-bottom: 12px;
1035
+ }
1036
+
1037
+ .premium-card-link {
1038
+ font-size: 14px;
1039
+ font-weight: 500;
1040
+ color: var(--sage);
1041
+ }
1042
+
1043
+ .premium-card:hover .premium-card-link {
1044
+ color: var(--sage-hover);
1045
+ }
1046
+
1047
+ @keyframes fadeIn {
1048
+ from { opacity: 0; }
1049
+ to { opacity: 1; }
1050
+ }
1051
+
1052
+ @keyframes scaleIn {
1053
+ from { opacity: 0; transform: scale(0.95); }
1054
+ to { opacity: 1; transform: scale(1); }
1055
+ }
1056
+
1057
+ /* ============================================
1058
+ PRIVACY PAGE
1059
+ ============================================ */
1060
+
1061
+ .legal-page {
1062
+ max-width: 640px;
1063
+ margin: 0 auto;
1064
+ padding: 80px 24px 64px;
1065
+ }
1066
+
1067
+ .legal-page h1 {
1068
+ font-family: var(--font-display);
1069
+ font-weight: 400;
1070
+ font-size: 32px;
1071
+ margin-bottom: 32px;
1072
+ }
1073
+
1074
+ .legal-page h2 {
1075
+ font-family: var(--font-body);
1076
+ font-size: 18px;
1077
+ font-weight: 500;
1078
+ margin-top: 32px;
1079
+ margin-bottom: 12px;
1080
+ }
1081
+
1082
+ .legal-page p {
1083
+ font-size: 15px;
1084
+ color: var(--text-secondary);
1085
+ line-height: 1.7;
1086
+ margin-bottom: 12px;
1087
+ }
1088
+
1089
+ /* ============================================
1090
+ ANIMATIONS
1091
+ ============================================ */
1092
+
1093
+ @keyframes messageIn {
1094
+ from {
1095
+ opacity: 0;
1096
+ transform: translateY(8px);
1097
+ }
1098
+ to {
1099
+ opacity: 1;
1100
+ transform: translateY(0);
1101
+ }
1102
+ }
1103
+
1104
+ @keyframes typingPulse {
1105
+ 0%, 60%, 100% {
1106
+ opacity: 0.3;
1107
+ transform: scale(0.8);
1108
+ }
1109
+ 30% {
1110
+ opacity: 1;
1111
+ transform: scale(1);
1112
+ }
1113
+ }
1114
+
1115
+ /* Section reveals for product page */
1116
+ .reveal {
1117
+ opacity: 0;
1118
+ transform: translateY(16px);
1119
+ transition: opacity 0.5s ease-out, transform 0.5s ease-out;
1120
+ }
1121
+
1122
+ .reveal.visible {
1123
+ opacity: 1;
1124
+ transform: translateY(0);
1125
+ }
1126
+
1127
+ /* ============================================
1128
+ RESPONSIVE
1129
+ ============================================ */
1130
+
1131
+ /* --- Desktop: side-by-side layouts --- */
1132
+ @media (min-width: 960px) {
1133
+ .hero-section {
1134
+ flex-direction: row;
1135
+ align-items: center;
1136
+ gap: 48px;
1137
+ }
1138
+
1139
+ .hero {
1140
+ flex: 1;
1141
+ text-align: left;
1142
+ padding: 80px 0;
1143
+ }
1144
+
1145
+ .hero-description {
1146
+ margin-left: 0;
1147
+ margin-right: 0;
1148
+ }
1149
+
1150
+ .hero-ctas {
1151
+ justify-content: flex-start;
1152
+ }
1153
+
1154
+ .hero-image {
1155
+ flex: 1;
1156
+ max-width: 480px;
1157
+ margin: 0;
1158
+ }
1159
+
1160
+ .before-after-layout {
1161
+ flex-direction: row;
1162
+ gap: 40px;
1163
+ align-items: flex-start;
1164
+ }
1165
+
1166
+ .before-after-layout .section-image {
1167
+ flex-shrink: 0;
1168
+ width: 360px;
1169
+ max-width: none;
1170
+ margin: 0;
1171
+ position: sticky;
1172
+ top: 32px;
1173
+ }
1174
+
1175
+ .before-after-layout .scenarios {
1176
+ flex: 1;
1177
+ min-width: 0;
1178
+ }
1179
+
1180
+ .privacy-section {
1181
+ text-align: center;
1182
+ }
1183
+
1184
+ .privacy-block {
1185
+ max-width: 720px;
1186
+ margin-left: auto;
1187
+ margin-right: auto;
1188
+ text-align: left;
1189
+ }
1190
+ }
1191
+
1192
+ @media (max-width: 640px) {
1193
+ .chat-header {
1194
+ padding: 32px 0 16px;
1195
+ }
1196
+
1197
+ .bubble {
1198
+ max-width: 90%;
1199
+ }
1200
+
1201
+ .hero {
1202
+ padding: 80px 0 48px;
1203
+ }
1204
+
1205
+ .pricing-cards {
1206
+ grid-template-columns: 1fr;
1207
+ }
1208
+
1209
+ .hardware-options {
1210
+ grid-template-columns: 1fr;
1211
+ }
1212
+
1213
+ .skill-grid {
1214
+ grid-template-columns: 1fr 1fr;
1215
+ }
1216
+
1217
+ .privacy-block {
1218
+ padding: 24px;
1219
+ }
1220
+
1221
+ .action-label {
1222
+ display: none;
1223
+ }
1224
+ }
1225
+
1226
+ /* ============================================
1227
+ Admin Agent — Activity Stream Styles
1228
+ Claude Code VSCode extension aesthetic
1229
+ ============================================ */
1230
+
1231
+ .admin-page .chat-header {
1232
+ border-bottom: 1px solid var(--border);
1233
+ }
1234
+
1235
+ .admin-activity {
1236
+ display: flex;
1237
+ flex-direction: column;
1238
+ gap: 6px;
1239
+ max-width: 100%;
1240
+ }
1241
+
1242
+ @keyframes spin {
1243
+ to { transform: rotate(360deg); }
1244
+ }
1245
+
1246
+ /* --- Timeline (tl-*) --- */
1247
+
1248
+ .tl-spinner {
1249
+ animation: spin 1.2s linear infinite;
1250
+ }
1251
+
1252
+ /* Star loader frames */
1253
+ .star-loader {
1254
+ color: var(--text-tertiary);
1255
+ }
1256
+
1257
+ .star-frame-0 {
1258
+ opacity: 0.5;
1259
+ transform: scale(0.85);
1260
+ }
1261
+
1262
+ .star-frame-1 {
1263
+ opacity: 0.8;
1264
+ transform: scale(1.0);
1265
+ }
1266
+
1267
+ .star-frame-2 {
1268
+ opacity: 1;
1269
+ transform: scale(1.15);
1270
+ }
1271
+
1272
+ /* Global loading indicator */
1273
+ .tl-loading {
1274
+ display: flex;
1275
+ align-items: center;
1276
+ gap: 6px;
1277
+ padding: 2px 0 4px;
1278
+ color: var(--text-tertiary);
1279
+ }
1280
+
1281
+ .tl-elapsed {
1282
+ font-size: 12px;
1283
+ color: var(--text-tertiary);
1284
+ font-variant-numeric: tabular-nums;
1285
+ }
1286
+
1287
+ /* Steps container */
1288
+ .tl-steps {
1289
+ display: flex;
1290
+ flex-direction: column;
1291
+ }
1292
+
1293
+ /* Single step: left connector column + right body */
1294
+ .tl-step {
1295
+ display: flex;
1296
+ align-items: stretch;
1297
+ gap: 0;
1298
+ }
1299
+
1300
+ .tl-col {
1301
+ display: flex;
1302
+ flex-direction: column;
1303
+ align-items: center;
1304
+ width: 20px;
1305
+ flex-shrink: 0;
1306
+ }
1307
+
1308
+ .tl-line {
1309
+ width: 1px;
1310
+ min-height: 6px;
1311
+ background: var(--border-strong);
1312
+ flex-shrink: 0;
1313
+ }
1314
+
1315
+ .tl-line-grow {
1316
+ flex: 1;
1317
+ }
1318
+
1319
+ /* Icon node — no circle, just the icon */
1320
+ .tl-icon {
1321
+ display: flex;
1322
+ align-items: center;
1323
+ justify-content: center;
1324
+ width: 20px;
1325
+ height: 20px;
1326
+ flex-shrink: 0;
1327
+ }
1328
+
1329
+ .tl-icon.tl-pending {
1330
+ color: var(--sage);
1331
+ }
1332
+
1333
+ .tl-icon.tl-done {
1334
+ color: var(--text-tertiary);
1335
+ }
1336
+
1337
+ .tl-icon.tl-error {
1338
+ color: #c44;
1339
+ }
1340
+
1341
+ .tl-icon.tl-dim {
1342
+ color: var(--text-tertiary);
1343
+ opacity: 0.5;
1344
+ }
1345
+
1346
+ /* Step body */
1347
+ .tl-body {
1348
+ flex: 1;
1349
+ padding: 0 0 0 6px;
1350
+ min-width: 0;
1351
+ }
1352
+
1353
+ .tl-row {
1354
+ display: flex;
1355
+ align-items: center;
1356
+ gap: 6px;
1357
+ min-height: 22px;
1358
+ padding: 2px 0;
1359
+ }
1360
+
1361
+ .tl-summary {
1362
+ font-size: 12px;
1363
+ color: var(--text-secondary);
1364
+ line-height: 1.4;
1365
+ flex: 1;
1366
+ min-width: 0;
1367
+ overflow: hidden;
1368
+ text-overflow: ellipsis;
1369
+ white-space: nowrap;
1370
+ }
1371
+
1372
+ .tl-thinking-label {
1373
+ font-style: italic;
1374
+ color: var(--text-tertiary);
1375
+ }
1376
+
1377
+ .tl-step-elapsed {
1378
+ font-size: 11px;
1379
+ color: var(--text-tertiary);
1380
+ font-variant-numeric: tabular-nums;
1381
+ flex-shrink: 0;
1382
+ }
1383
+
1384
+ .tl-chevron {
1385
+ flex-shrink: 0;
1386
+ color: var(--text-tertiary);
1387
+ display: flex;
1388
+ align-items: center;
1389
+ }
1390
+
1391
+ .tl-detail {
1392
+ margin: 2px 0 6px;
1393
+ padding: 7px 9px;
1394
+ background: rgba(0, 0, 0, 0.03);
1395
+ border-radius: 4px;
1396
+ font-size: 11.5px;
1397
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
1398
+ line-height: 1.5;
1399
+ overflow-x: auto;
1400
+ white-space: pre-wrap;
1401
+ word-break: break-word;
1402
+ color: var(--text-secondary);
1403
+ }
1404
+
1405
+ .tl-row.tl-row-top {
1406
+ align-items: flex-start;
1407
+ }
1408
+
1409
+ .tl-thinking-col {
1410
+ flex: 1;
1411
+ min-width: 0;
1412
+ display: flex;
1413
+ flex-direction: column;
1414
+ }
1415
+
1416
+ .tl-thinking-body {
1417
+ font-size: 12px;
1418
+ font-style: italic;
1419
+ color: var(--text-tertiary);
1420
+ line-height: 1.5;
1421
+ word-break: break-word;
1422
+ padding: 0 0 4px;
1423
+ border-left: 2px solid rgba(124, 140, 114, 0.25);
1424
+ padding-left: 8px;
1425
+ margin: 0 0 4px 0;
1426
+ }
1427
+
1428
+ /* Status line */
1429
+ .tl-status {
1430
+ padding: 2px 0 2px 4px;
1431
+ font-size: 11px;
1432
+ color: var(--text-tertiary);
1433
+ font-style: italic;
1434
+ text-align: center;
1435
+ }
1436
+
1437
+ /* Footer: total elapsed + tokens */
1438
+ .tl-footer {
1439
+ display: flex;
1440
+ align-items: center;
1441
+ gap: 6px;
1442
+ padding: 6px 0 2px;
1443
+ font-size: 11px;
1444
+ color: var(--text-tertiary);
1445
+ font-variant-numeric: tabular-nums;
1446
+ }
1447
+
1448
+ .tl-footer-sep {
1449
+ opacity: 0.5;
1450
+ }
1451
+
1452
+ /* Session stats bar */
1453
+ .session-stats {
1454
+ display: flex;
1455
+ align-items: center;
1456
+ flex-wrap: wrap;
1457
+ gap: 4px 14px;
1458
+ padding: 6px 0 8px;
1459
+ font-size: 11px;
1460
+ color: var(--text-tertiary);
1461
+ border-bottom: 1px solid var(--border);
1462
+ }
1463
+
1464
+ .session-stat {
1465
+ display: flex;
1466
+ align-items: center;
1467
+ gap: 4px;
1468
+ }
1469
+
1470
+ .session-stat b {
1471
+ color: var(--text-secondary);
1472
+ font-weight: 500;
1473
+ }
1474
+
1475
+ /* --- Markdown message --- */
1476
+
1477
+ .markdown-message {
1478
+ font-size: 15px;
1479
+ line-height: 1.65;
1480
+ color: var(--text);
1481
+ word-wrap: break-word;
1482
+ padding: 12px 16px;
1483
+ background: var(--maxy-bubble);
1484
+ border-radius: var(--radius-lg);
1485
+ border-bottom-left-radius: var(--radius-sm);
1486
+ max-width: 85%;
1487
+ }
1488
+
1489
+ .markdown-message .md-p {
1490
+ margin: 0 0 10px;
1491
+ }
1492
+
1493
+ .markdown-message .md-p:last-child {
1494
+ margin-bottom: 0;
1495
+ }
1496
+
1497
+ .markdown-message .md-heading {
1498
+ font-family: var(--font-body);
1499
+ font-weight: 500;
1500
+ color: var(--text);
1501
+ margin: 14px 0 5px;
1502
+ line-height: 1.3;
1503
+ }
1504
+
1505
+ .markdown-message h1.md-heading { font-size: 17px; }
1506
+ .markdown-message h2.md-heading { font-size: 15.5px; }
1507
+ .markdown-message h3.md-heading { font-size: 14.5px; }
1508
+
1509
+ .markdown-message .md-pre {
1510
+ margin: 8px 0;
1511
+ }
1512
+
1513
+ .markdown-message .md-code-inline {
1514
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
1515
+ font-size: 13px;
1516
+ background: rgba(0, 0, 0, 0.06);
1517
+ padding: 1px 5px;
1518
+ border-radius: 3px;
1519
+ }
1520
+
1521
+ .markdown-message .md-code-block {
1522
+ display: block;
1523
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
1524
+ font-size: 12px;
1525
+ background: rgba(0, 0, 0, 0.04);
1526
+ border: 1px solid var(--border);
1527
+ border-radius: 5px;
1528
+ padding: 10px 12px;
1529
+ overflow-x: auto;
1530
+ white-space: pre;
1531
+ line-height: 1.5;
1532
+ color: var(--text-secondary);
1533
+ }
1534
+
1535
+ .markdown-message .md-list {
1536
+ margin: 4px 0 10px;
1537
+ padding-left: 20px;
1538
+ }
1539
+
1540
+ .markdown-message .md-list-ordered {
1541
+ list-style-type: decimal;
1542
+ }
1543
+
1544
+ .markdown-message .md-list-item {
1545
+ margin-bottom: 3px;
1546
+ font-size: 15px;
1547
+ line-height: 1.6;
1548
+ }
1549
+
1550
+ .markdown-message .md-hr {
1551
+ border: none;
1552
+ border-top: 1px solid var(--border-strong);
1553
+ margin: 12px 0;
1554
+ }
1555
+
1556
+ .markdown-message .md-strong {
1557
+ font-weight: 500;
1558
+ }
1559
+
1560
+ .markdown-message .md-link {
1561
+ color: var(--sage);
1562
+ text-decoration: underline;
1563
+ text-decoration-color: rgba(124, 140, 114, 0.4);
1564
+ text-underline-offset: 2px;
1565
+ }
1566
+
1567
+ .message-meta {
1568
+ font-size: 11px;
1569
+ color: var(--text-tertiary);
1570
+ margin-top: 6px;
1571
+ font-variant-numeric: tabular-nums;
1572
+ }
1573
+
1574
+ /* Admin PIN form */
1575
+ .admin-pin-form {
1576
+ display: flex;
1577
+ flex-direction: column;
1578
+ align-items: center;
1579
+ gap: 12px;
1580
+ padding: 40px 20px;
1581
+ }
1582
+
1583
+ .admin-pin-form form {
1584
+ display: flex;
1585
+ flex-direction: column;
1586
+ gap: 8px;
1587
+ width: 100%;
1588
+ max-width: 300px;
1589
+ }
1590
+
1591
+ .pin-input-row {
1592
+ display: flex;
1593
+ gap: 8px;
1594
+ align-items: center;
1595
+ }
1596
+
1597
+ .pin-input-row .chat-input {
1598
+ flex: 1;
1599
+ }
1600
+
1601
+ .pin-toggle {
1602
+ background: none;
1603
+ border: 1px solid var(--border-strong);
1604
+ border-radius: 50%;
1605
+ width: 40px;
1606
+ height: 40px;
1607
+ cursor: pointer;
1608
+ font-size: 16px;
1609
+ color: var(--text-secondary);
1610
+ flex-shrink: 0;
1611
+ display: flex;
1612
+ align-items: center;
1613
+ justify-content: center;
1614
+ transition: border-color 0.15s;
1615
+ }
1616
+
1617
+ .pin-toggle:hover {
1618
+ border-color: var(--sage);
1619
+ }
1620
+
1621
+ .btn-primary {
1622
+ padding: 12px 24px;
1623
+ background: var(--sage);
1624
+ color: white;
1625
+ border: none;
1626
+ border-radius: 24px;
1627
+ font-family: var(--font-body);
1628
+ font-size: 15px;
1629
+ cursor: pointer;
1630
+ transition: background 0.15s;
1631
+ }
1632
+
1633
+ .btn-primary:hover {
1634
+ background: var(--sage-hover);
1635
+ }
1636
+
1637
+ .btn-primary:disabled {
1638
+ opacity: 0.5;
1639
+ cursor: not-allowed;
1640
+ }
1641
+
1642
+ .btn-secondary {
1643
+ padding: 10px 20px;
1644
+ background: none;
1645
+ color: var(--text-secondary);
1646
+ border: 1px solid var(--border-strong);
1647
+ border-radius: 24px;
1648
+ font-family: var(--font-body);
1649
+ font-size: 14px;
1650
+ cursor: pointer;
1651
+ text-decoration: none;
1652
+ text-align: center;
1653
+ transition: border-color 0.15s;
1654
+ }
1655
+
1656
+ .btn-secondary:hover {
1657
+ border-color: var(--sage);
1658
+ }
1659
+
1660
+ .auth-retry-link {
1661
+ font-family: var(--font-body);
1662
+ font-size: 13px;
1663
+ color: var(--text-tertiary);
1664
+ text-decoration: none;
1665
+ margin-top: 12px;
1666
+ }
1667
+
1668
+ .auth-retry-link:hover {
1669
+ color: var(--sage);
1670
+ }
1671
+
1672
+ .admin-pin-error {
1673
+ color: #c44;
1674
+ font-size: 13px;
1675
+ white-space: pre-wrap;
1676
+ word-break: break-word;
1677
+ font-family: var(--font-body);
1678
+ max-height: 200px;
1679
+ overflow-y: auto;
1680
+ text-align: left;
1681
+ }