agentix-cli 0.16.0 → 0.18.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 (173) hide show
  1. package/dist/agent-RDVGL2TW.js +2 -0
  2. package/dist/audit-Z47AQFFD.js +3 -0
  3. package/dist/audit-Z47AQFFD.js.map +1 -0
  4. package/dist/board-dashboard-KX2CNOSY.js +7282 -0
  5. package/dist/board-dashboard-KX2CNOSY.js.map +1 -0
  6. package/dist/chunk-34NG7UDX.js +11 -0
  7. package/dist/chunk-34NG7UDX.js.map +1 -0
  8. package/dist/{chunk-6MKAXEE5.js → chunk-4ITQP3XL.js} +2 -2
  9. package/dist/{chunk-6MKAXEE5.js.map → chunk-4ITQP3XL.js.map} +1 -1
  10. package/dist/chunk-53NRX2NA.js +2 -0
  11. package/dist/chunk-53NRX2NA.js.map +1 -0
  12. package/dist/chunk-6PPIFDOQ.js +1742 -0
  13. package/dist/chunk-6PPIFDOQ.js.map +1 -0
  14. package/dist/chunk-AFRHKA7B.js +2 -0
  15. package/dist/chunk-AFRHKA7B.js.map +1 -0
  16. package/dist/chunk-ASSJ4Z6Z.js +164 -0
  17. package/dist/chunk-ASSJ4Z6Z.js.map +1 -0
  18. package/dist/chunk-BLUXL6HR.js +854 -0
  19. package/dist/chunk-BLUXL6HR.js.map +1 -0
  20. package/dist/chunk-BTAEYL3P.js +72 -0
  21. package/dist/chunk-BTAEYL3P.js.map +1 -0
  22. package/dist/chunk-CDNWCYF7.js +2 -0
  23. package/dist/chunk-CDNWCYF7.js.map +1 -0
  24. package/dist/chunk-DJEZ2HVU.js +5 -0
  25. package/dist/chunk-DJEZ2HVU.js.map +1 -0
  26. package/dist/{chunk-FLOGK2U7.js → chunk-DSCMCVTV.js} +3 -3
  27. package/dist/chunk-DSCMCVTV.js.map +1 -0
  28. package/dist/chunk-EW27SCCC.js +2 -0
  29. package/dist/chunk-EW27SCCC.js.map +1 -0
  30. package/dist/chunk-HPDHNIA3.js +2 -0
  31. package/dist/chunk-IM376SD6.js +13 -0
  32. package/dist/chunk-IM376SD6.js.map +1 -0
  33. package/dist/chunk-J4WKMKTP.js +5 -0
  34. package/dist/{chunk-YI2T5QYB.js.map → chunk-J4WKMKTP.js.map} +1 -1
  35. package/dist/chunk-JGXE2YNV.js +46 -0
  36. package/dist/chunk-JGXE2YNV.js.map +1 -0
  37. package/dist/chunk-JXEPJ3YD.js +118 -0
  38. package/dist/chunk-JXEPJ3YD.js.map +1 -0
  39. package/dist/chunk-LY7JGDV7.js +6 -0
  40. package/dist/chunk-LY7JGDV7.js.map +1 -0
  41. package/dist/chunk-N67JZAXU.js +2 -0
  42. package/dist/chunk-N67JZAXU.js.map +1 -0
  43. package/dist/chunk-SR3X25TN.js +3 -0
  44. package/dist/chunk-SR3X25TN.js.map +1 -0
  45. package/dist/{chunk-7MBTMCKY.js → chunk-TRQSP67X.js} +2 -2
  46. package/dist/chunk-U364GNQX.js +719 -0
  47. package/dist/chunk-U364GNQX.js.map +1 -0
  48. package/dist/chunk-VJUTQAPJ.js +2 -0
  49. package/dist/chunk-VJUTQAPJ.js.map +1 -0
  50. package/dist/{chunk-HI24KAEY.js → chunk-WJXU5F4Z.js} +3 -4
  51. package/dist/{chunk-HI24KAEY.js.map → chunk-WJXU5F4Z.js.map} +1 -1
  52. package/dist/{chunk-QZP65I2H.js → chunk-ZE2YFX4K.js} +2 -2
  53. package/dist/cli.js +1 -320
  54. package/dist/cli.js.map +1 -1
  55. package/dist/{compaction-JBZZ7I7Y.js → compaction-S5H6DTOR.js} +6 -6
  56. package/dist/compaction-S5H6DTOR.js.map +1 -0
  57. package/dist/config-UOHEG4BW.js +2 -0
  58. package/dist/config-mutator-KSEBWKJH.js +2 -0
  59. package/dist/context-planner-2RGHJHSO.js +17 -0
  60. package/dist/context-planner-2RGHJHSO.js.map +1 -0
  61. package/dist/debug-TGAP7E7W.js +2 -0
  62. package/dist/discover-OATU7SHI.js +4 -0
  63. package/dist/discover-OATU7SHI.js.map +1 -0
  64. package/dist/editor-chat-FUBQLMAQ.js +137 -0
  65. package/dist/editor-chat-FUBQLMAQ.js.map +1 -0
  66. package/dist/heal-YP7QI7D3.js +2 -0
  67. package/dist/inbox-O5UB3YQN.js +315 -0
  68. package/dist/inbox-O5UB3YQN.js.map +1 -0
  69. package/dist/index.d.ts +3390 -1814
  70. package/dist/index.js +23 -53
  71. package/dist/index.js.map +1 -1
  72. package/dist/ingest-whatsapp-C3O5UPBX.js +6 -0
  73. package/dist/ingest-whatsapp-C3O5UPBX.js.map +1 -0
  74. package/dist/loader-BGWA7IRY.js +2 -0
  75. package/dist/loader-LBHKSXBK.js +2 -0
  76. package/dist/memory-extract-KKPKAOPH.js +2 -0
  77. package/dist/processes-7W27G3J3.js +256 -0
  78. package/dist/processes-7W27G3J3.js.map +1 -0
  79. package/dist/program-2MDELQLX.js +2 -0
  80. package/dist/providers-WCQSKTNP.js +2 -0
  81. package/dist/query-FZAL7AQD.js +2 -0
  82. package/dist/recipes-LZ56TA3X.js +2 -0
  83. package/dist/registry-ONJSILH4.js +2 -0
  84. package/dist/scheduler-XRM2RJIV.js +2 -0
  85. package/dist/slack-D27BE37Q.js +3 -0
  86. package/dist/slack-D27BE37Q.js.map +1 -0
  87. package/dist/store-4UCO56K2.js +2 -0
  88. package/dist/store-4UCO56K2.js.map +1 -0
  89. package/dist/{subagent-2SJHSSJS.js → subagent-EPOT3QDM.js} +2 -2
  90. package/dist/task-store-3NUWLYRY.js +2 -0
  91. package/dist/task-store-3NUWLYRY.js.map +1 -0
  92. package/dist/telegram-UWV67KWG.js +3 -0
  93. package/dist/telegram-UWV67KWG.js.map +1 -0
  94. package/dist/timers-QB4KYNAE.js +2 -0
  95. package/dist/timers-QB4KYNAE.js.map +1 -0
  96. package/dist/types-ECMEC5BZ.js +2 -0
  97. package/dist/types-ECMEC5BZ.js.map +1 -0
  98. package/dist/types-TTB6DJUE.js +2 -0
  99. package/dist/types-TTB6DJUE.js.map +1 -0
  100. package/dist/usage-dashboard-FQGPPABD.js +803 -0
  101. package/dist/usage-dashboard-FQGPPABD.js.map +1 -0
  102. package/dist/web/workflow-editor.global.js +1450 -0
  103. package/dist/web/workflow-editor.global.js.map +1 -0
  104. package/dist/whatsapp-KJ2NRKKQ.js +3 -0
  105. package/dist/whatsapp-KJ2NRKKQ.js.map +1 -0
  106. package/dist/{whatsapp-state-6D6FHHD2.js → whatsapp-state-3ZVQ6MQD.js} +2 -2
  107. package/dist/{wiki-UDPYFJBL.js → wiki-OUYKM7MB.js} +2 -2
  108. package/dist/wiki-OUYKM7MB.js.map +1 -0
  109. package/dist/workspace-setup-6GDBEORT.js +2 -0
  110. package/dist/workspace-setup-6GDBEORT.js.map +1 -0
  111. package/package.json +19 -2
  112. package/dist/agent-BCDPSPKU.js +0 -2
  113. package/dist/board-dashboard-LA7WW56M.js +0 -5668
  114. package/dist/board-dashboard-LA7WW56M.js.map +0 -1
  115. package/dist/chunk-6U2XOQHU.js +0 -7
  116. package/dist/chunk-6U2XOQHU.js.map +0 -1
  117. package/dist/chunk-7FJQGD6U.js +0 -6
  118. package/dist/chunk-7FJQGD6U.js.map +0 -1
  119. package/dist/chunk-ABDP7TDL.js +0 -71
  120. package/dist/chunk-ABDP7TDL.js.map +0 -1
  121. package/dist/chunk-CXY2RYNI.js +0 -11
  122. package/dist/chunk-CXY2RYNI.js.map +0 -1
  123. package/dist/chunk-FIOB3MEX.js +0 -2
  124. package/dist/chunk-FLOGK2U7.js.map +0 -1
  125. package/dist/chunk-HVC6FJNP.js +0 -108
  126. package/dist/chunk-HVC6FJNP.js.map +0 -1
  127. package/dist/chunk-K7BE4E35.js +0 -138
  128. package/dist/chunk-K7BE4E35.js.map +0 -1
  129. package/dist/chunk-KXJSLLSQ.js +0 -199
  130. package/dist/chunk-KXJSLLSQ.js.map +0 -1
  131. package/dist/chunk-KXZMYLHQ.js +0 -46
  132. package/dist/chunk-KXZMYLHQ.js.map +0 -1
  133. package/dist/chunk-M7HKBG3V.js +0 -2
  134. package/dist/chunk-M7HKBG3V.js.map +0 -1
  135. package/dist/chunk-MCJUAE6V.js +0 -6
  136. package/dist/chunk-MCJUAE6V.js.map +0 -1
  137. package/dist/chunk-RB7265LO.js +0 -12
  138. package/dist/chunk-RB7265LO.js.map +0 -1
  139. package/dist/chunk-YI2T5QYB.js +0 -5
  140. package/dist/compaction-JBZZ7I7Y.js.map +0 -1
  141. package/dist/config-LN6JEHMF.js +0 -2
  142. package/dist/config-mutator-24TH7PHM.js +0 -2
  143. package/dist/debug-3MEUO2P2.js +0 -2
  144. package/dist/heal-WKY5I4KB.js +0 -2
  145. package/dist/loader-PTCXLJEX.js +0 -2
  146. package/dist/memory-extract-AD7KMRPC.js +0 -2
  147. package/dist/providers-VUIWO3ZK.js +0 -2
  148. package/dist/query-PKGYE5HR.js +0 -2
  149. package/dist/registry-ASC2QS5K.js +0 -2
  150. package/dist/scheduler-A3TQOCKT.js +0 -2
  151. package/dist/types-OIFU3KSQ.js +0 -2
  152. package/dist/usage-dashboard-QX3CF6KK.js +0 -404
  153. package/dist/usage-dashboard-QX3CF6KK.js.map +0 -1
  154. package/dist/workspace-setup-ZWTT42XT.js +0 -2
  155. /package/dist/{agent-BCDPSPKU.js.map → agent-RDVGL2TW.js.map} +0 -0
  156. /package/dist/{chunk-FIOB3MEX.js.map → chunk-HPDHNIA3.js.map} +0 -0
  157. /package/dist/{chunk-7MBTMCKY.js.map → chunk-TRQSP67X.js.map} +0 -0
  158. /package/dist/{chunk-QZP65I2H.js.map → chunk-ZE2YFX4K.js.map} +0 -0
  159. /package/dist/{config-LN6JEHMF.js.map → config-UOHEG4BW.js.map} +0 -0
  160. /package/dist/{config-mutator-24TH7PHM.js.map → config-mutator-KSEBWKJH.js.map} +0 -0
  161. /package/dist/{debug-3MEUO2P2.js.map → debug-TGAP7E7W.js.map} +0 -0
  162. /package/dist/{heal-WKY5I4KB.js.map → heal-YP7QI7D3.js.map} +0 -0
  163. /package/dist/{loader-PTCXLJEX.js.map → loader-BGWA7IRY.js.map} +0 -0
  164. /package/dist/{memory-extract-AD7KMRPC.js.map → loader-LBHKSXBK.js.map} +0 -0
  165. /package/dist/{providers-VUIWO3ZK.js.map → memory-extract-KKPKAOPH.js.map} +0 -0
  166. /package/dist/{query-PKGYE5HR.js.map → program-2MDELQLX.js.map} +0 -0
  167. /package/dist/{registry-ASC2QS5K.js.map → providers-WCQSKTNP.js.map} +0 -0
  168. /package/dist/{scheduler-A3TQOCKT.js.map → query-FZAL7AQD.js.map} +0 -0
  169. /package/dist/{types-OIFU3KSQ.js.map → recipes-LZ56TA3X.js.map} +0 -0
  170. /package/dist/{wiki-UDPYFJBL.js.map → registry-ONJSILH4.js.map} +0 -0
  171. /package/dist/{workspace-setup-ZWTT42XT.js.map → scheduler-XRM2RJIV.js.map} +0 -0
  172. /package/dist/{subagent-2SJHSSJS.js.map → subagent-EPOT3QDM.js.map} +0 -0
  173. /package/dist/{whatsapp-state-6D6FHHD2.js.map → whatsapp-state-3ZVQ6MQD.js.map} +0 -0
@@ -0,0 +1,1742 @@
1
+ var p=`:root {
2
+ --ax-bg: oklch(0.16 0.010 265);
3
+ --ax-bg-elev: oklch(0.19 0.012 265);
4
+ --ax-surface: oklch(0.21 0.012 265);
5
+ --ax-surface-2: oklch(0.24 0.014 265);
6
+ --ax-surface-3: oklch(0.27 0.016 265);
7
+ --ax-border: oklch(0.29 0.014 265);
8
+ --ax-border-2: oklch(0.35 0.016 265);
9
+ --ax-text: oklch(0.95 0.005 265);
10
+ --ax-text-2: oklch(0.80 0.008 265);
11
+ --ax-muted: oklch(0.60 0.010 265);
12
+ --ax-accent: oklch(0.78 0.13 165);
13
+ --ax-accent-2: oklch(0.55 0.11 165);
14
+ --ax-warn: oklch(0.80 0.14 75);
15
+ --ax-err: oklch(0.68 0.19 25);
16
+ --ax-info: oklch(0.78 0.10 220);
17
+ --ax-radius: 6px;
18
+ --ax-radius-lg: 8px;
19
+ --ax-radius-sm: 5px;
20
+ --ax-pad: 16px;
21
+ --ax-pad-sm: 10px;
22
+ --ax-gap: 12px;
23
+ --ax-font: "IBM Plex Sans", -apple-system, "Segoe UI", sans-serif;
24
+ --ax-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Consolas, monospace;
25
+ --ax-fs: 13px;
26
+ --ax-fs-sm: 12px;
27
+ --ax-fs-xs: 11px;
28
+ /* Legacy aliases so older CSS blocks keep rendering until they're ported. */
29
+ --bg: var(--ax-bg);
30
+ --card: var(--ax-surface);
31
+ --node: var(--ax-bg-elev);
32
+ --border: var(--ax-border);
33
+ --text: var(--ax-text);
34
+ --muted: var(--ax-muted);
35
+ --accent: var(--ax-accent);
36
+ --green: var(--ax-accent);
37
+ --yellow: var(--ax-warn);
38
+ --red: var(--ax-err);
39
+ --blue: var(--ax-info);
40
+ --gray: var(--ax-muted);
41
+ color-scheme: dark;
42
+ }
43
+ [data-theme="light"] {
44
+ --ax-bg: oklch(0.98 0.002 265);
45
+ --ax-bg-elev: oklch(0.96 0.003 265);
46
+ --ax-surface: oklch(0.99 0.002 265);
47
+ --ax-surface-2: oklch(0.955 0.003 265);
48
+ --ax-surface-3: oklch(0.92 0.004 265);
49
+ --ax-border: oklch(0.88 0.006 265);
50
+ --ax-border-2: oklch(0.78 0.008 265);
51
+ --ax-text: oklch(0.22 0.010 265);
52
+ --ax-text-2: oklch(0.36 0.010 265);
53
+ --ax-muted: oklch(0.54 0.010 265);
54
+ --ax-accent: oklch(0.55 0.14 165);
55
+ color-scheme: light;
56
+ }
57
+ [data-theme="crt"] {
58
+ --ax-bg: #05140a;
59
+ --ax-bg-elev: #061a0d;
60
+ --ax-surface: #08201f;
61
+ --ax-surface-2: #0b2922;
62
+ --ax-surface-3: #0e3329;
63
+ --ax-border: #164a30;
64
+ --ax-border-2: #1f6a44;
65
+ --ax-text: #b7ffcc;
66
+ --ax-text-2: #83e3a8;
67
+ --ax-muted: #4f9a73;
68
+ --ax-accent: #6dff9e;
69
+ --ax-font: "IBM Plex Mono", ui-monospace, monospace;
70
+ }
71
+
72
+ /* Base element resets shared across every page. */
73
+ * { box-sizing: border-box; }
74
+ html, body {
75
+ margin: 0; min-height: 100vh;
76
+ background: var(--ax-bg); color: var(--ax-text);
77
+ font-family: var(--ax-font); font-size: var(--ax-fs);
78
+ -webkit-font-smoothing: antialiased; font-feature-settings: "ss01", "cv01";
79
+ }
80
+ pre, code, .ax-mono {
81
+ font-family: var(--ax-mono); font-variant-numeric: tabular-nums;
82
+ letter-spacing: -0.01em;
83
+ }
84
+ a { color: var(--ax-accent); text-decoration: none; }
85
+ a:hover { text-decoration: underline; }
86
+ .ax-muted { color: var(--ax-muted); }
87
+ .ax-accent { color: var(--ax-accent); }`;var g=`
88
+ /* --- Dots --- */
89
+ .ax-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--ax-muted); }
90
+ .ax-dot--ok, .ax-dot--live { background: var(--ax-accent); }
91
+ .ax-dot--warn { background: var(--ax-warn); }
92
+ .ax-dot--err { background: var(--ax-err); }
93
+ .ax-dot--off { background: var(--ax-border-2); }
94
+ .ax-dot--pulse {
95
+ box-shadow: 0 0 0 0 currentColor;
96
+ animation: ax-pulse 1.8s infinite;
97
+ color: var(--ax-accent);
98
+ }
99
+ @keyframes ax-pulse {
100
+ 0% { box-shadow: 0 0 0 0 color-mix(in oklch, var(--ax-accent) 70%, transparent); }
101
+ 70% { box-shadow: 0 0 0 6px color-mix(in oklch, var(--ax-accent) 0%, transparent); }
102
+ 100% { box-shadow: 0 0 0 0 color-mix(in oklch, var(--ax-accent) 0%, transparent); }
103
+ }
104
+
105
+ /* --- Badges --- */
106
+ .ax-badge {
107
+ display: inline-flex; align-items: center; gap: 4px;
108
+ padding: 1px 7px; border-radius: 3px; font-size: var(--ax-fs-xs); line-height: 16px;
109
+ border: 1px solid var(--ax-border-2); color: var(--ax-text-2); background: transparent;
110
+ }
111
+ .ax-badge--mono {
112
+ font-family: var(--ax-mono); letter-spacing: 0.02em;
113
+ text-transform: uppercase; font-size: 10px;
114
+ }
115
+ .ax-badge--accent {
116
+ color: var(--ax-accent);
117
+ border-color: color-mix(in oklch, var(--ax-accent) 50%, transparent);
118
+ }
119
+ .ax-badge--live {
120
+ color: var(--ax-accent);
121
+ background: color-mix(in oklch, var(--ax-accent) 14%, transparent);
122
+ border-color: color-mix(in oklch, var(--ax-accent) 60%, transparent);
123
+ font-weight: 600; letter-spacing: 0.06em;
124
+ }
125
+ .ax-badge--warn {
126
+ color: var(--ax-warn);
127
+ border-color: color-mix(in oklch, var(--ax-warn) 50%, transparent);
128
+ }
129
+ .ax-badge--err {
130
+ color: var(--ax-err);
131
+ border-color: color-mix(in oklch, var(--ax-err) 50%, transparent);
132
+ }
133
+ .ax-badge--ghost {
134
+ color: var(--ax-muted); border-color: var(--ax-border); background: var(--ax-surface-2);
135
+ }
136
+
137
+ /* --- Buttons --- */
138
+ .ax-btn {
139
+ background: transparent; color: var(--ax-text-2);
140
+ border: 1px solid var(--ax-border-2); border-radius: var(--ax-radius);
141
+ padding: 7px 14px; font: inherit; font-size: var(--ax-fs); cursor: pointer;
142
+ transition: border-color 0.1s, color 0.1s, background 0.1s;
143
+ line-height: 1.4;
144
+ }
145
+ .ax-btn:hover:not(:disabled) { color: var(--ax-text); border-color: var(--ax-accent); }
146
+ .ax-btn:disabled { opacity: 0.5; cursor: not-allowed; }
147
+
148
+ .ax-btn--primary {
149
+ background: color-mix(in oklch, var(--ax-accent) 15%, var(--ax-surface));
150
+ color: var(--ax-accent);
151
+ border-color: color-mix(in oklch, var(--ax-accent) 50%, var(--ax-border-2));
152
+ font-weight: 600;
153
+ }
154
+ .ax-btn--primary:hover:not(:disabled) {
155
+ background: color-mix(in oklch, var(--ax-accent) 25%, var(--ax-surface));
156
+ border-color: var(--ax-accent);
157
+ }
158
+
159
+ .ax-btn--ghost {
160
+ background: transparent; color: var(--ax-muted);
161
+ border-color: var(--ax-border);
162
+ }
163
+
164
+ .ax-btn--danger {
165
+ color: var(--ax-err);
166
+ border-color: color-mix(in oklch, var(--ax-err) 50%, var(--ax-border-2));
167
+ }
168
+ .ax-btn--danger:hover:not(:disabled) {
169
+ background: color-mix(in oklch, var(--ax-err) 12%, var(--ax-surface));
170
+ border-color: var(--ax-err);
171
+ }
172
+
173
+ /* --- Chips (read-only labels used in kanban filters, etc.) --- */
174
+ .ax-chip {
175
+ display: inline-block; padding: 0 6px; font-family: var(--ax-mono);
176
+ font-size: 10px; line-height: 16px; border-radius: 3px; color: var(--ax-muted);
177
+ border: 1px solid var(--ax-border); background: var(--ax-surface);
178
+ }
179
+
180
+ /* --- Cards --- */
181
+ .ax-card {
182
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
183
+ border-radius: var(--ax-radius); padding: var(--ax-pad);
184
+ }
185
+
186
+ /* Step cards used by the setup wizard / onboarding-style flows. */
187
+ .ax-step {
188
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
189
+ border-radius: 8px; padding: 20px 22px; margin: 14px 0;
190
+ }
191
+ .ax-step__head {
192
+ font-size: var(--ax-fs-xs); font-weight: 600; text-transform: uppercase;
193
+ letter-spacing: 0.08em; color: var(--ax-muted);
194
+ margin: 0 0 14px; display: flex; align-items: center; gap: 10px;
195
+ }
196
+ .ax-step__num {
197
+ width: 22px; height: 22px; border-radius: 4px;
198
+ background: color-mix(in oklch, var(--ax-accent) 15%, var(--ax-surface));
199
+ border: 1px solid color-mix(in oklch, var(--ax-accent) 45%, var(--ax-border-2));
200
+ color: var(--ax-accent);
201
+ display: inline-flex; align-items: center; justify-content: center;
202
+ font-family: var(--ax-mono); font-size: 11px; font-weight: 700;
203
+ letter-spacing: 0; text-transform: none;
204
+ }
205
+
206
+ /* --- Stat strip (the "COUNT / label" cards across the top of Live) --- */
207
+ .ax-statstrip {
208
+ display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
209
+ gap: var(--ax-gap); padding: var(--ax-pad) var(--ax-pad) 0;
210
+ }
211
+ .ax-stat {
212
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
213
+ border-radius: var(--ax-radius); padding: 14px 16px;
214
+ }
215
+ .ax-stat__label {
216
+ font-size: var(--ax-fs-xs); text-transform: uppercase; letter-spacing: 0.06em;
217
+ color: var(--ax-muted); display: flex; align-items: center; gap: 6px;
218
+ }
219
+ .ax-stat__value {
220
+ font-size: 24px; font-weight: 600; margin-top: 4px; letter-spacing: -0.02em;
221
+ font-family: var(--ax-mono); font-variant-numeric: tabular-nums;
222
+ }
223
+ .ax-stat__sub {
224
+ font-size: var(--ax-fs-xs); color: var(--ax-muted); margin-top: 2px;
225
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
226
+ }
227
+ .ax-stat--live .ax-stat__value { color: var(--ax-accent); }
228
+ .ax-stat--warn .ax-stat__value { color: var(--ax-warn); }
229
+ .ax-stat--err .ax-stat__value { color: var(--ax-err); }
230
+
231
+ /* --- Forms --- */
232
+ .ax-field { margin: 10px 0 0; }
233
+ .ax-field:first-child { margin-top: 0; }
234
+ .ax-field label {
235
+ display: block; margin-bottom: 5px;
236
+ font-size: var(--ax-fs-xs); color: var(--ax-muted);
237
+ text-transform: uppercase; letter-spacing: 0.06em; font-weight: 500;
238
+ }
239
+ .ax-field label .ax-hint {
240
+ text-transform: none; letter-spacing: 0; color: var(--ax-muted);
241
+ font-weight: 400; font-size: var(--ax-fs-xs); margin-left: 6px;
242
+ }
243
+ .ax-field input, .ax-field textarea, .ax-field select {
244
+ width: 100%;
245
+ background: var(--ax-bg); color: var(--ax-text);
246
+ border: 1px solid var(--ax-border-2); border-radius: var(--ax-radius);
247
+ padding: 8px 10px; font: inherit; font-size: var(--ax-fs);
248
+ transition: border-color 0.1s ease;
249
+ }
250
+ .ax-field input:focus, .ax-field textarea:focus, .ax-field select:focus {
251
+ outline: none; border-color: var(--ax-accent);
252
+ box-shadow: 0 0 0 2px color-mix(in oklch, var(--ax-accent) 18%, transparent);
253
+ }
254
+ .ax-field textarea { resize: vertical; min-height: 72px; font-family: var(--ax-font); }
255
+ .ax-field input::placeholder, .ax-field textarea::placeholder {
256
+ color: var(--ax-muted); opacity: 0.7;
257
+ }
258
+
259
+ .ax-row { display: flex; gap: 12px; }
260
+ .ax-row > * { flex: 1; }
261
+
262
+ /* --- Section titles shared across pages --- */
263
+ .ax-section-title {
264
+ display: flex; justify-content: space-between; align-items: center;
265
+ margin-bottom: 12px;
266
+ }
267
+ .ax-section-title__label {
268
+ font-size: var(--ax-fs-xs); text-transform: uppercase;
269
+ letter-spacing: 0.08em; color: var(--ax-muted);
270
+ }
271
+ .ax-section-title__right {
272
+ display: flex; align-items: center; gap: 8px;
273
+ font-size: var(--ax-fs-xs); color: var(--ax-muted);
274
+ }
275
+
276
+ /* ============================================================
277
+ * Settings-page design system (also reusable on other pages).
278
+ * Ported from the Stitch redesign mockup so the primitives can
279
+ * be consumed by any page \u2014 not just /admin. Sections:
280
+ * page-head \u2014 kicker + h1 + lead paragraph
281
+ * health-strip \u2014 4-up status cards with coloured dot
282
+ * wit \u2014 dismissable "what is this?" info banner
283
+ * section-head \u2014 icon chip + title + lead + right-aligned CTA
284
+ * row-card \u2014 list row with avatar + info + actions + expand
285
+ * avatar \u2014 coloured-initial square (teal/coral/amber/blue)
286
+ * pill \u2014 small status pill with coloured dot (chip-flavor)
287
+ * connectors \u2014 2-up grid of connector cards
288
+ * tab-count \u2014 mono count bubble on a tab
289
+ * toast \u2014 bottom-right ephemeral notification
290
+ * modal \u2014 simple centred dialog + backdrop
291
+ * sec-label \u2014 uppercase mini-heading with optional CTA
292
+ * ============================================================ */
293
+
294
+ /* --- Page head --- */
295
+ .ax-page-head {
296
+ max-width: 1040px; margin: 0 auto; padding: 28px 24px 12px;
297
+ }
298
+ .ax-page-head .ax-kicker {
299
+ display: inline-block; font-size: 10px; letter-spacing: 0.1em;
300
+ color: var(--ax-muted); text-transform: uppercase; margin-bottom: 6px;
301
+ font-family: var(--ax-mono);
302
+ }
303
+ .ax-page-head h1 {
304
+ font-size: 22px; font-weight: 600; letter-spacing: -0.015em;
305
+ margin: 0 0 4px; display: flex; align-items: center; gap: 10px;
306
+ }
307
+ .ax-page-head .ax-lead {
308
+ color: var(--ax-text-2); margin: 0; font-size: 13px;
309
+ max-width: 640px; line-height: 1.6;
310
+ }
311
+ .ax-page-head .ax-lead code {
312
+ font-family: var(--ax-mono); font-size: 11.5px;
313
+ background: var(--ax-surface-2); padding: 1px 6px; border-radius: 3px;
314
+ }
315
+
316
+ /* --- Health strip --- */
317
+ .ax-health-strip {
318
+ max-width: 1040px; margin: 18px auto 22px; padding: 0 24px;
319
+ display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px;
320
+ }
321
+ .ax-health-card {
322
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
323
+ border-radius: var(--ax-radius-sm); padding: 12px 14px;
324
+ display: flex; align-items: center; gap: 11px;
325
+ transition: border-color 120ms;
326
+ }
327
+ .ax-health-card:hover { border-color: var(--ax-border-2); }
328
+ .ax-health-card .ax-hc-dot {
329
+ width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;
330
+ }
331
+ .ax-health-card .ax-hc-dot--ok {
332
+ background: var(--ax-accent);
333
+ box-shadow: 0 0 8px color-mix(in oklch, var(--ax-accent) 50%, transparent);
334
+ }
335
+ .ax-health-card .ax-hc-dot--warn { background: var(--ax-warn); }
336
+ .ax-health-card .ax-hc-dot--off { background: var(--ax-border-2); }
337
+ .ax-health-card .ax-hc-txt { flex: 1; min-width: 0; }
338
+ .ax-health-card .ax-hc-num {
339
+ font-size: 17px; font-weight: 600; letter-spacing: -0.015em;
340
+ }
341
+ .ax-health-card .ax-hc-lbl {
342
+ font-size: 11px; color: var(--ax-muted); margin-top: 1px;
343
+ }
344
+
345
+ /* --- "What is this?" info banner (dismissable) --- */
346
+ .ax-wit {
347
+ background: color-mix(in oklch, var(--ax-info) 6%, var(--ax-bg-elev));
348
+ border: 1px solid color-mix(in oklch, var(--ax-info) 22%, var(--ax-border));
349
+ border-radius: var(--ax-radius-sm); padding: 12px 14px; margin-bottom: 18px;
350
+ font-size: 12.5px; color: var(--ax-text-2); line-height: 1.6;
351
+ display: flex; gap: 10px; align-items: flex-start;
352
+ }
353
+ .ax-wit__icon {
354
+ width: 18px; height: 18px; border-radius: 50%;
355
+ background: color-mix(in oklch, var(--ax-info) 18%, transparent);
356
+ color: var(--ax-info);
357
+ display: grid; place-items: center;
358
+ font-size: 11px; font-weight: 600; flex-shrink: 0; margin-top: 1px;
359
+ }
360
+ .ax-wit b { color: var(--ax-text); font-weight: 600; }
361
+ .ax-wit code {
362
+ font-family: var(--ax-mono); font-size: 11.5px;
363
+ background: var(--ax-bg); padding: 1px 5px; border-radius: 3px;
364
+ border: 1px solid var(--ax-border);
365
+ }
366
+ .ax-wit .ax-wit__dismiss {
367
+ background: transparent; border: 0; color: var(--ax-muted);
368
+ font-size: 16px; cursor: pointer; margin-left: auto;
369
+ padding: 0 4px; line-height: 1;
370
+ }
371
+ .ax-wit .ax-wit__dismiss:hover { color: var(--ax-text); }
372
+
373
+ /* --- Section head (icon + title + lead + right CTA) --- */
374
+ .ax-section-head {
375
+ display: flex; align-items: flex-start; gap: 16px; margin-bottom: 18px;
376
+ }
377
+ .ax-section-head__icon {
378
+ width: 44px; height: 44px; border-radius: 10px;
379
+ background: color-mix(in oklch, var(--ax-accent) 10%, var(--ax-surface));
380
+ border: 1px solid color-mix(in oklch, var(--ax-accent) 25%, var(--ax-border));
381
+ display: grid; place-items: center; flex-shrink: 0;
382
+ color: var(--ax-accent);
383
+ }
384
+ .ax-section-head__icon svg { width: 22px; height: 22px; }
385
+ .ax-section-head__text { flex: 1; }
386
+ .ax-section-head h2 {
387
+ font-size: 18px; margin: 0 0 3px;
388
+ font-weight: 600; letter-spacing: -0.01em;
389
+ }
390
+ .ax-section-head .ax-lead {
391
+ color: var(--ax-text-2); margin: 0; font-size: 13px; line-height: 1.55;
392
+ max-width: 640px;
393
+ }
394
+
395
+ /* --- Row cards (collapsible list items) --- */
396
+ .ax-stack { display: flex; flex-direction: column; gap: 10px; }
397
+ .ax-row-card {
398
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
399
+ border-radius: var(--ax-radius-lg); padding: 14px 16px;
400
+ transition: border-color 160ms, transform 160ms;
401
+ }
402
+ .ax-row-card:hover { border-color: var(--ax-border-2); }
403
+ .ax-row-card__top { display: flex; align-items: center; gap: 12px; }
404
+ .ax-row-card__info { flex: 1; min-width: 0; }
405
+ .ax-row-card__info .ax-name {
406
+ font-size: 14px; font-weight: 600; letter-spacing: -0.005em;
407
+ display: flex; align-items: center; gap: 8px;
408
+ }
409
+ .ax-row-card__info .ax-slug {
410
+ font-family: var(--ax-mono); font-size: 11px;
411
+ color: var(--ax-muted); margin-left: 4px;
412
+ }
413
+ .ax-row-card__info .ax-sub {
414
+ font-size: 12px; color: var(--ax-text-2); margin-top: 3px;
415
+ line-height: 1.5; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
416
+ }
417
+ .ax-row-card__actions { display: flex; gap: 6px; align-items: center; }
418
+ .ax-row-card__details {
419
+ display: none; margin-top: 14px; padding-top: 14px;
420
+ border-top: 1px dashed var(--ax-border);
421
+ font-size: 12.5px; color: var(--ax-text-2); line-height: 1.6;
422
+ }
423
+ .ax-row-card.is-open .ax-row-card__details { display: block; }
424
+ .ax-row-card.is-open .ax-chev { transform: rotate(180deg); }
425
+ .ax-chev { transition: transform 160ms; }
426
+
427
+ .ax-detail-grid {
428
+ display: grid; grid-template-columns: repeat(2, 1fr);
429
+ gap: 12px 20px; margin-bottom: 12px;
430
+ }
431
+ .ax-detail-grid dt {
432
+ font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase;
433
+ color: var(--ax-muted); margin-bottom: 3px; font-family: var(--ax-mono);
434
+ }
435
+ .ax-detail-grid dd {
436
+ margin: 0; font-size: 12.5px; color: var(--ax-text);
437
+ }
438
+ .ax-triggers { display: flex; gap: 4px; flex-wrap: wrap; }
439
+ .ax-trigger-pill {
440
+ font-family: var(--ax-mono); font-size: 11px;
441
+ padding: 2px 8px; background: var(--ax-bg);
442
+ border: 1px solid var(--ax-border); border-radius: 4px;
443
+ color: var(--ax-text);
444
+ }
445
+
446
+ /* --- Avatars (coloured initial square) --- */
447
+ .ax-avatar {
448
+ width: 36px; height: 36px; border-radius: 9px; flex-shrink: 0;
449
+ background: var(--ax-surface-2); border: 1px solid var(--ax-border-2);
450
+ display: grid; place-items: center;
451
+ font-weight: 600; font-size: 14px; letter-spacing: -0.01em;
452
+ color: var(--ax-text);
453
+ }
454
+ .ax-avatar--teal {
455
+ background: color-mix(in oklch, var(--ax-accent) 18%, var(--ax-surface));
456
+ border-color: color-mix(in oklch, var(--ax-accent) 35%, var(--ax-border));
457
+ color: var(--ax-accent);
458
+ }
459
+ .ax-avatar--coral {
460
+ background: color-mix(in oklch, var(--ax-err) 14%, var(--ax-surface));
461
+ border-color: color-mix(in oklch, var(--ax-err) 30%, var(--ax-border));
462
+ color: var(--ax-err);
463
+ }
464
+ .ax-avatar--amber {
465
+ background: color-mix(in oklch, var(--ax-warn) 14%, var(--ax-surface));
466
+ border-color: color-mix(in oklch, var(--ax-warn) 30%, var(--ax-border));
467
+ color: var(--ax-warn);
468
+ }
469
+ .ax-avatar--blue {
470
+ background: color-mix(in oklch, var(--ax-info) 14%, var(--ax-surface));
471
+ border-color: color-mix(in oklch, var(--ax-info) 30%, var(--ax-border));
472
+ color: var(--ax-info);
473
+ }
474
+
475
+ /* --- Pills (status indicator with coloured dot) ---
476
+ *
477
+ * Different from .ax-badge: pills have a rounded (10px) shape, a small
478
+ * leading coloured dot, and stronger semantics (ok/warn/off/info). Use
479
+ * for "live", "idle", "receiving", "stale" states next to a name.
480
+ */
481
+ .ax-pill {
482
+ display: inline-flex; align-items: center; gap: 5px;
483
+ font-size: 11px; padding: 2px 8px; line-height: 16px;
484
+ border-radius: 10px; background: var(--ax-surface-2);
485
+ color: var(--ax-text-2); border: 1px solid var(--ax-border);
486
+ white-space: nowrap;
487
+ }
488
+ .ax-pill .ax-pill__dot {
489
+ width: 6px; height: 6px; border-radius: 50%; background: currentColor;
490
+ }
491
+ .ax-pill--ok {
492
+ background: color-mix(in oklch, var(--ax-accent) 14%, transparent);
493
+ color: var(--ax-accent);
494
+ border-color: color-mix(in oklch, var(--ax-accent) 30%, transparent);
495
+ }
496
+ .ax-pill--warn {
497
+ background: color-mix(in oklch, var(--ax-warn) 14%, transparent);
498
+ color: var(--ax-warn);
499
+ border-color: color-mix(in oklch, var(--ax-warn) 30%, transparent);
500
+ }
501
+ .ax-pill--off { color: var(--ax-muted); }
502
+ .ax-pill--info {
503
+ background: color-mix(in oklch, var(--ax-info) 14%, transparent);
504
+ color: var(--ax-info);
505
+ border-color: color-mix(in oklch, var(--ax-info) 30%, transparent);
506
+ }
507
+
508
+ /* --- Connectors grid (Channels tab) --- */
509
+ .ax-connectors {
510
+ display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px;
511
+ }
512
+ .ax-connector {
513
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
514
+ border-radius: var(--ax-radius-lg); padding: 18px 18px 16px;
515
+ cursor: pointer; position: relative;
516
+ transition: border-color 160ms, transform 160ms, background 160ms;
517
+ }
518
+ .ax-connector:hover { border-color: var(--ax-border-2); background: var(--ax-surface-2); }
519
+ .ax-connector.is-on {
520
+ border-color: color-mix(in oklch, var(--ax-accent) 40%, var(--ax-border));
521
+ }
522
+ .ax-connector.is-active {
523
+ border-color: var(--ax-accent);
524
+ background: color-mix(in oklch, var(--ax-accent) 8%, var(--ax-surface));
525
+ }
526
+ .ax-connector__top {
527
+ display: flex; align-items: center; gap: 12px; margin-bottom: 10px;
528
+ }
529
+ .ax-connector__logo {
530
+ width: 40px; height: 40px; border-radius: 10px;
531
+ display: grid; place-items: center;
532
+ font-weight: 700; font-size: 15px; letter-spacing: -0.02em; flex-shrink: 0;
533
+ background: var(--ax-surface-2); border: 1px solid var(--ax-border-2);
534
+ color: var(--ax-text); font-family: var(--ax-mono);
535
+ }
536
+ .ax-connector__meta { flex: 1; }
537
+ .ax-connector__name {
538
+ font-weight: 600; font-size: 14px; letter-spacing: -0.005em;
539
+ }
540
+ .ax-connector__sub {
541
+ font-size: 11.5px; color: var(--ax-muted); margin-top: 2px;
542
+ }
543
+ .ax-connector__status { margin-left: auto; }
544
+ .ax-connector__desc {
545
+ font-size: 12.5px; color: var(--ax-text-2); line-height: 1.5; min-height: 36px;
546
+ }
547
+ .ax-connector__foot {
548
+ margin-top: 12px; display: flex; align-items: center; justify-content: space-between;
549
+ font-size: 11.5px; color: var(--ax-muted);
550
+ }
551
+ .ax-connector__cta {
552
+ color: var(--ax-accent); font-weight: 500;
553
+ display: inline-flex; align-items: center; gap: 4px;
554
+ }
555
+ .ax-connector__cta svg { width: 12px; height: 12px; }
556
+
557
+ /* --- Tab counts + warn indicator --- */
558
+ .ax-tab-count {
559
+ font-family: var(--ax-mono); font-size: 10px;
560
+ padding: 1px 6px; background: var(--ax-surface-2);
561
+ color: var(--ax-muted); border-radius: 9px; line-height: 14px;
562
+ margin-left: 6px;
563
+ }
564
+ .is-active .ax-tab-count {
565
+ background: color-mix(in oklch, var(--ax-accent) 18%, transparent);
566
+ color: var(--ax-accent);
567
+ }
568
+ .ax-tab-warn {
569
+ width: 6px; height: 6px; border-radius: 50%; background: var(--ax-warn);
570
+ display: inline-block; margin-left: 6px;
571
+ }
572
+
573
+ /* --- Section mini-labels --- */
574
+ .ax-sec-label {
575
+ display: flex; align-items: center; justify-content: space-between;
576
+ margin: 22px 0 10px;
577
+ }
578
+ .ax-sec-label h3 {
579
+ font-size: 12px; font-weight: 600; letter-spacing: 0.06em;
580
+ text-transform: uppercase; color: var(--ax-muted);
581
+ margin: 0; font-family: var(--ax-mono);
582
+ }
583
+
584
+ /* --- Toast --- */
585
+ .ax-toast {
586
+ position: fixed; bottom: 24px; right: 24px;
587
+ background: var(--ax-surface-2);
588
+ border: 1px solid var(--ax-accent); color: var(--ax-text);
589
+ padding: 10px 16px; border-radius: 6px; font-size: 12.5px;
590
+ display: flex; align-items: center; gap: 10px;
591
+ box-shadow: 0 10px 30px rgba(0,0,0,0.3);
592
+ opacity: 0; transform: translateY(10px); pointer-events: none;
593
+ transition: opacity 200ms, transform 200ms; z-index: 100;
594
+ }
595
+ .ax-toast.is-show { opacity: 1; transform: none; }
596
+ .ax-toast__icon { color: var(--ax-accent); }
597
+
598
+ /* --- Modal (centred dialog + backdrop) --- */
599
+ .ax-modal-bd {
600
+ position: fixed; inset: 0;
601
+ background: color-mix(in oklch, var(--ax-bg) 60%, black);
602
+ display: none; align-items: center; justify-content: center;
603
+ z-index: 200; padding: 24px;
604
+ }
605
+ .ax-modal-bd.is-show { display: flex; }
606
+ .ax-modal {
607
+ width: min(560px, 94vw); max-height: 86vh; overflow: auto;
608
+ background: var(--ax-surface); border: 1px solid var(--ax-border-2);
609
+ border-radius: 12px; padding: 0;
610
+ box-shadow: 0 20px 60px rgba(0,0,0,0.5);
611
+ }
612
+ .ax-modal > header {
613
+ padding: 18px 22px 10px; border-bottom: 1px solid var(--ax-border);
614
+ display: flex; align-items: center; gap: 10px;
615
+ }
616
+ .ax-modal > header h3 {
617
+ margin: 0; font-size: 16px; font-weight: 600; letter-spacing: -0.01em; flex: 1;
618
+ }
619
+ .ax-modal > header .ax-modal__close {
620
+ background: transparent; border: 0; color: var(--ax-muted);
621
+ font-size: 22px; cursor: pointer; line-height: 1; padding: 0 6px;
622
+ }
623
+ .ax-modal__body { padding: 18px 22px; }
624
+ .ax-modal__foot {
625
+ padding: 12px 22px 18px;
626
+ display: flex; justify-content: flex-end; gap: 8px;
627
+ border-top: 1px solid var(--ax-border);
628
+ }
629
+
630
+ /* --- Mesh hero (enable toggle + SVG network viz) --- */
631
+ .ax-mesh-hero {
632
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
633
+ border-radius: var(--ax-radius-lg); padding: 20px;
634
+ display: grid; grid-template-columns: 1fr 240px; gap: 24px;
635
+ align-items: center; margin-bottom: 18px;
636
+ }
637
+ .ax-mesh-hero h3 { margin: 0 0 4px; font-size: 15px; font-weight: 600; }
638
+ .ax-mesh-hero p { margin: 0 0 12px; font-size: 12.5px; color: var(--ax-text-2); line-height: 1.5; }
639
+ .ax-mesh-viz { position: relative; width: 240px; height: 140px; }
640
+ .ax-mesh-dot {
641
+ position: absolute; width: 44px; height: 44px; border-radius: 50%;
642
+ background: var(--ax-surface-2); border: 2px solid var(--ax-border-2);
643
+ display: grid; place-items: center;
644
+ font-family: var(--ax-mono); font-size: 10px; font-weight: 600;
645
+ color: var(--ax-text-2);
646
+ }
647
+ .ax-mesh-dot.self {
648
+ background: color-mix(in oklch, var(--ax-accent) 18%, var(--ax-surface));
649
+ border-color: var(--ax-accent); color: var(--ax-accent);
650
+ }
651
+ .ax-mesh-dot.empty {
652
+ border-style: dashed; color: var(--ax-muted); font-size: 14px;
653
+ }
654
+ .ax-mesh-wires { position: absolute; inset: 0; }
655
+ .ax-mesh-wires line { stroke: var(--ax-border-2); stroke-width: 1.5; stroke-dasharray: 3 3; }
656
+ .ax-mesh-wires line.live { stroke: var(--ax-accent); stroke-dasharray: 0; opacity: 0.6; }
657
+
658
+ /* Pill-shaped toggle (used for the mesh enable switch + similar binary actions). */
659
+ .ax-mesh-toggle {
660
+ display: inline-flex; align-items: center; gap: 10px;
661
+ background: var(--ax-bg-elev); border: 1px solid var(--ax-border);
662
+ border-radius: 20px; padding: 4px 14px 4px 5px;
663
+ cursor: pointer; user-select: none; font-size: 12px;
664
+ }
665
+ .ax-mesh-switch {
666
+ width: 32px; height: 18px; background: var(--ax-surface-3);
667
+ border-radius: 9px; position: relative; transition: background 160ms;
668
+ }
669
+ .ax-mesh-switch::after {
670
+ content: ""; position: absolute; top: 2px; left: 2px;
671
+ width: 14px; height: 14px; border-radius: 50%;
672
+ background: var(--ax-text-2); transition: all 160ms;
673
+ }
674
+ .ax-mesh-toggle.is-on .ax-mesh-switch {
675
+ background: color-mix(in oklch, var(--ax-accent) 80%, transparent);
676
+ }
677
+ .ax-mesh-toggle.is-on .ax-mesh-switch::after {
678
+ left: 16px; background: var(--ax-bg);
679
+ }
680
+
681
+ /* --- Schedule builder: sentence-builder + pill picks + day picker --- */
682
+ .ax-builder {
683
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
684
+ border-radius: var(--ax-radius-lg); padding: 20px;
685
+ }
686
+ .ax-builder h3 {
687
+ margin: 0 0 4px; font-size: 15px; font-weight: 600; letter-spacing: -0.005em;
688
+ }
689
+ .ax-builder__hint { margin: 0 0 16px; font-size: 12.5px; color: var(--ax-muted); }
690
+ .ax-builder__lbl {
691
+ display: block; font-size: 11px; color: var(--ax-muted);
692
+ letter-spacing: 0.03em; text-transform: uppercase; margin: 12px 0 5px;
693
+ font-weight: 500;
694
+ }
695
+ .ax-builder__lbl .opt {
696
+ text-transform: none; letter-spacing: 0; font-weight: 400;
697
+ opacity: 0.75; margin-left: 6px;
698
+ }
699
+ .ax-builder__inp {
700
+ width: 100%; background: var(--ax-bg); color: var(--ax-text);
701
+ border: 1px solid var(--ax-border); border-radius: 5px;
702
+ padding: 8px 11px; font: inherit; font-size: 13px;
703
+ transition: border-color 120ms, box-shadow 120ms;
704
+ }
705
+ .ax-builder__inp:focus {
706
+ outline: none; border-color: var(--ax-accent);
707
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--ax-accent) 18%, transparent);
708
+ }
709
+ textarea.ax-builder__inp { min-height: 80px; line-height: 1.5; resize: vertical; }
710
+
711
+ .ax-mode-switch {
712
+ display: inline-flex; background: var(--ax-surface-2);
713
+ border: 1px solid var(--ax-border); border-radius: 6px; padding: 3px;
714
+ margin-bottom: 14px;
715
+ }
716
+ .ax-mode-switch button {
717
+ background: transparent; border: 0; color: var(--ax-muted);
718
+ padding: 6px 14px; font: inherit; font-size: 12px; cursor: pointer;
719
+ border-radius: 4px; font-weight: 500;
720
+ }
721
+ .ax-mode-switch button.is-active {
722
+ background: var(--ax-surface); color: var(--ax-text);
723
+ }
724
+
725
+ .ax-sentence {
726
+ display: flex; align-items: center; gap: 8px;
727
+ font-size: 16px; line-height: 1.9; flex-wrap: wrap;
728
+ margin-bottom: 14px; padding: 14px 16px;
729
+ background: var(--ax-bg-elev); border: 1px solid var(--ax-border);
730
+ border-radius: var(--ax-radius-sm);
731
+ }
732
+ .ax-sentence > span { color: var(--ax-text-2); }
733
+ .ax-pill-pick {
734
+ background: var(--ax-surface); border: 1px solid var(--ax-border-2);
735
+ color: var(--ax-accent); padding: 3px 10px; border-radius: 6px;
736
+ font-size: 14px; font-family: inherit; cursor: pointer; font-weight: 500;
737
+ }
738
+ .ax-pill-pick:hover { background: var(--ax-surface-2); border-color: var(--ax-accent); }
739
+ .ax-pill-pick--sm { font-size: 13px; padding: 3px 8px; }
740
+
741
+ .ax-day-picker { display: flex; gap: 4px; }
742
+ .ax-day-picker button {
743
+ width: 30px; height: 30px; border-radius: 6px;
744
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
745
+ color: var(--ax-muted); font: inherit; font-size: 11px; font-weight: 500;
746
+ cursor: pointer;
747
+ }
748
+ .ax-day-picker button:hover { border-color: var(--ax-border-2); color: var(--ax-text); }
749
+ .ax-day-picker button.is-active {
750
+ background: color-mix(in oklch, var(--ax-accent) 20%, var(--ax-surface));
751
+ border-color: var(--ax-accent); color: var(--ax-accent);
752
+ }
753
+
754
+ .ax-preview-box {
755
+ background: color-mix(in oklch, var(--ax-accent) 5%, var(--ax-bg-elev));
756
+ border: 1px solid color-mix(in oklch, var(--ax-accent) 20%, var(--ax-border));
757
+ border-radius: var(--ax-radius-sm); padding: 12px 14px; margin-top: 12px;
758
+ font-size: 12.5px; color: var(--ax-text-2);
759
+ display: flex; align-items: center; gap: 10px;
760
+ }
761
+ .ax-preview-box svg { width: 15px; height: 15px; color: var(--ax-accent); flex-shrink: 0; }
762
+ .ax-preview-box b { color: var(--ax-text); font-weight: 600; }
763
+
764
+ .ax-cron-hints {
765
+ display: grid; grid-template-columns: repeat(2, 1fr); gap: 6px 18px;
766
+ margin-top: 10px; font-size: 11.5px; color: var(--ax-muted);
767
+ }
768
+ .ax-cron-hints code {
769
+ font-family: var(--ax-mono); color: var(--ax-text);
770
+ background: var(--ax-bg); border: 1px solid var(--ax-border);
771
+ padding: 1px 6px; border-radius: 3px; margin-right: 6px;
772
+ }
773
+
774
+ /* --- JSON tree viewer (Advanced tab) --- */
775
+ .ax-jv-toolbar {
776
+ display: flex; align-items: center; gap: 8px;
777
+ padding: 8px 12px; background: var(--ax-bg-elev);
778
+ border: 1px solid var(--ax-border); border-bottom: 0;
779
+ border-radius: var(--ax-radius) var(--ax-radius) 0 0;
780
+ }
781
+ .ax-jv-toolbar .ax-jv-spacer { flex: 1; }
782
+ .ax-jv-toolbar .ax-jv-seg {
783
+ display: inline-flex; background: var(--ax-surface);
784
+ border: 1px solid var(--ax-border); border-radius: 5px; padding: 2px;
785
+ }
786
+ .ax-jv-toolbar .ax-jv-seg button {
787
+ background: transparent; border: 0; color: var(--ax-muted);
788
+ padding: 4px 10px; font: inherit; font-size: 11px;
789
+ cursor: pointer; border-radius: 4px;
790
+ }
791
+ .ax-jv-toolbar .ax-jv-seg button.is-active { background: var(--ax-surface-2); color: var(--ax-text); }
792
+ .ax-jv-search {
793
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
794
+ border-radius: 5px; padding: 4px 9px; font: inherit; font-size: 12px;
795
+ color: var(--ax-text); width: 180px;
796
+ }
797
+ .ax-jv-search:focus { outline: none; border-color: var(--ax-accent); }
798
+
799
+ .ax-jv-viewer {
800
+ background: var(--ax-bg-elev); border: 1px solid var(--ax-border);
801
+ border-top: 0; border-radius: 0 0 var(--ax-radius) var(--ax-radius);
802
+ font-family: var(--ax-mono); font-size: 12.5px; line-height: 1.75;
803
+ padding: 14px 18px; max-height: 620px; overflow: auto;
804
+ }
805
+ .ax-jv-line {
806
+ display: flex; align-items: flex-start; padding: 1px 0; gap: 0;
807
+ position: relative; border-radius: 3px; white-space: nowrap;
808
+ }
809
+ .ax-jv-line:hover { background: color-mix(in oklch, var(--ax-accent) 5%, transparent); }
810
+ .ax-jv-line.is-match { background: color-mix(in oklch, var(--ax-warn) 16%, transparent); }
811
+ .ax-jv-toggle {
812
+ width: 12px; display: inline-block; color: var(--ax-muted);
813
+ cursor: pointer; user-select: none; text-align: center;
814
+ font-size: 9px; line-height: 1.75;
815
+ }
816
+ .ax-jv-toggle.empty { cursor: default; }
817
+ .ax-jv-key { color: var(--ax-info); margin-right: 0; }
818
+ .ax-jv-punc { color: var(--ax-muted); }
819
+ .ax-jv-string { color: var(--ax-accent); }
820
+ .ax-jv-number { color: var(--ax-warn); }
821
+ .ax-jv-bool { color: var(--ax-info); font-weight: 500; }
822
+ .ax-jv-null { color: var(--ax-muted); font-style: italic; }
823
+ .ax-jv-comment {
824
+ color: var(--ax-muted); font-family: var(--ax-font);
825
+ font-style: italic; font-size: 11.5px; margin-left: 8px; opacity: 0.8;
826
+ }
827
+ .ax-jv-children {
828
+ padding-left: 18px;
829
+ border-left: 1px dashed color-mix(in oklch, var(--ax-border) 80%, transparent);
830
+ margin-left: 4px;
831
+ }
832
+ .ax-jv-children.is-collapsed { display: none; }
833
+ .ax-jv-collapsed-note {
834
+ color: var(--ax-muted); font-size: 11px; font-style: italic; margin-left: 4px;
835
+ }
836
+ .ax-jv-empty-brace { color: var(--ax-muted); }
837
+
838
+ /* ============================================================
839
+ * Detail-page primitives (Agent manage, and any future
840
+ * detail-view). Built around a 3-col layout:
841
+ *
842
+ * [rail 200px] [main] [test-drive 360px]
843
+ *
844
+ * Scales down: test-drive hides at 1180px, rail hides at 780px.
845
+ * ============================================================ */
846
+
847
+ /* Crumb */
848
+ .ax-crumb {
849
+ max-width: 1400px; margin: 0 auto; padding: 16px 24px 0;
850
+ font-size: 12px; color: var(--ax-muted);
851
+ display: flex; align-items: center; gap: 6px;
852
+ }
853
+ .ax-crumb a { color: var(--ax-muted); }
854
+ .ax-crumb a:hover { color: var(--ax-accent); text-decoration: none; }
855
+ .ax-crumb .ax-crumb__sep { color: var(--ax-border-2); }
856
+ .ax-crumb .ax-crumb__cur { color: var(--ax-text); }
857
+
858
+ /* Hero \u2014 large avatar + editable name + chip row + actions */
859
+ .ax-hero {
860
+ max-width: 1400px; margin: 0 auto; padding: 14px 24px 18px;
861
+ display: flex; align-items: center; gap: 18px; flex-wrap: wrap;
862
+ }
863
+ .ax-hero__ava {
864
+ width: 64px; height: 64px; border-radius: 14px;
865
+ background: color-mix(in oklch, var(--ax-accent) 20%, var(--ax-surface));
866
+ border: 1px solid color-mix(in oklch, var(--ax-accent) 40%, var(--ax-border));
867
+ display: grid; place-items: center;
868
+ font-weight: 700; font-size: 22px; letter-spacing: -0.02em;
869
+ color: var(--ax-accent); flex-shrink: 0; position: relative;
870
+ }
871
+ .ax-hero__on {
872
+ position: absolute; bottom: -2px; right: -2px;
873
+ width: 16px; height: 16px; border-radius: 50%;
874
+ background: var(--ax-accent); border: 3px solid var(--ax-bg);
875
+ }
876
+ .ax-hero__title { flex: 1; min-width: 260px; }
877
+ .ax-hero h1 {
878
+ margin: 0 0 3px; font-size: 22px; font-weight: 600;
879
+ letter-spacing: -0.02em; display: flex; align-items: center; gap: 10px;
880
+ }
881
+ .ax-hero h1 input {
882
+ background: transparent; border: 0; color: var(--ax-text);
883
+ font: inherit; padding: 0; border-bottom: 1px dashed transparent;
884
+ transition: border-color 120ms; max-width: 260px;
885
+ }
886
+ .ax-hero h1 input:hover { border-color: var(--ax-border-2); }
887
+ .ax-hero h1 input:focus { outline: none; border-color: var(--ax-accent); }
888
+ .ax-hero__sub {
889
+ color: var(--ax-text-2); font-size: 13px; margin-top: 2px;
890
+ display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
891
+ }
892
+ .ax-hero__sub .ax-hero__dot {
893
+ width: 3px; height: 3px; background: var(--ax-border-2); border-radius: 50%;
894
+ }
895
+ .ax-hero__actions { display: flex; gap: 8px; align-items: center; }
896
+
897
+ /* Inline stats strip (smaller than the settings health strip \u2014 fits in
898
+ * the detail page hero below the hero title). */
899
+ .ax-stats-inline {
900
+ max-width: 1400px; margin: 0 auto; padding: 0 24px;
901
+ display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px;
902
+ }
903
+ .ax-stat-inline {
904
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
905
+ border-radius: var(--ax-radius-sm); padding: 10px 12px;
906
+ display: flex; align-items: center; gap: 11px;
907
+ }
908
+ .ax-stat-inline__icon {
909
+ width: 26px; height: 26px; border-radius: 6px;
910
+ background: color-mix(in oklch, var(--ax-accent) 12%, var(--ax-surface-2));
911
+ display: grid; place-items: center;
912
+ color: var(--ax-accent); flex-shrink: 0;
913
+ }
914
+ .ax-stat-inline__icon svg { width: 14px; height: 14px; }
915
+ .ax-stat-inline__v {
916
+ font-size: 15px; font-weight: 600; letter-spacing: -0.01em; line-height: 1.1;
917
+ }
918
+ .ax-stat-inline__l {
919
+ font-size: 11px; color: var(--ax-muted); margin-top: 1px;
920
+ }
921
+
922
+ /* Detail layout \u2014 2-col rail + main. Overlays (test-drive, history, etc.)
923
+ * dock separately via fixed positioning. */
924
+ .ax-layout {
925
+ max-width: 1400px; margin: 22px auto 0; padding: 0 24px 60px;
926
+ display: grid; grid-template-columns: 200px 1fr;
927
+ gap: 22px; align-items: flex-start;
928
+ }
929
+
930
+ /* Left rail \u2014 sticky nav list with grouped items */
931
+ .ax-rail {
932
+ position: sticky; top: 72px;
933
+ display: flex; flex-direction: column; gap: 1px;
934
+ }
935
+ .ax-rail a {
936
+ display: flex; align-items: center; gap: 10px;
937
+ padding: 9px 11px; border-radius: 6px;
938
+ color: var(--ax-text-2); font-size: 13px; font-weight: 500;
939
+ cursor: pointer; position: relative;
940
+ transition: background 120ms, color 120ms;
941
+ }
942
+ .ax-rail a svg {
943
+ width: 15px; height: 15px; flex-shrink: 0; color: var(--ax-muted);
944
+ }
945
+ .ax-rail a:hover {
946
+ background: var(--ax-surface); color: var(--ax-text); text-decoration: none;
947
+ }
948
+ .ax-rail a:hover svg { color: var(--ax-text); }
949
+ .ax-rail a.is-active {
950
+ background: color-mix(in oklch, var(--ax-accent) 12%, var(--ax-surface));
951
+ color: var(--ax-accent);
952
+ }
953
+ .ax-rail a.is-active svg { color: var(--ax-accent); }
954
+ .ax-rail a.is-active::before {
955
+ content: ""; position: absolute; left: -3px; top: 7px; bottom: 7px;
956
+ width: 2px; border-radius: 2px; background: var(--ax-accent);
957
+ }
958
+ .ax-rail__count {
959
+ margin-left: auto; font-family: var(--ax-mono);
960
+ font-size: 10px; padding: 1px 6px; background: var(--ax-surface-2);
961
+ color: var(--ax-muted); border-radius: 9px; line-height: 14px;
962
+ }
963
+ .ax-rail a.is-active .ax-rail__count {
964
+ background: color-mix(in oklch, var(--ax-accent) 22%, transparent);
965
+ color: var(--ax-accent);
966
+ }
967
+ .ax-rail__sep { height: 1px; background: var(--ax-border); margin: 8px 4px; }
968
+ .ax-rail__label {
969
+ font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase;
970
+ color: var(--ax-muted); padding: 6px 11px 4px; font-family: var(--ax-mono);
971
+ }
972
+
973
+ /* Main panel containers (one per section) */
974
+ .ax-panel {
975
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
976
+ border-radius: var(--ax-radius-lg); padding: 22px;
977
+ }
978
+ .ax-panel + .ax-panel { margin-top: 12px; }
979
+ .ax-panel h2 {
980
+ margin: 0 0 4px; font-size: 16px; font-weight: 600; letter-spacing: -0.01em;
981
+ }
982
+ .ax-panel .ax-lead {
983
+ margin: 0 0 16px; font-size: 12.5px; color: var(--ax-text-2); line-height: 1.55;
984
+ }
985
+ .ax-panel__head {
986
+ display: flex; align-items: flex-start; justify-content: space-between;
987
+ gap: 12px; margin-bottom: 14px;
988
+ }
989
+ .ax-panel__head h2 { margin: 0 0 3px; }
990
+ .ax-panel__tab { display: none; animation: ax-fade 180ms ease; }
991
+ .ax-panel__tab.is-active { display: block; }
992
+ @keyframes ax-fade {
993
+ from { opacity: 0; transform: translateY(4px); }
994
+ to { opacity: 1; transform: none; }
995
+ }
996
+
997
+ /* Grids for form rows */
998
+ .ax-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
999
+ .ax-grid-3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; }
1000
+
1001
+ /* Slider-style setting row \u2014 label + hint + segmented options */
1002
+ .ax-slider-row {
1003
+ display: grid; grid-template-columns: 140px 1fr auto;
1004
+ gap: 12px; align-items: center;
1005
+ padding: 10px 0; border-bottom: 1px dashed var(--ax-border);
1006
+ }
1007
+ .ax-slider-row:last-child { border-bottom: 0; }
1008
+ .ax-slider-row label { font-size: 12.5px; color: var(--ax-text); margin: 0; }
1009
+ .ax-slider-row .ax-hint {
1010
+ margin: 0; color: var(--ax-muted); font-size: 11.5px;
1011
+ }
1012
+ .ax-slider-row .ax-opts {
1013
+ display: flex; gap: 4px; background: var(--ax-bg);
1014
+ border: 1px solid var(--ax-border); border-radius: 5px; padding: 2px;
1015
+ }
1016
+ .ax-slider-row .ax-opts button {
1017
+ background: transparent; border: 0; color: var(--ax-muted);
1018
+ padding: 5px 11px; font: inherit; font-size: 11.5px;
1019
+ cursor: pointer; border-radius: 3px; white-space: nowrap;
1020
+ }
1021
+ .ax-slider-row .ax-opts button.is-active {
1022
+ background: var(--ax-surface-2); color: var(--ax-text);
1023
+ }
1024
+
1025
+ /* Sub-tabs (Guided/Freeform, CLAUDE.md/SOUL.md/IDENTITY.md) */
1026
+ .ax-subtabs {
1027
+ display: inline-flex; background: var(--ax-bg);
1028
+ border: 1px solid var(--ax-border); border-radius: 6px;
1029
+ padding: 3px; margin-bottom: 16px;
1030
+ }
1031
+ .ax-subtabs button {
1032
+ background: transparent; border: 0; color: var(--ax-muted);
1033
+ padding: 6px 14px; font: inherit; font-size: 12px;
1034
+ cursor: pointer; border-radius: 4px; font-weight: 500;
1035
+ }
1036
+ .ax-subtabs button.is-active {
1037
+ background: var(--ax-surface-2); color: var(--ax-text);
1038
+ }
1039
+
1040
+ /* Trigger-word chips with inline input (for Wake words field) */
1041
+ .ax-triggers-edit {
1042
+ display: flex; flex-wrap: wrap; gap: 6px;
1043
+ background: var(--ax-bg); border: 1px solid var(--ax-border);
1044
+ padding: 7px; border-radius: 5px; min-height: 38px;
1045
+ align-items: center; cursor: text;
1046
+ }
1047
+ .ax-triggers-edit:focus-within {
1048
+ border-color: var(--ax-accent);
1049
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--ax-accent) 18%, transparent);
1050
+ }
1051
+ .ax-trig-pill {
1052
+ display: inline-flex; align-items: center; gap: 6px;
1053
+ font-family: var(--ax-mono); font-size: 11px;
1054
+ padding: 3px 4px 3px 9px;
1055
+ background: color-mix(in oklch, var(--ax-accent) 16%, var(--ax-surface));
1056
+ border: 1px solid color-mix(in oklch, var(--ax-accent) 30%, var(--ax-border));
1057
+ border-radius: 4px; color: var(--ax-accent);
1058
+ }
1059
+ .ax-trig-pill button {
1060
+ background: transparent; border: 0; color: currentColor;
1061
+ opacity: 0.6; cursor: pointer; font-size: 13px; line-height: 1;
1062
+ padding: 0 2px; border-radius: 3px;
1063
+ }
1064
+ .ax-trig-pill button:hover {
1065
+ opacity: 1;
1066
+ background: color-mix(in oklch, var(--ax-accent) 20%, transparent);
1067
+ }
1068
+ .ax-triggers-edit input {
1069
+ flex: 1; min-width: 120px;
1070
+ background: transparent; border: 0; color: var(--ax-text);
1071
+ font: inherit; font-size: 12.5px;
1072
+ padding: 4px 6px; font-family: var(--ax-mono);
1073
+ }
1074
+ .ax-triggers-edit input:focus { outline: none; }
1075
+
1076
+ /* Prompt editor (freeform CLAUDE.md) */
1077
+ .ax-prompt-edit { position: relative; }
1078
+ .ax-prompt-edit textarea { min-height: 220px; line-height: 1.6; }
1079
+ .ax-prompt-badges {
1080
+ position: absolute; top: 8px; right: 8px; display: flex; gap: 6px;
1081
+ }
1082
+ .ax-prompt-badges .ax-pbadge {
1083
+ font-size: 10px; padding: 3px 7px; border-radius: 3px;
1084
+ background: var(--ax-surface-2); color: var(--ax-muted);
1085
+ font-family: var(--ax-mono); letter-spacing: 0.03em;
1086
+ }
1087
+
1088
+ /* Skill gallery */
1089
+ .ax-skill-toolbar {
1090
+ display: flex; gap: 10px; align-items: center;
1091
+ margin-bottom: 14px; flex-wrap: wrap;
1092
+ }
1093
+ .ax-search {
1094
+ position: relative; flex: 1; min-width: 220px;
1095
+ }
1096
+ .ax-search svg {
1097
+ position: absolute; left: 10px; top: 50%; transform: translateY(-50%);
1098
+ width: 13px; height: 13px; color: var(--ax-muted); pointer-events: none;
1099
+ }
1100
+ .ax-search input { width: 100%; padding-left: 30px; }
1101
+ .ax-skill-filter {
1102
+ display: flex; gap: 4px; background: var(--ax-bg);
1103
+ border: 1px solid var(--ax-border); border-radius: 5px; padding: 2px;
1104
+ }
1105
+ .ax-skill-filter button {
1106
+ background: transparent; border: 0; color: var(--ax-muted);
1107
+ padding: 5px 10px; font: inherit; font-size: 11.5px;
1108
+ cursor: pointer; border-radius: 3px;
1109
+ }
1110
+ .ax-skill-filter button.is-active {
1111
+ background: var(--ax-surface-2); color: var(--ax-text);
1112
+ }
1113
+ .ax-skill-grid {
1114
+ display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
1115
+ gap: 10px;
1116
+ }
1117
+ .ax-skill-card {
1118
+ background: var(--ax-bg-elev); border: 1px solid var(--ax-border);
1119
+ border-radius: var(--ax-radius-lg); padding: 14px;
1120
+ display: flex; flex-direction: column; gap: 8px;
1121
+ cursor: pointer; position: relative; overflow: hidden;
1122
+ transition: border-color 160ms, transform 160ms, background 160ms;
1123
+ }
1124
+ .ax-skill-card:hover { border-color: var(--ax-border-2); transform: translateY(-1px); }
1125
+ .ax-skill-card.is-on {
1126
+ border-color: color-mix(in oklch, var(--ax-accent) 40%, var(--ax-border));
1127
+ background: color-mix(in oklch, var(--ax-accent) 5%, var(--ax-bg-elev));
1128
+ }
1129
+ .ax-skill-card.is-on::after {
1130
+ content: ""; position: absolute; top: 0; right: 0;
1131
+ width: 0; height: 0;
1132
+ border-left: 26px solid transparent;
1133
+ border-top: 26px solid var(--ax-accent);
1134
+ }
1135
+ .ax-skill-card.is-on::before {
1136
+ content: ""; position: absolute; top: 5px; right: 3px;
1137
+ width: 7px; height: 4px;
1138
+ border-left: 2px solid var(--ax-bg);
1139
+ border-bottom: 2px solid var(--ax-bg);
1140
+ transform: rotate(-45deg); z-index: 2;
1141
+ }
1142
+ .ax-skill-card__top { display: flex; align-items: center; gap: 10px; }
1143
+ .ax-skill-card__icon {
1144
+ width: 32px; height: 32px; border-radius: 7px;
1145
+ background: var(--ax-surface-2);
1146
+ display: grid; place-items: center; flex-shrink: 0;
1147
+ color: var(--ax-accent);
1148
+ }
1149
+ .ax-skill-card__icon svg { width: 16px; height: 16px; }
1150
+ .ax-skill-card__name {
1151
+ font-weight: 600; font-size: 13px; letter-spacing: -0.005em;
1152
+ }
1153
+ .ax-skill-card__slug {
1154
+ font-family: var(--ax-mono); font-size: 10.5px;
1155
+ color: var(--ax-muted); margin-top: 1px;
1156
+ }
1157
+ .ax-skill-card__desc {
1158
+ font-size: 12px; color: var(--ax-text-2); line-height: 1.5;
1159
+ flex: 1; min-height: 32px;
1160
+ }
1161
+ .ax-skill-card__foot {
1162
+ display: flex; align-items: center; justify-content: space-between;
1163
+ font-size: 11px; color: var(--ax-muted);
1164
+ }
1165
+
1166
+ /* Info callout (similar to wit but inline inside panels) */
1167
+ .ax-callout {
1168
+ background: color-mix(in oklch, var(--ax-info) 5%, var(--ax-bg-elev));
1169
+ border: 1px solid color-mix(in oklch, var(--ax-info) 20%, var(--ax-border));
1170
+ border-radius: var(--ax-radius-sm); padding: 12px 14px;
1171
+ font-size: 12.5px; color: var(--ax-text-2); line-height: 1.6;
1172
+ display: flex; gap: 10px; align-items: flex-start; margin-bottom: 16px;
1173
+ }
1174
+ .ax-callout__icon {
1175
+ width: 18px; height: 18px; border-radius: 50%;
1176
+ background: color-mix(in oklch, var(--ax-info) 18%, transparent);
1177
+ color: var(--ax-info); display: grid; place-items: center;
1178
+ font-size: 11px; font-weight: 600; flex-shrink: 0; margin-top: 1px;
1179
+ }
1180
+ .ax-callout b { color: var(--ax-text); }
1181
+ .ax-callout code {
1182
+ font-family: var(--ax-mono); font-size: 11.5px;
1183
+ background: var(--ax-bg); padding: 1px 5px; border-radius: 3px;
1184
+ border: 1px solid var(--ax-border);
1185
+ }
1186
+
1187
+ /* Channel-binding rows (agent-specific view) */
1188
+ .ax-chan-row {
1189
+ background: var(--ax-bg-elev); border: 1px solid var(--ax-border);
1190
+ border-radius: var(--ax-radius-lg); padding: 12px 14px;
1191
+ display: flex; align-items: center; gap: 12px; margin-bottom: 8px;
1192
+ }
1193
+ .ax-chan-row__logo {
1194
+ width: 32px; height: 32px; border-radius: 7px;
1195
+ display: grid; place-items: center;
1196
+ font-weight: 700; font-size: 13px; color: white; flex-shrink: 0;
1197
+ font-family: var(--ax-mono);
1198
+ }
1199
+ .ax-chan-row__info { flex: 1; }
1200
+ .ax-chan-row__name { font-size: 13px; font-weight: 600; }
1201
+ .ax-chan-row__desc {
1202
+ font-size: 12px; color: var(--ax-muted);
1203
+ margin-top: 2px; font-family: var(--ax-mono);
1204
+ }
1205
+
1206
+ /* Handover viz (from-agent \u2192 to-agent arrow) */
1207
+ .ax-handover-viz {
1208
+ display: flex; align-items: center; justify-content: space-between;
1209
+ gap: 14px; padding: 16px 18px;
1210
+ background: var(--ax-bg-elev); border: 1px solid var(--ax-border);
1211
+ border-radius: var(--ax-radius-lg); margin-bottom: 14px;
1212
+ }
1213
+ .ax-ho-side {
1214
+ display: flex; flex-direction: column; align-items: center;
1215
+ gap: 6px; flex: 0 0 130px;
1216
+ }
1217
+ .ax-ho-side__av {
1218
+ width: 42px; height: 42px; border-radius: 10px;
1219
+ display: grid; place-items: center;
1220
+ font-weight: 600; font-size: 15px;
1221
+ }
1222
+ .ax-ho-side--from .ax-ho-side__av {
1223
+ background: color-mix(in oklch, var(--ax-accent) 18%, var(--ax-surface));
1224
+ border: 1px solid color-mix(in oklch, var(--ax-accent) 35%, var(--ax-border));
1225
+ color: var(--ax-accent);
1226
+ }
1227
+ .ax-ho-side--to .ax-ho-side__av {
1228
+ background: var(--ax-surface-2); border: 1px solid var(--ax-border-2);
1229
+ color: var(--ax-text);
1230
+ }
1231
+ .ax-ho-side__nm { font-size: 12px; font-weight: 600; }
1232
+ .ax-ho-side__rl {
1233
+ font-size: 10px; color: var(--ax-muted);
1234
+ text-transform: uppercase; letter-spacing: 0.06em;
1235
+ font-family: var(--ax-mono);
1236
+ }
1237
+ .ax-ho-wire {
1238
+ flex: 1; height: 2px; position: relative;
1239
+ background: repeating-linear-gradient(90deg,
1240
+ var(--ax-border-2) 0, var(--ax-border-2) 4px,
1241
+ transparent 4px, transparent 8px);
1242
+ }
1243
+ .ax-ho-wire svg {
1244
+ position: absolute; right: -6px; top: 50%; transform: translateY(-50%);
1245
+ width: 16px; height: 16px; color: var(--ax-accent);
1246
+ }
1247
+ .ax-ho-list-row {
1248
+ display: flex; align-items: center; gap: 10px;
1249
+ padding: 10px 12px;
1250
+ background: var(--ax-bg-elev); border: 1px solid var(--ax-border);
1251
+ border-radius: var(--ax-radius-sm); margin-bottom: 6px;
1252
+ font-size: 12.5px;
1253
+ }
1254
+ .ax-ho-list-row .ax-who { flex: 1; color: var(--ax-text-2); }
1255
+ .ax-ho-list-row .ax-who b {
1256
+ color: var(--ax-text); font-family: var(--ax-mono); font-weight: 500;
1257
+ }
1258
+ .ax-ho-list-row .ax-when { color: var(--ax-muted); font-size: 11px; }
1259
+
1260
+ /* Activity cells + spark + session rows */
1261
+ .ax-activity-grid {
1262
+ display: grid; grid-template-columns: repeat(4, 1fr);
1263
+ gap: 10px; margin-bottom: 18px;
1264
+ }
1265
+ .ax-activity-cell {
1266
+ background: var(--ax-bg-elev); border: 1px solid var(--ax-border);
1267
+ border-radius: var(--ax-radius-sm); padding: 14px;
1268
+ }
1269
+ .ax-activity-cell .ax-v {
1270
+ font-size: 20px; font-weight: 600; letter-spacing: -0.02em; line-height: 1.2;
1271
+ }
1272
+ .ax-activity-cell .ax-l {
1273
+ font-size: 11px; color: var(--ax-muted); margin-top: 2px;
1274
+ }
1275
+ .ax-activity-cell .ax-delta {
1276
+ font-size: 11px; margin-top: 6px;
1277
+ display: inline-flex; align-items: center; gap: 3px;
1278
+ }
1279
+ .ax-activity-cell .ax-delta--up { color: var(--ax-accent); }
1280
+ .ax-activity-cell .ax-delta--down { color: var(--ax-muted); }
1281
+
1282
+ .ax-spark { width: 100%; height: 100px; margin: 10px 0 14px; }
1283
+
1284
+ .ax-session {
1285
+ display: flex; align-items: center; gap: 10px;
1286
+ padding: 10px 12px;
1287
+ background: var(--ax-bg-elev); border: 1px solid var(--ax-border);
1288
+ border-radius: var(--ax-radius-sm); margin-bottom: 6px;
1289
+ font-size: 12.5px;
1290
+ }
1291
+ .ax-session__ch {
1292
+ width: 24px; height: 24px; border-radius: 5px;
1293
+ display: grid; place-items: center;
1294
+ font-weight: 700; font-size: 10px; color: white;
1295
+ flex-shrink: 0; font-family: var(--ax-mono);
1296
+ }
1297
+ .ax-session__body { flex: 1; min-width: 0; }
1298
+ .ax-session__txt {
1299
+ color: var(--ax-text); overflow: hidden; text-overflow: ellipsis;
1300
+ white-space: nowrap;
1301
+ }
1302
+ .ax-session__meta {
1303
+ font-size: 11px; color: var(--ax-muted);
1304
+ margin-top: 1px; font-family: var(--ax-mono);
1305
+ }
1306
+
1307
+ /* Log row (Conversations tab) */
1308
+ .ax-log-head {
1309
+ display: grid; grid-template-columns: 24px 90px 160px 1fr auto;
1310
+ gap: 12px; padding: 8px 10px;
1311
+ border-bottom: 1px solid var(--ax-border-2);
1312
+ font-size: 10px; color: var(--ax-muted);
1313
+ text-transform: uppercase; letter-spacing: 0.06em; font-family: var(--ax-mono);
1314
+ }
1315
+ .ax-log-row {
1316
+ display: grid; grid-template-columns: 24px 90px 160px 1fr auto;
1317
+ gap: 12px; align-items: center; padding: 9px 10px;
1318
+ border-bottom: 1px solid var(--ax-border); font-size: 12px;
1319
+ }
1320
+ .ax-log-row:hover { background: color-mix(in oklch, var(--ax-accent) 4%, transparent); }
1321
+ .ax-log-row .ax-sev {
1322
+ width: 8px; height: 8px; border-radius: 50%; margin-left: 8px;
1323
+ }
1324
+ .ax-log-row .ax-sev--ok { background: var(--ax-accent); }
1325
+ .ax-log-row .ax-sev--warn { background: var(--ax-warn); }
1326
+ .ax-log-row .ax-sev--err { background: var(--ax-err); }
1327
+ .ax-log-row .ax-t {
1328
+ font-family: var(--ax-mono); color: var(--ax-muted); font-size: 11px;
1329
+ }
1330
+ .ax-log-row .ax-who {
1331
+ font-family: var(--ax-mono); font-size: 11px; color: var(--ax-text-2);
1332
+ }
1333
+ .ax-log-row .ax-msg {
1334
+ color: var(--ax-text); overflow: hidden;
1335
+ text-overflow: ellipsis; white-space: nowrap;
1336
+ }
1337
+ .ax-log-row .ax-ms {
1338
+ color: var(--ax-muted); font-family: var(--ax-mono); font-size: 11px;
1339
+ }
1340
+
1341
+ /* Danger zone */
1342
+ .ax-panel--danger {
1343
+ border-color: color-mix(in oklch, var(--ax-err) 30%, var(--ax-border));
1344
+ }
1345
+ .ax-danger-item {
1346
+ display: flex; align-items: center; gap: 14px;
1347
+ padding: 14px 0; border-bottom: 1px dashed var(--ax-border);
1348
+ }
1349
+ .ax-danger-item:last-child { border-bottom: 0; padding-bottom: 0; }
1350
+ .ax-danger-item:first-child { padding-top: 4px; }
1351
+ .ax-danger-item__info { flex: 1; }
1352
+ .ax-danger-item__name { font-size: 13px; font-weight: 600; margin-bottom: 3px; }
1353
+ .ax-danger-item__desc { font-size: 12px; color: var(--ax-muted); line-height: 1.5; }
1354
+
1355
+ /* Test-drive panel \u2014 docked to the right edge, slides in from outside
1356
+ * the viewport when toggled. Similar to the Live page history-panel. */
1357
+ .ax-td-panel {
1358
+ position: fixed; top: 0; right: 0; bottom: 0; width: 420px;
1359
+ background: var(--ax-bg-elev); border-left: 1px solid var(--ax-border);
1360
+ z-index: 900;
1361
+ display: flex; flex-direction: column;
1362
+ box-shadow: -8px 0 24px rgba(0,0,0,0.4);
1363
+ transform: translateX(100%); transition: transform 0.22s ease;
1364
+ }
1365
+ .ax-td-panel.is-open { transform: translateX(0); }
1366
+ @media (max-width: 520px) {
1367
+ .ax-td-panel { width: 100vw; }
1368
+ }
1369
+ .ax-td-head {
1370
+ padding: 12px 14px; border-bottom: 1px solid var(--ax-border);
1371
+ background: var(--ax-bg-elev);
1372
+ display: flex; align-items: center; gap: 10px;
1373
+ }
1374
+ .ax-td-head__dot {
1375
+ width: 8px; height: 8px; border-radius: 50%;
1376
+ background: var(--ax-accent);
1377
+ box-shadow: 0 0 8px color-mix(in oklch, var(--ax-accent) 60%, transparent);
1378
+ animation: ax-pulse 2.2s infinite;
1379
+ }
1380
+ .ax-td-head__t { flex: 1; font-size: 12px; font-weight: 600; }
1381
+ .ax-td-head__sub {
1382
+ font-size: 11px; color: var(--ax-muted); font-family: var(--ax-mono);
1383
+ }
1384
+ .ax-td-head__seg {
1385
+ display: inline-flex; background: var(--ax-surface);
1386
+ border: 1px solid var(--ax-border); border-radius: 5px; padding: 2px;
1387
+ }
1388
+ .ax-td-head__seg button {
1389
+ background: transparent; border: 0; color: var(--ax-muted);
1390
+ padding: 3px 8px; font: inherit; font-size: 10.5px;
1391
+ cursor: pointer; border-radius: 3px; font-family: var(--ax-mono);
1392
+ }
1393
+ .ax-td-head__seg button.is-active {
1394
+ background: var(--ax-surface-2); color: var(--ax-text);
1395
+ }
1396
+
1397
+ .ax-td-scenarios {
1398
+ padding: 10px 14px; background: var(--ax-bg-elev);
1399
+ border-bottom: 1px solid var(--ax-border);
1400
+ display: flex; gap: 5px; flex-wrap: wrap;
1401
+ }
1402
+ .ax-td-scenarios__lbl {
1403
+ font-size: 10px; color: var(--ax-muted);
1404
+ text-transform: uppercase; letter-spacing: 0.06em;
1405
+ font-family: var(--ax-mono); width: 100%; margin-bottom: 3px;
1406
+ }
1407
+ .ax-td-scenario {
1408
+ font-size: 11px; padding: 3px 8px;
1409
+ background: var(--ax-surface); border: 1px solid var(--ax-border);
1410
+ border-radius: 10px; color: var(--ax-text-2);
1411
+ cursor: pointer; transition: all 120ms;
1412
+ }
1413
+ .ax-td-scenario:hover { border-color: var(--ax-accent); color: var(--ax-accent); }
1414
+
1415
+ .ax-td-chat {
1416
+ flex: 1; overflow-y: auto; padding: 14px;
1417
+ display: flex; flex-direction: column; gap: 8px;
1418
+ background: var(--ax-bg);
1419
+ }
1420
+ .ax-td-chat__msg-wrap {
1421
+ display: flex; flex-direction: column; gap: 2px; max-width: 86%;
1422
+ }
1423
+ .ax-td-chat__msg-wrap.is-user { align-self: flex-end; align-items: flex-end; }
1424
+ .ax-td-chat__msg-wrap.is-bot { align-self: flex-start; }
1425
+ .ax-td-chat__bubble {
1426
+ padding: 8px 12px; border-radius: 12px;
1427
+ font-size: 12.5px; line-height: 1.55; word-wrap: break-word;
1428
+ }
1429
+ .ax-td-chat__bubble.is-user {
1430
+ background: var(--ax-accent); color: var(--ax-bg);
1431
+ border-bottom-right-radius: 3px; font-weight: 500;
1432
+ }
1433
+ .ax-td-chat__bubble.is-bot {
1434
+ background: var(--ax-surface-2); color: var(--ax-text);
1435
+ border-bottom-left-radius: 3px; border: 1px solid var(--ax-border);
1436
+ }
1437
+ .ax-td-chat__meta {
1438
+ font-size: 9.5px; color: var(--ax-muted);
1439
+ font-family: var(--ax-mono); padding: 0 4px;
1440
+ }
1441
+ .ax-td-chat__typing {
1442
+ align-self: flex-start; padding: 10px 14px;
1443
+ background: var(--ax-surface-2); border: 1px solid var(--ax-border);
1444
+ border-radius: 12px; border-bottom-left-radius: 3px;
1445
+ display: inline-flex; gap: 4px;
1446
+ }
1447
+ .ax-td-chat__typing span {
1448
+ width: 6px; height: 6px; background: var(--ax-muted);
1449
+ border-radius: 50%; animation: axTypingBounce 1.2s infinite;
1450
+ }
1451
+ .ax-td-chat__typing span:nth-child(2) { animation-delay: 0.15s; }
1452
+ .ax-td-chat__typing span:nth-child(3) { animation-delay: 0.3s; }
1453
+ @keyframes axTypingBounce {
1454
+ 0%, 60%, 100% { transform: translateY(0); opacity: 0.4; }
1455
+ 30% { transform: translateY(-5px); opacity: 1; }
1456
+ }
1457
+ .ax-td-input {
1458
+ padding: 10px; border-top: 1px solid var(--ax-border);
1459
+ background: var(--ax-bg-elev); display: flex; gap: 6px;
1460
+ }
1461
+ .ax-td-input input {
1462
+ flex: 1; background: var(--ax-bg); border: 1px solid var(--ax-border);
1463
+ border-radius: 6px; padding: 8px 11px;
1464
+ color: var(--ax-text); font: inherit; font-size: 12.5px;
1465
+ }
1466
+ .ax-td-input input:focus { outline: none; border-color: var(--ax-accent); }
1467
+ .ax-td-input button {
1468
+ background: var(--ax-accent); color: var(--ax-bg); border: 0;
1469
+ border-radius: 6px; padding: 0 12px;
1470
+ cursor: pointer; font-weight: 600;
1471
+ }
1472
+ .ax-td-input button:hover {
1473
+ background: color-mix(in oklch, var(--ax-accent) 88%, white);
1474
+ }
1475
+
1476
+ /* Section mini-label used throughout detail pages */
1477
+ .ax-sec-label-d {
1478
+ display: flex; align-items: center; justify-content: space-between;
1479
+ margin: 20px 0 10px;
1480
+ }
1481
+ .ax-sec-label-d h3 {
1482
+ font-size: 11px; font-weight: 600; letter-spacing: 0.06em;
1483
+ text-transform: uppercase; color: var(--ax-muted);
1484
+ margin: 0; font-family: var(--ax-mono);
1485
+ }
1486
+
1487
+ /* --- Responsive collapses for the settings primitives --- */
1488
+ @media (max-width: 1180px) {
1489
+ .ax-layout { grid-template-columns: 180px 1fr; }
1490
+ }
1491
+ @media (max-width: 760px) {
1492
+ .ax-health-strip { grid-template-columns: repeat(2, 1fr); }
1493
+ .ax-connectors { grid-template-columns: 1fr; }
1494
+ .ax-detail-grid { grid-template-columns: 1fr; }
1495
+ .ax-mesh-hero { grid-template-columns: 1fr; }
1496
+ .ax-mesh-viz { margin: 0 auto; }
1497
+ .ax-cron-hints { grid-template-columns: 1fr; }
1498
+ .ax-layout { grid-template-columns: 1fr; }
1499
+ .ax-rail { display: none; }
1500
+ .ax-stats-inline { grid-template-columns: repeat(2, 1fr); }
1501
+ .ax-activity-grid { grid-template-columns: repeat(2, 1fr); }
1502
+ .ax-log-head, .ax-log-row { grid-template-columns: 8px 80px 1fr auto; }
1503
+ .ax-log-head span:nth-child(3), .ax-log-row .ax-who { display: none; }
1504
+ .ax-grid-2, .ax-grid-3 { grid-template-columns: 1fr; }
1505
+ }`;var b=`<link rel="preconnect" href="https://fonts.googleapis.com">
1506
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
1507
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
1508
+ <script>(function(){try{var t=localStorage.getItem('ax-theme')||'dark';document.documentElement.setAttribute('data-theme',t)}catch(e){}})();</script>`,m=`
1509
+ .ax-topbar{display:flex;align-items:center;justify-content:space-between;
1510
+ padding:8px 18px;border-bottom:1px solid var(--ax-border);
1511
+ background:var(--ax-bg-elev);position:sticky;top:0;z-index:20;gap:10px;flex-wrap:nowrap}
1512
+ .ax-topbar__left{display:flex;align-items:center;gap:18px;min-width:0}
1513
+ .ax-brand{display:flex;align-items:center;gap:10px;font-weight:600;letter-spacing:-0.01em;flex-shrink:0}
1514
+ .ax-brand__mark{font-family:var(--ax-mono);font-size:12px;padding:2px 8px;
1515
+ border:1px solid var(--ax-border-2);color:var(--ax-accent);border-radius:4px}
1516
+ .ax-brand__name{font-size:14px}
1517
+ .ax-brand__subtitle{font-size:11px;color:var(--ax-muted);
1518
+ border-left:1px solid var(--ax-border);padding-left:12px;margin-left:4px}
1519
+ .ax-topbar__tabs{display:flex;gap:2px;min-width:0;overflow-x:auto}
1520
+ .ax-topbar__tab{background:transparent;border:none;color:var(--ax-text-2);
1521
+ padding:8px 14px;font:inherit;cursor:pointer;font-size:12px;text-decoration:none;
1522
+ border-bottom:2px solid transparent;letter-spacing:-0.005em;white-space:nowrap}
1523
+ .ax-topbar__tab:hover{color:var(--ax-text)}
1524
+ .ax-topbar__tab.is-active{color:var(--ax-text);border-bottom-color:var(--ax-accent)}
1525
+ .ax-topbar__right{display:flex;align-items:center;gap:10px;font-size:11px;
1526
+ color:var(--ax-muted);flex-shrink:0}
1527
+ .ax-topbar__right .ax-mono{color:var(--ax-text-2)}
1528
+
1529
+ /* Mesh selector */
1530
+ .ax-mesh-sel{position:relative;display:inline-flex;align-items:center;gap:6px;
1531
+ padding:4px 10px;border:1px solid var(--ax-border-2);border-radius:4px;
1532
+ background:var(--ax-surface);cursor:pointer;font:inherit;font-size:11px;
1533
+ color:var(--ax-text-2);white-space:nowrap}
1534
+ .ax-mesh-sel:hover{border-color:var(--ax-accent);color:var(--ax-text)}
1535
+ .ax-mesh-sel.is-proxy{background:color-mix(in oklch,var(--ax-accent) 14%,var(--ax-surface));
1536
+ border-color:color-mix(in oklch,var(--ax-accent) 45%,var(--ax-border-2));color:var(--ax-accent)}
1537
+ .ax-mesh-sel .lbl{font-size:9px;letter-spacing:0.06em;text-transform:uppercase;color:var(--ax-muted);margin-right:2px}
1538
+ .ax-mesh-sel .name{font-weight:500;color:var(--ax-text)}
1539
+ .ax-mesh-sel .chev{font-size:9px;opacity:0.6;margin-left:2px}
1540
+ .ax-mesh-menu{position:absolute;top:calc(100% + 4px);right:0;min-width:240px;
1541
+ background:var(--ax-surface);border:1px solid var(--ax-border-2);
1542
+ border-radius:6px;box-shadow:0 8px 24px rgba(0,0,0,0.4);padding:4px;z-index:30;display:none}
1543
+ .ax-mesh-sel.is-open .ax-mesh-menu{display:block}
1544
+ .ax-mesh-menu a{display:block;padding:7px 10px;border-radius:4px;text-decoration:none;
1545
+ color:var(--ax-text-2);font-size:12px}
1546
+ .ax-mesh-menu a:hover{background:var(--ax-surface-2);color:var(--ax-text)}
1547
+ .ax-mesh-menu a.is-current{background:color-mix(in oklch,var(--ax-accent) 12%,var(--ax-surface));
1548
+ color:var(--ax-accent);border:1px solid color-mix(in oklch,var(--ax-accent) 30%,var(--ax-border-2))}
1549
+ .ax-mesh-menu a .row{display:flex;align-items:center;gap:8px}
1550
+ .ax-mesh-menu a .row .dot{width:6px;height:6px;border-radius:50%;background:var(--ax-accent)}
1551
+ .ax-mesh-menu a.is-offline .row .dot{background:var(--ax-border-2)}
1552
+ .ax-mesh-menu a .url{font-family:var(--ax-mono);font-size:10px;color:var(--ax-muted);margin-top:2px}
1553
+
1554
+ /* Theme switcher segmented control */
1555
+ .ax-theme-switch{display:inline-flex;border:1px solid var(--ax-border-2);
1556
+ border-radius:4px;overflow:hidden}
1557
+ .ax-theme-switch button{background:transparent;border:none;color:var(--ax-muted);
1558
+ padding:3px 9px;font:inherit;font-size:10px;cursor:pointer;letter-spacing:0.04em;
1559
+ text-transform:uppercase;font-family:var(--ax-mono);border-right:1px solid var(--ax-border-2)}
1560
+ .ax-theme-switch button:last-child{border-right:none}
1561
+ .ax-theme-switch button:hover{color:var(--ax-text);background:var(--ax-surface-2,var(--ax-surface))}
1562
+ .ax-theme-switch button.is-active{color:var(--ax-accent);
1563
+ background:color-mix(in oklch,var(--ax-accent) 12%,var(--ax-surface))}
1564
+
1565
+ /* Subheader \u2014 page-specific toolbar below the main topbar. Kanban uses it
1566
+ * for the board picker + search + filters; others can use it for context
1567
+ * bars if they want. */
1568
+ .ax-subheader{display:flex;align-items:center;gap:10px;padding:10px 18px;
1569
+ background:var(--ax-bg-elev);border-bottom:1px solid var(--ax-border);
1570
+ flex-wrap:wrap}
1571
+ .ax-subheader > * {flex-shrink:0}
1572
+ .ax-subheader .spacer{flex:1}`,u=`<script>
1573
+ (function(){
1574
+ function wireTheme(){
1575
+ var sw = document.querySelectorAll('[data-theme-opt]');
1576
+ if (!sw.length) return;
1577
+ var current = document.documentElement.getAttribute('data-theme') || 'dark';
1578
+ sw.forEach(function(b){
1579
+ if (b.dataset.wired) return; b.dataset.wired = '1';
1580
+ if (b.getAttribute('data-theme-opt') === current) b.classList.add('is-active');
1581
+ b.addEventListener('click', function(){
1582
+ var t = b.getAttribute('data-theme-opt');
1583
+ document.documentElement.setAttribute('data-theme', t);
1584
+ try { localStorage.setItem('ax-theme', t); } catch (e) {}
1585
+ sw.forEach(function(x){ x.classList.toggle('is-active', x === b); });
1586
+ });
1587
+ });
1588
+ }
1589
+ function currentPeer(){
1590
+ try { return localStorage.getItem('ax-peer') || 'primary'; } catch { return 'primary'; }
1591
+ }
1592
+ function setCurrentPeer(id){
1593
+ try {
1594
+ if (id && id !== 'primary') localStorage.setItem('ax-peer', id);
1595
+ else localStorage.removeItem('ax-peer');
1596
+ } catch {}
1597
+ }
1598
+ function reflectPeerPill(){
1599
+ var sel = document.querySelector('.ax-mesh-sel');
1600
+ if (!sel) return;
1601
+ var cur = currentPeer();
1602
+ sel.classList.toggle('is-proxy', cur !== 'primary');
1603
+ // If a proxy is active, update the visible pill label + highlight.
1604
+ var picked = null;
1605
+ sel.querySelectorAll('.ax-mesh-menu a').forEach(function(a){
1606
+ a.classList.toggle('is-current', a.getAttribute('data-peer-id') === cur || (cur === 'primary' && a.getAttribute('data-peer-id') === 'primary'));
1607
+ if (a.getAttribute('data-peer-id') === cur) picked = a;
1608
+ });
1609
+ if (picked) {
1610
+ var name = picked.querySelector('span'); // first <span> inside .row
1611
+ var visibleName = sel.querySelector('.name');
1612
+ if (name && visibleName) visibleName.textContent = name.textContent.replace(/ \xB7 primary/, '');
1613
+ }
1614
+ }
1615
+ function wireMesh(){
1616
+ var sel = document.querySelector('.ax-mesh-sel');
1617
+ if (!sel || sel.dataset.wired) return; sel.dataset.wired = '1';
1618
+ sel.addEventListener('click', function(e){
1619
+ var link = e.target.closest('.ax-mesh-menu a[data-peer-action="proxy"]');
1620
+ if (link) {
1621
+ e.preventDefault();
1622
+ setCurrentPeer(link.getAttribute('data-peer-id'));
1623
+ reflectPeerPill();
1624
+ sel.classList.remove('is-open');
1625
+ // Reload so the admin panel re-reads state from the selected peer.
1626
+ location.reload();
1627
+ return;
1628
+ }
1629
+ if (e.target.closest('.ax-mesh-menu a')) return; // plain navigate anchor
1630
+ sel.classList.toggle('is-open');
1631
+ });
1632
+ document.addEventListener('click', function(e){
1633
+ if (!sel.contains(e.target)) sel.classList.remove('is-open');
1634
+ });
1635
+ reflectPeerPill();
1636
+ }
1637
+ function wireHostRewrite(){
1638
+ try {
1639
+ var h = location.hostname || 'localhost';
1640
+ document.querySelectorAll('.ax-topbar__tab[href*="__HOST__"]').forEach(function(a){
1641
+ a.href = a.getAttribute('href').replace(/__HOST__/g, h);
1642
+ });
1643
+ } catch (e) {}
1644
+ }
1645
+ function wire(){ wireHostRewrite(); wireTheme(); wireMesh(); }
1646
+ if (document.readyState === 'loading') {
1647
+ document.addEventListener('DOMContentLoaded', wire);
1648
+ } else { wire(); }
1649
+ })();
1650
+ </script>`;function v(a){let r=a.peers&&a.peers.length>0?a.peers:[{id:"local",name:"this daemon",dashboardUrl:"",primary:!0}],o=a.currentPeerId||r.find(e=>e.primary)?.id||r[0].id,i=r.find(e=>e.id===o)||r[0],l=r.map(e=>{let d=e.id===o,c=e.primary?' <span style="color:var(--ax-muted);font-size:10px">\xB7 primary</span>':"",s=!!e.tokenScope&&!e.primary,y=s?"#":e.dashboardUrl?`${e.dashboardUrl.replace(/\/+$/,"")}/admin`:"#",_=s?` data-peer-id="${n(e.id)}" data-peer-action="proxy"`:e.primary?' data-peer-id="primary" data-peer-action="proxy"':"",z=s?'<div class="url" style="color:var(--ax-accent)">manage from this dashboard \u2713</div>':e.tokenScope?`<div class="url">${n(e.tokenScope)}</div>`:e.dashboardUrl?'<div class="url" style="color:var(--ax-muted)">(open peer dashboard \u2197)</div>':"";return`<a href="${n(y)}" class="${d?"is-current":""}"${_}>
1651
+ <div class="row"><span class="dot"></span><span>${n(e.name)}${c}</span></div>
1652
+ ${e.dashboardUrl?`<div class="url">${n(e.dashboardUrl)}</div>`:""}
1653
+ ${z}
1654
+ </a>`}).join(""),x=`<div class="ax-mesh-sel" aria-haspopup="menu">
1655
+ <span class="lbl">managing</span>
1656
+ <span class="name">${n(i.name)}</span>
1657
+ <span class="chev">\u25BE</span>
1658
+ <div class="ax-mesh-menu" role="menu">${l}</div>
1659
+ </div>`,f=process.env.AGENTX_USAGE_URL||"http://__HOST__:4201",w=process.env.AGENTX_WIKI_URL||"http://__HOST__:4200",k=[{id:"live",label:"Live",href:"/live",external:!1},{id:"boards",label:"Boards",href:"/",external:!1},{id:"workflows",label:"Workflows",href:"/workflows",external:!1},{id:"admin",label:"Settings",href:"/admin",external:!1},{id:"wiki",label:"Wiki",href:w,external:!0},{id:"usage",label:"Usage",href:f,external:!0},{id:"glossary",label:"Glossary",href:"/glossary",external:!1}].map(e=>{let d=e.id===a.activeTab?"ax-topbar__tab is-active":"ax-topbar__tab",c=e.external?' target="_blank" rel="noopener"':"",s=e.external?' <span style="font-size:9px;opacity:0.6">\u2197</span>':"";return`<a href="${e.href}" class="${d}"${c}>${e.label}${s}</a>`}).join("");return`<header class="ax-topbar">
1660
+ <div class="ax-topbar__left">
1661
+ <div class="ax-brand">
1662
+ <span class="ax-brand__mark">AX</span>
1663
+ <span class="ax-brand__name">AgentX</span>
1664
+ <span class="ax-brand__subtitle">${n(a.subtitle)}</span>
1665
+ </div>
1666
+ <nav class="ax-topbar__tabs">${k}</nav>
1667
+ </div>
1668
+ <div class="ax-topbar__right">
1669
+ ${a.rightExtras||""}
1670
+ ${x}
1671
+ <div class="ax-theme-switch" role="tablist" aria-label="Theme">
1672
+ <button data-theme-opt="dark">Dark</button>
1673
+ <button data-theme-opt="light">Light</button>
1674
+ <button data-theme-opt="crt">CRT</button>
1675
+ </div>
1676
+ </div>
1677
+ </header>${a.subheader?`<div class="ax-subheader">${a.subheader}</div>`:""}`}function n(a){return String(a||"").replace(/[&<>"']/g,r=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[r])}function $(a){let r=`${p}
1678
+ ${g}
1679
+ ${m}${a.css?`
1680
+ `+a.css:""}`,o=a.customHeader??(a.activeTab==="custom"?"":v({activeTab:a.activeTab,subtitle:a.subtitle,subheader:a.subheader,peers:a.peers,currentPeerId:a.currentPeerId})),i=a.noMain?a.body:`<main>${a.body}</main>`;return`<!DOCTYPE html>
1681
+ <html lang="en">
1682
+ <head>
1683
+ <meta charset="utf-8">
1684
+ <meta name="viewport" content="width=device-width, initial-scale=1">
1685
+ <title>${S(a.title)}</title>
1686
+ ${b}
1687
+ ${a.headExtras||""}
1688
+ <style>${r}</style>
1689
+ </head>
1690
+ <body>
1691
+ ${o}
1692
+ ${i}
1693
+ ${u}
1694
+ ${a.scripts||""}
1695
+ </body>
1696
+ </html>`}function S(a){return String(a||"").replace(/[<>&]/g,r=>({"<":"&lt;",">":"&gt;","&":"&amp;"})[r])}function t(a){return String(a??"").replace(/[&<>"']/g,r=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[r])}function T(a,r={}){let o=["ax-btn",r.primary?"ax-btn--primary":"",r.ghost?"ax-btn--ghost":"",r.danger?"ax-btn--danger":"",r.extraClass||""].filter(Boolean).join(" ");return`<button ${[`type="${r.type||"button"}"`,`class="${o}"`,r.id?`id="${t(r.id)}"`:"",r.disabled?"disabled":"",r.onclick?`onclick="${t(r.onclick)}"`:""].filter(Boolean).join(" ")}>${t(a)}</button>`}function O(a){let r=`<label>${t(a.label)}${a.hint?` <span class="ax-hint">${a.hint}</span>`:""}</label>`,o="",i=[`name="${t(a.name)}"`,a.required?"required":"",a.readonly?"readonly":"",a.placeholder?`placeholder="${t(a.placeholder)}"`:"",a.extraAttrs||""].filter(Boolean).join(" ");if(a.type==="textarea")o=`<textarea ${i} rows="${a.rows||3}">${t(a.value||"")}</textarea>`;else if(a.type==="select"&&a.options){let l=a.options.map(x=>`<option value="${t(x.value)}"${x.selected?" selected":""}>${t(x.label)}</option>`).join("");o=`<select ${i}>${l}</select>`}else o=`<input type="${a.type||"text"}" ${i}`+(a.value!==void 0?` value="${t(a.value)}"`:"")+(a.pattern?` pattern="${t(a.pattern)}"`:"")+" />";return`<div class="ax-field">${r}${o}</div>`}function C(a){return`<div class="ax-row">${a.join("")}</div>`}function A(a,r,o){return`<section class="ax-step">
1697
+ <div class="ax-step__head"><span class="ax-step__num">${t(String(a))}</span>${t(r)}</div>
1698
+ ${o}
1699
+ </section>`}function H(a){return`<div class="ax-page-head">
1700
+ ${a.kicker?`<div class="ax-kicker">${t(a.kicker)}</div>`:""}
1701
+ <h1>${t(a.title)}</h1>
1702
+ ${a.lead?`<p class="ax-lead">${a.lead}</p>`:""}
1703
+ </div>`}function h(a){return`<div class="ax-health-card">
1704
+ <div class="ax-hc-dot ax-hc-dot--${a.kind||"off"}"></div>
1705
+ <div class="ax-hc-txt">
1706
+ <div class="ax-hc-num">${t(a.num)}</div>
1707
+ <div class="ax-hc-lbl">${t(a.label)}</div>
1708
+ </div>
1709
+ </div>`}function j(a){return`<div class="ax-health-strip">${a.map(h).join("")}</div>`}function P(a){return`<div class="ax-wit"${a.persistKey?` data-wit="${t(a.persistKey)}"`:""}>
1710
+ <span class="ax-wit__icon">${t(a.icon||"?")}</span>
1711
+ <div>${a.bodyHtml}</div>
1712
+ <button class="ax-wit__dismiss" onclick="this.parentElement.style.display='none'">\xD7</button>
1713
+ </div>`}function B(a){return`<div class="ax-section-head">
1714
+ <div class="ax-section-head__icon">${a.icon}</div>
1715
+ <div class="ax-section-head__text">
1716
+ <h2>${t(a.title)}</h2>
1717
+ ${a.lead?`<p class="ax-lead">${t(a.lead)}</p>`:""}
1718
+ </div>
1719
+ ${a.actionHtml||""}
1720
+ </div>`}function L(a){return`<div class="ax-sec-label"><h3>${t(a.label)}</h3>${a.rightHtml||""}</div>`}var E=`<div class="ax-toast" id="ax-toast">
1721
+ <svg class="ax-toast__icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 6L9 17l-5-5"/></svg>
1722
+ <span id="ax-toast-msg">Copied</span>
1723
+ </div>`,I=`
1724
+ let __axToastTimer;
1725
+ window.showToast = function(msg) {
1726
+ const el = document.getElementById('ax-toast');
1727
+ const m = document.getElementById('ax-toast-msg');
1728
+ if (!el || !m) return;
1729
+ m.textContent = msg;
1730
+ el.classList.add('is-show');
1731
+ clearTimeout(__axToastTimer);
1732
+ __axToastTimer = setTimeout(function(){ el.classList.remove('is-show'); }, 1800);
1733
+ };
1734
+ window.copyText = function(_btn, text) {
1735
+ try { navigator.clipboard.writeText(text); } catch (e) {}
1736
+ window.showToast('Copied to clipboard');
1737
+ };`,M=`
1738
+ window.toggleCard = function(btn) {
1739
+ const card = btn.closest('.ax-row-card');
1740
+ if (card) card.classList.toggle('is-open');
1741
+ };`;export{$ as a,t as b,T as c,O as d,C as e,A as f,H as g,j as h,P as i,B as j,L as k,E as l,I as m,M as n};
1742
+ //# sourceMappingURL=chunk-6PPIFDOQ.js.map