@korso/shepherd-ui 0.2.0 → 0.2.2

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 (65) hide show
  1. package/README.md +47 -47
  2. package/dist/ShepherdRoot.js +15 -57
  3. package/dist/components/Dashboard.d.ts +16 -2
  4. package/dist/components/Dashboard.js +76 -5
  5. package/dist/config/ConnectAgent.js +4 -4
  6. package/dist/config/EmptyState.js +5 -1
  7. package/dist/config/Members.js +4 -4
  8. package/dist/config/Workspaces.js +1 -1
  9. package/dist/lib/{Dashboard-CG6KeFQ3.js → Dashboard-B7nioe5N.js} +529 -457
  10. package/dist/lib/index.d.ts +15 -1
  11. package/dist/lib/index.js +300 -359
  12. package/dist/lib/selfhost.js +1 -1
  13. package/dist/lib/styles.css +252 -209
  14. package/dist/selfhost/assets/index-COMbJ-a4.js +40 -0
  15. package/dist/selfhost/assets/index-CcGvL65Q.css +1 -0
  16. package/dist/selfhost/index.html +13 -13
  17. package/dist/useLandscapePolling.d.ts +7 -0
  18. package/dist/useLandscapePolling.js +6 -1
  19. package/package.json +67 -67
  20. package/dist/ShepherdProvider.d.ts +0 -12
  21. package/dist/ShepherdProvider.js +0 -33
  22. package/dist/ShepherdProvider.test.d.ts +0 -1
  23. package/dist/ShepherdProvider.test.js +0 -47
  24. package/dist/ShepherdRoot.routing.test.d.ts +0 -1
  25. package/dist/ShepherdRoot.routing.test.js +0 -61
  26. package/dist/ShepherdRoot.test.d.ts +0 -1
  27. package/dist/ShepherdRoot.test.js +0 -37
  28. package/dist/app/assets/index-CDOCIg6s.js +0 -11
  29. package/dist/app/index.html +0 -12
  30. package/dist/client.test.d.ts +0 -1
  31. package/dist/client.test.js +0 -298
  32. package/dist/config/ConnectAgent.test.d.ts +0 -1
  33. package/dist/config/ConnectAgent.test.js +0 -92
  34. package/dist/config/EmptyState.test.d.ts +0 -1
  35. package/dist/config/EmptyState.test.js +0 -32
  36. package/dist/config/Members.test.d.ts +0 -1
  37. package/dist/config/Members.test.js +0 -66
  38. package/dist/config/Workspaces.test.d.ts +0 -1
  39. package/dist/config/Workspaces.test.js +0 -90
  40. package/dist/index.cjs +0 -5289
  41. package/dist/index.cjs.map +0 -1
  42. package/dist/index.d.cts +0 -149
  43. package/dist/index.js.map +0 -1
  44. package/dist/selfhost/assets/index-BZmImfYZ.css +0 -1
  45. package/dist/selfhost/assets/index-CS268KSw.js +0 -40
  46. package/dist/test/setup.d.ts +0 -1
  47. package/dist/test/setup.js +0 -2
  48. package/dist/views/Chat.d.ts +0 -5
  49. package/dist/views/Chat.js +0 -60
  50. package/dist/views/Chat.test.d.ts +0 -1
  51. package/dist/views/Chat.test.js +0 -92
  52. package/dist/views/Config.d.ts +0 -12
  53. package/dist/views/Config.js +0 -6
  54. package/dist/views/Tasks.d.ts +0 -5
  55. package/dist/views/Tasks.js +0 -75
  56. package/dist/views/Tasks.test.d.ts +0 -1
  57. package/dist/views/Tasks.test.js +0 -115
  58. package/dist/views/useLandscape.d.ts +0 -14
  59. package/dist/views/useLandscape.js +0 -74
  60. package/dist/views/useLandscape.test.d.ts +0 -1
  61. package/dist/views/useLandscape.test.js +0 -101
  62. package/dist/views/wallboard.d.ts +0 -46
  63. package/dist/views/wallboard.js +0 -209
  64. package/dist/views/wallboard.test.d.ts +0 -1
  65. package/dist/views/wallboard.test.js +0 -143
@@ -1,6 +1,6 @@
1
1
  import { jsx as e, jsxs as l } from "react/jsx-runtime";
2
2
  import { useState as s, useMemo as h } from "react";
3
- import { c as d, a as m, D as u } from "./Dashboard-CG6KeFQ3.js";
3
+ import { c as d, a as m, D as u } from "./Dashboard-B7nioe5N.js";
4
4
  const i = "shepherd.token";
5
5
  function p() {
6
6
  try {
@@ -1,209 +1,252 @@
1
- :root {
2
- --bg:#ece0c6; --ink:#322c20; --ink2:#6f6450; --ink3:#9c917a;
3
- --line:#d7c9ac; --line2:#e0d4b9; --live:#3d8b58; --drop:#bd4f3a;
4
- --chip:#e3d6ba; --terr:#7a6a48; --card:#f5ecd9;
5
- }
6
- * { box-sizing:border-box; }
7
- html,body { height:100%; }
8
- body {
9
- margin:0; background:var(--bg); color:var(--ink);
10
- font:14px/1.45 'Inter', ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
11
- -webkit-font-smoothing:antialiased;
12
- }
13
- .wrap { max-width:1100px; margin:0 auto; padding:40px 44px; }
14
-
15
- header { display:flex; align-items:center; gap:12px; padding-bottom:18px; border-bottom:1px solid var(--line); }
16
- /* Chat view: the card supplies its own border, so the header rule is redundant. */
17
- #board:has(#panel-chat:not([hidden])) header { border-bottom:0; }
18
- .brand { font-size:17px; font-weight:600; }
19
- .vitals { color:var(--ink3); font-size:12.5px; }
20
- .grow { flex:1; }
21
- .status { font-size:12px; color:var(--ink3); }
22
- .status--ok { color:var(--live); }
23
- .status--warn { color:var(--terr); }
24
- .status--error { color:var(--drop); }
25
- .freshness { font-size:12px; color:var(--ink3); }
26
-
27
- /* Repo selector (hidden when <2 repos; populated by app.js) */
28
- .repo { position:relative; }
29
- .repo-trig { display:inline-flex; align-items:center; gap:6px; font-size:13px;
30
- font-family:inherit; color:var(--ink); appearance:none;
31
- border:1px solid var(--line); border-radius:8px; padding:4px 10px;
32
- background:rgba(255,250,238,.4); cursor:pointer; }
33
- .repo-trig .slash { color:var(--ink3); }
34
- .repo-menu { position:absolute; top:36px; left:0; min-width:200px; background:var(--card);
35
- border:1px solid var(--line); border-radius:10px; padding:5px;
36
- box-shadow:0 8px 24px rgba(50,40,20,.14); z-index:5; }
37
- .repo-mi { display:flex; justify-content:space-between; gap:14px; padding:7px 9px;
38
- width:100%; text-align:left; border:0; appearance:none; font-family:inherit; color:inherit;
39
- background:transparent; border-radius:7px; font-size:13px; cursor:pointer; }
40
- .repo-mi:hover { background:var(--chip); }
41
- .repo-mi.on { background:var(--chip); font-weight:600; }
42
- .repo-mi .ct { font-size:11px; color:var(--ink3); }
43
- .repo-mi.all { border-top:1px solid var(--line2); margin-top:4px; padding-top:9px; color:var(--ink2); }
44
-
45
- /* Tabs */
46
- .tabs { display:flex; gap:4px; margin-left:auto; }
47
- .tab { font-size:13px; color:var(--ink2); padding:5px 11px; border:0; border-radius:7px;
48
- background:transparent; cursor:pointer; font:inherit; }
49
- .tab--active { background:var(--ink); color:var(--bg); }
50
-
51
- /* Crew strip */
52
- .crew { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:26px 0 32px; }
53
- .person { display:inline-flex; align-items:center; gap:9px; padding:5px 13px 5px 5px;
54
- border:1px solid var(--line); border-radius:999px; background:var(--card); font-size:13px; }
55
- .person--idle { opacity:.55; }
56
- .avatar { width:24px; height:24px; border-radius:50%; display:grid; place-items:center;
57
- font-size:10px; font-weight:700; color:#fff; flex:none; }
58
- .person__name { font-weight:600; }
59
- .person__doing { color:var(--ink3); font-size:12px; }
60
-
61
- /* Board */
62
- .board { display:grid; grid-template-columns:1fr 1px 1fr; gap:0; }
63
- .board__rule { background:var(--line); }
64
- .col { padding:0 36px; } .col:first-child { padding-left:0; } .col:last-child { padding-right:0; }
65
- .colhead { display:flex; align-items:center; gap:8px; margin-bottom:6px; }
66
- .colhead h2 { font-size:12px; font-weight:600; letter-spacing:.03em; margin:0;
67
- text-transform:uppercase; color:var(--ink2); }
68
- .colhead .n { font-size:11px; color:var(--ink3); background:var(--chip);
69
- border-radius:999px; padding:1px 8px; }
70
-
71
- .task { padding:16px 0; border-bottom:1px solid var(--line2); }
72
- .task__r1 { display:flex; align-items:center; gap:8px; }
73
- .task__who { font-size:13.5px; font-weight:600; }
74
- .task__tag { font-size:11px; color:var(--ink3); }
75
- .task__repo { font-size:11px; color:var(--terr); background:rgba(122,106,72,.1);
76
- border-radius:4px; padding:0 6px; }
77
- .task__stat { margin-left:auto; font-size:11px; font-weight:500; color:var(--ink3); }
78
- .task__stat--drop { color:var(--drop); }
79
- .livedot { width:7px; height:7px; border-radius:50%; background:var(--live); margin-left:auto; }
80
- .task__intent { font-size:13.5px; margin:5px 0 0; line-height:1.45; }
81
- .terr { margin-top:8px; display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
82
- .terr__lbl { font-size:9.5px; text-transform:uppercase; letter-spacing:.05em; color:var(--ink3); }
83
- .glob { font-family:ui-monospace, Menlo, monospace; font-size:11px; color:var(--terr);
84
- background:rgba(122,106,72,.12); border:1px solid rgba(122,106,72,.22);
85
- border-radius:5px; padding:1px 7px; }
86
- .task__meta { font-size:11.5px; color:var(--ink3); margin-top:6px; }
87
- /* expandable territory (2+ paths collapse to a one-line "N paths" toggle) */
88
- .terrx { margin-top:8px; }
89
- .terrx summary { list-style:none; cursor:pointer; display:flex; align-items:center;
90
- gap:6px; flex-wrap:wrap; user-select:none; }
91
- .terrx summary::-webkit-details-marker { display:none; }
92
- .terrx .terr--full { margin-top:8px; }
93
- .glob--more { cursor:pointer; color:var(--ink2); background:var(--chip);
94
- border:1px solid var(--line); }
95
- .glob--more .tw { color:var(--ink3); display:inline-block; transition:transform .15s; }
96
- .terrx[open] summary .glob--more .tw { transform:rotate(90deg); }
97
- /* grouped agent box: header + claims rail + collapsible "narrower" fold */
98
- .grp { padding:16px 0; border-bottom:1px solid var(--line2); }
99
- .grp__head { display:flex; align-items:center; gap:8px; }
100
- .grp__who { font-size:13.5px; font-weight:600; }
101
- .grp__tag { font-size:11px; color:var(--ink3); }
102
- .grp__count { font-size:11px; color:var(--ink3); }
103
- .grp__dot { width:7px; height:7px; border-radius:50%; background:var(--live); margin-left:auto; }
104
- .claims { margin:10px 0 0 6px; padding-left:14px; border-left:1px solid var(--line); }
105
- .claim { padding:6px 0; }
106
- .claim + .claim { border-top:1px solid var(--line2); margin-top:6px; }
107
- .fold { margin-top:10px; }
108
- .fold summary { list-style:none; cursor:pointer; font-size:12px; color:var(--ink2);
109
- display:inline-flex; align-items:center; gap:6px; user-select:none; }
110
- .fold summary::-webkit-details-marker { display:none; }
111
- .fold summary .tw { display:inline-block; color:var(--ink3); transition:transform .15s; }
112
- .fold[open] summary .tw { transform:rotate(90deg); }
113
- .fold__body { margin:8px 0 0 6px; padding-left:14px; border-left:1px dashed var(--line); }
114
- .covered { font-size:10.5px; color:var(--ink3); font-style:italic; margin-top:4px; }
115
- .day { font-size:11px; color:var(--ink3); padding:18px 0 2px; font-weight:600; }
116
- .more { margin-top:20px; font-size:12.5px; color:var(--ink2); padding:7px 13px;
117
- border:1px solid var(--line); border-radius:8px; background:rgba(255,250,238,.35);
118
- cursor:pointer; }
119
- .empty { color:var(--ink3); font-style:italic; padding:14px 0; }
120
-
121
- /* Chat (re-themed; structure unchanged) */
122
- .chat-wrap { background:var(--card); border:1px solid var(--line); border-radius:12px;
123
- display:flex; flex-direction:column; overflow:hidden; height:calc(100vh - 150px); min-height:320px; }
124
- .chat { flex:1; overflow-y:auto; padding:16px; }
125
- .chat { scrollbar-width:thin; scrollbar-color:var(--line) transparent; }
126
- .chat::-webkit-scrollbar { width:10px; }
127
- .chat::-webkit-scrollbar-track { background:transparent; }
128
- .chat::-webkit-scrollbar-thumb { background:var(--line); border-radius:999px;
129
- border:3px solid var(--card); background-clip:padding-box; }
130
- .chat::-webkit-scrollbar-thumb:hover { background:var(--ink3); background-clip:padding-box; }
131
- .chat__note { padding:9px 16px; font-size:11.5px; color:var(--ink3); }
132
- .msg { display:flex; gap:11px; padding:9px 0; }
133
- .msg__avatar { flex:none; width:32px; height:32px; border-radius:50%; display:grid;
134
- place-items:center; font-size:12px; font-weight:700; color:#fff; }
135
- .msg__body { min-width:0; flex:1; }
136
- .msg__head { display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
137
- .msg__who { font-weight:600; }
138
- .msg__human { font-size:12px; color:var(--ink3); }
139
- .msg__to { font-size:11.5px; color:var(--terr); }
140
- .msg__time { font-size:11.5px; color:var(--ink3); margin-left:auto; }
141
- .msg__text { margin-top:3px; padding:8px 12px; border-radius:4px 12px 12px 12px;
142
- background:var(--chip); white-space:pre-wrap; word-break:break-word; }
143
- .msg--targeted .msg__text { box-shadow:inset 3px 0 0 var(--terr); }
144
-
145
- /* Operator's own messages — same group-chat structure, mirrored to the right. */
146
- .msg--me { flex-direction:row-reverse; }
147
- .msg--me .msg__head { flex-direction:row-reverse; }
148
- .msg--me .msg__time { margin-left:0; margin-right:auto; }
149
- .msg--me .msg__body { display:flex; flex-direction:column; align-items:flex-end; }
150
- .msg--me .msg__text { border-radius:12px 4px 12px 12px; background:#d4e7d2; }
151
- .msg--me.msg--targeted .msg__text { box-shadow:inset -3px 0 0 var(--terr); }
152
-
153
- /* Composer */
154
- .composer { position:relative; border-top:1px solid var(--line); padding:10px 12px; }
155
- .chat-form { display:flex; gap:8px; }
156
- .chat-input { flex:1; padding:9px 12px; border-radius:8px; border:1px solid var(--line);
157
- background:var(--bg); color:var(--ink); font:inherit; }
158
- .chat-input:focus { outline:none; border-color:var(--terr); }
159
- .chat-send { padding:9px 16px; border-radius:8px; border:1px solid var(--ink);
160
- background:var(--ink); color:var(--bg); font-weight:600; cursor:pointer; font:inherit; }
161
- .chat-send:disabled { opacity:.5; cursor:default; }
162
-
163
- /* @-mention autocomplete floats above the input */
164
- .mention-pop { position:absolute; left:12px; right:12px; bottom:56px; z-index:6;
165
- background:var(--card); border:1px solid var(--line); border-radius:10px; padding:5px;
166
- box-shadow:0 8px 24px rgba(50,40,20,.16); max-height:200px; overflow-y:auto; }
167
- .mention-mi { display:flex; align-items:center; gap:9px; width:100%; text-align:left;
168
- border:0; appearance:none; font-family:inherit; color:inherit; background:transparent;
169
- border-radius:7px; padding:6px 8px; font-size:13px; cursor:pointer; }
170
- .mention-mi:hover, .mention-mi.on { background:var(--chip); }
171
- .mention-mi .ma { width:22px; height:22px; border-radius:50%; display:grid; place-items:center;
172
- font-size:9px; font-weight:700; color:#fff; flex:none; }
173
-
174
- /* Token gate */
175
- .gate { max-width:420px; margin:12vh auto 0; text-align:center; }
176
- .gate h1 { font-size:19px; margin:0 0 6px; }
177
- .gate p { color:var(--ink2); margin:0 0 20px; }
178
- .gate form { display:flex; gap:8px; }
179
- .gate input { flex:1; padding:10px 12px; border-radius:8px; border:1px solid var(--line);
180
- background:var(--card); color:var(--ink); }
181
- .gate button { padding:10px 16px; border-radius:8px; border:1px solid var(--ink);
182
- background:var(--ink); color:var(--bg); font-weight:600; cursor:pointer; }
183
-
184
- /* --- Multi-workspace hosted shell + config surface (functional, not polished;
185
- a dedicated styling sub-project refines this). Reuses the board's tokens. --- */
186
- .shepherd-root { max-width:1100px; margin:0 auto; padding:40px 44px; }
187
- .shepherd-root > main { padding-top:18px; }
188
- .shepherd-config { display:flex; flex-direction:column; gap:24px; }
189
- .shepherd-config h2 { font-size:16px; margin:0 0 4px; }
190
- .shepherd-workspaces, .shepherd-members, .shepherd-connect-agent {
191
- display:flex; flex-direction:column; gap:10px;
192
- padding:16px; border:1px solid var(--line); border-radius:10px; background:var(--card); }
193
- .shepherd-workspaces .switcher { display:flex; flex-wrap:wrap; gap:8px; }
194
- .shepherd-workspaces .role { color:var(--ink3); font-size:12px; }
195
- .shepherd-workspaces .admin, .shepherd-workspaces .invites { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
196
- .shepherd-config input, .shepherd-config select {
197
- padding:8px 10px; border-radius:8px; border:1px solid var(--line);
198
- background:var(--bg); color:var(--ink); }
199
- .shepherd-config button {
200
- padding:8px 14px; border-radius:8px; border:1px solid var(--ink);
201
- background:var(--ink); color:var(--bg); font-weight:600; cursor:pointer; }
202
- .shepherd-config button:disabled { opacity:.55; cursor:default; }
203
- .shepherd-config .invite-result, .shepherd-connect-agent .token-once {
204
- font-family:ui-monospace, SFMono-Regular, Menlo, monospace; font-size:12px;
205
- word-break:break-all; padding:8px 10px; border-radius:8px;
206
- background:var(--chip); border:1px solid var(--line2); }
207
- .shepherd-config .revoked { color:var(--ink3); text-decoration:line-through; }
208
- .shepherd-empty-state { text-align:center; color:var(--ink2); padding:48px 24px; }
209
- .shepherd-empty-state button { margin-top:14px; }
1
+ :root {
2
+ --bg:#ece0c6; --ink:#322c20; --ink2:#6f6450; --ink3:#9c917a;
3
+ --line:#d7c9ac; --line2:#e0d4b9; --live:#3d8b58; --drop:#bd4f3a;
4
+ --chip:#e3d6ba; --terr:#7a6a48; --card:#f5ecd9;
5
+ }
6
+ * { box-sizing:border-box; }
7
+ html,body { height:100%; }
8
+ body {
9
+ margin:0; background:var(--bg); color:var(--ink);
10
+ font:14px/1.45 'Inter', ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
11
+ -webkit-font-smoothing:antialiased;
12
+ }
13
+ .wrap { max-width:1100px; margin:0 auto; padding:40px 44px; }
14
+
15
+ header { display:flex; align-items:center; gap:12px; padding-bottom:18px; }
16
+ .brand { font-size:17px; font-weight:600; }
17
+ .vitals { color:var(--ink3); font-size:12.5px; }
18
+ .grow { flex:1; }
19
+ .status { font-size:12px; color:var(--ink3); }
20
+ .status--ok { color:var(--live); }
21
+ .status--warn { color:var(--terr); }
22
+ .status--error { color:var(--drop); }
23
+ .freshness { font-size:12px; color:var(--ink3); }
24
+
25
+ /* Repo selector (hidden when <2 repos; populated by app.js) */
26
+ .repo { position:relative; }
27
+ .repo-trig { display:inline-flex; align-items:center; gap:6px; font-size:13px;
28
+ font-family:inherit; color:var(--ink); appearance:none;
29
+ border:1px solid var(--line); border-radius:8px; padding:4px 10px;
30
+ background:rgba(255,250,238,.4); cursor:pointer; }
31
+ .repo-trig .slash { color:var(--ink3); }
32
+ .repo-menu { position:absolute; top:36px; left:0; min-width:200px; background:var(--card);
33
+ border:1px solid var(--line); border-radius:10px; padding:5px;
34
+ box-shadow:0 8px 24px rgba(50,40,20,.14); z-index:5; }
35
+ .repo-mi { display:flex; justify-content:space-between; gap:14px; padding:7px 9px;
36
+ width:100%; text-align:left; border:0; appearance:none; font-family:inherit; color:inherit;
37
+ background:transparent; border-radius:7px; font-size:13px; cursor:pointer; }
38
+ .repo-mi:hover { background:var(--chip); }
39
+ .repo-mi.on { background:var(--chip); font-weight:600; }
40
+ .repo-mi .ct { font-size:11px; color:var(--ink3); }
41
+ .repo-mi.all { border-top:1px solid var(--line2); margin-top:4px; padding-top:9px; color:var(--ink2); }
42
+
43
+ /* Tabs */
44
+ .tabs { display:flex; gap:4px; margin-left:auto; }
45
+ .tab { font-size:13px; color:var(--ink2); padding:5px 11px; border:0; border-radius:7px;
46
+ background:transparent; cursor:pointer; font:inherit; }
47
+ .tab--active { background:var(--ink); color:var(--bg); }
48
+
49
+ /* Crew strip */
50
+ .crew { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:26px 0 32px; }
51
+ .person { display:inline-flex; align-items:center; gap:9px; padding:5px 13px 5px 5px;
52
+ border:1px solid var(--line); border-radius:999px; background:var(--card); font-size:13px; }
53
+ .person--idle { opacity:.55; }
54
+ .avatar { width:24px; height:24px; border-radius:50%; display:grid; place-items:center;
55
+ font-size:10px; font-weight:700; color:#fff; flex:none; }
56
+ .person__name { font-weight:600; }
57
+ .person__doing { color:var(--ink3); font-size:12px; }
58
+
59
+ /* Board */
60
+ .board { display:grid; grid-template-columns:1fr 1px 1fr; gap:0; }
61
+ .board__rule { background:var(--line); }
62
+ .col { padding:0 36px; } .col:first-child { padding-left:0; } .col:last-child { padding-right:0; }
63
+ .colhead { display:flex; align-items:center; gap:8px; margin-bottom:6px; }
64
+ .colhead h2 { font-size:12px; font-weight:600; letter-spacing:.03em; margin:0;
65
+ text-transform:uppercase; color:var(--ink2); }
66
+ .colhead .n { font-size:11px; color:var(--ink3); background:var(--chip);
67
+ border-radius:999px; padding:1px 8px; }
68
+
69
+ .task { padding:16px 0; border-bottom:1px solid var(--line2); }
70
+ .task__r1 { display:flex; align-items:center; gap:8px; }
71
+ .task__who { font-size:13.5px; font-weight:600; }
72
+ .task__tag { font-size:11px; color:var(--ink3); }
73
+ .task__repo { font-size:11px; color:var(--terr); background:rgba(122,106,72,.1);
74
+ border-radius:4px; padding:0 6px; }
75
+ .task__stat { margin-left:auto; font-size:11px; font-weight:500; color:var(--ink3); }
76
+ .task__stat--drop { color:var(--drop); }
77
+ .livedot { width:7px; height:7px; border-radius:50%; background:var(--live); margin-left:auto; }
78
+ .task__intent { font-size:13.5px; margin:5px 0 0; line-height:1.45; }
79
+ .terr { margin-top:8px; display:flex; flex-wrap:wrap; gap:6px; align-items:center; }
80
+ .terr__lbl { font-size:9.5px; text-transform:uppercase; letter-spacing:.05em; color:var(--ink3); }
81
+ .glob { font-family:ui-monospace, Menlo, monospace; font-size:11px; color:var(--terr);
82
+ background:rgba(122,106,72,.12); border:1px solid rgba(122,106,72,.22);
83
+ border-radius:5px; padding:1px 7px; }
84
+ .task__meta { font-size:11.5px; color:var(--ink3); margin-top:6px; }
85
+ /* expandable territory (2+ paths collapse to a one-line "N paths" toggle) */
86
+ .terrx { margin-top:8px; }
87
+ .terrx summary { list-style:none; cursor:pointer; display:flex; align-items:center;
88
+ gap:6px; flex-wrap:wrap; user-select:none; }
89
+ .terrx summary::-webkit-details-marker { display:none; }
90
+ .terrx .terr--full { margin-top:8px; }
91
+ .glob--more { cursor:pointer; color:var(--ink2); background:var(--chip);
92
+ border:1px solid var(--line); }
93
+ .glob--more .tw { color:var(--ink3); display:inline-block; transition:transform .15s; }
94
+ .terrx[open] summary .glob--more .tw { transform:rotate(90deg); }
95
+ /* grouped agent box: header + claims rail + collapsible "narrower" fold */
96
+ .grp { padding:16px 0; border-bottom:1px solid var(--line2); }
97
+ .grp__head { display:flex; align-items:center; gap:8px; }
98
+ .grp__who { font-size:13.5px; font-weight:600; }
99
+ .grp__tag { font-size:11px; color:var(--ink3); }
100
+ .grp__count { font-size:11px; color:var(--ink3); }
101
+ .grp__dot { width:7px; height:7px; border-radius:50%; background:var(--live); margin-left:auto; }
102
+ .claims { margin:10px 0 0 6px; padding-left:14px; border-left:1px solid var(--line); }
103
+ .claim { padding:6px 0; }
104
+ .claim + .claim { border-top:1px solid var(--line2); margin-top:6px; }
105
+ .fold { margin-top:10px; }
106
+ .fold summary { list-style:none; cursor:pointer; font-size:12px; color:var(--ink2);
107
+ display:inline-flex; align-items:center; gap:6px; user-select:none; }
108
+ .fold summary::-webkit-details-marker { display:none; }
109
+ .fold summary .tw { display:inline-block; color:var(--ink3); transition:transform .15s; }
110
+ .fold[open] summary .tw { transform:rotate(90deg); }
111
+ .fold__body { margin:8px 0 0 6px; padding-left:14px; border-left:1px dashed var(--line); }
112
+ .covered { font-size:10.5px; color:var(--ink3); font-style:italic; margin-top:4px; }
113
+ .day { font-size:11px; color:var(--ink3); padding:18px 0 2px; font-weight:600; }
114
+ .more { margin-top:20px; font-size:12.5px; color:var(--ink2); padding:7px 13px;
115
+ border:1px solid var(--line); border-radius:8px; background:rgba(255,250,238,.35);
116
+ cursor:pointer; }
117
+ .empty { color:var(--ink3); font-style:italic; padding:14px 0; }
118
+
119
+ /* Chat (re-themed; structure unchanged) */
120
+ .chat-wrap { background:var(--card); border:1px solid var(--line); border-radius:12px;
121
+ display:flex; flex-direction:column; overflow:hidden; height:calc(100vh - 150px); min-height:320px; }
122
+ .chat { flex:1; overflow-y:auto; padding:16px; }
123
+ .chat { scrollbar-width:thin; scrollbar-color:var(--line) transparent; }
124
+ .chat::-webkit-scrollbar { width:10px; }
125
+ .chat::-webkit-scrollbar-track { background:transparent; }
126
+ .chat::-webkit-scrollbar-thumb { background:var(--line); border-radius:999px;
127
+ border:3px solid var(--card); background-clip:padding-box; }
128
+ .chat::-webkit-scrollbar-thumb:hover { background:var(--ink3); background-clip:padding-box; }
129
+ .chat__note { padding:9px 16px; font-size:11.5px; color:var(--ink3); }
130
+ .msg { display:flex; gap:11px; padding:9px 0; }
131
+ .msg__avatar { flex:none; width:32px; height:32px; border-radius:50%; display:grid;
132
+ place-items:center; font-size:12px; font-weight:700; color:#fff; }
133
+ .msg__body { min-width:0; flex:1; }
134
+ .msg__head { display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
135
+ .msg__who { font-weight:600; }
136
+ .msg__human { font-size:12px; color:var(--ink3); }
137
+ .msg__to { font-size:11.5px; color:var(--terr); }
138
+ .msg__time { font-size:11.5px; color:var(--ink3); margin-left:auto; }
139
+ .msg__text { margin-top:3px; padding:8px 12px; border-radius:4px 12px 12px 12px;
140
+ background:var(--chip); white-space:pre-wrap; word-break:break-word; }
141
+ .msg--targeted .msg__text { box-shadow:inset 3px 0 0 var(--terr); }
142
+
143
+ /* Operator's own messages — same group-chat structure, mirrored to the right. */
144
+ .msg--me { flex-direction:row-reverse; }
145
+ .msg--me .msg__head { flex-direction:row-reverse; }
146
+ .msg--me .msg__time { margin-left:0; margin-right:auto; }
147
+ .msg--me .msg__body { display:flex; flex-direction:column; align-items:flex-end; }
148
+ .msg--me .msg__text { border-radius:12px 4px 12px 12px; background:#d4e7d2; }
149
+ .msg--me.msg--targeted .msg__text { box-shadow:inset -3px 0 0 var(--terr); }
150
+
151
+ /* Composer */
152
+ .composer { position:relative; border-top:1px solid var(--line); padding:10px 12px; }
153
+ .chat-form { display:flex; gap:8px; }
154
+ .chat-input { flex:1; padding:9px 12px; border-radius:8px; border:1px solid var(--line);
155
+ background:var(--bg); color:var(--ink); font:inherit; }
156
+ .chat-input:focus { outline:none; border-color:var(--terr); }
157
+ .chat-send { padding:9px 16px; border-radius:8px; border:1px solid var(--ink);
158
+ background:var(--ink); color:var(--bg); font-weight:600; cursor:pointer; font:inherit; }
159
+ .chat-send:disabled { opacity:.5; cursor:default; }
160
+
161
+ /* @-mention autocomplete floats above the input */
162
+ .mention-pop { position:absolute; left:12px; right:12px; bottom:56px; z-index:6;
163
+ background:var(--card); border:1px solid var(--line); border-radius:10px; padding:5px;
164
+ box-shadow:0 8px 24px rgba(50,40,20,.16); max-height:200px; overflow-y:auto; }
165
+ .mention-mi { display:flex; align-items:center; gap:9px; width:100%; text-align:left;
166
+ border:0; appearance:none; font-family:inherit; color:inherit; background:transparent;
167
+ border-radius:7px; padding:6px 8px; font-size:13px; cursor:pointer; }
168
+ .mention-mi:hover, .mention-mi.on { background:var(--chip); }
169
+ .mention-mi .ma { width:22px; height:22px; border-radius:50%; display:grid; place-items:center;
170
+ font-size:9px; font-weight:700; color:#fff; flex:none; }
171
+
172
+ /* Token gate */
173
+ .gate { max-width:420px; margin:12vh auto 0; text-align:center; }
174
+ .gate h1 { font-size:19px; margin:0 0 6px; }
175
+ .gate p { color:var(--ink2); margin:0 0 20px; }
176
+ .gate form { display:flex; gap:8px; }
177
+ .gate input { flex:1; padding:10px 12px; border-radius:8px; border:1px solid var(--line);
178
+ background:var(--card); color:var(--ink); }
179
+ .gate button { padding:10px 16px; border-radius:8px; border:1px solid var(--ink);
180
+ background:var(--ink); color:var(--bg); font-weight:600; cursor:pointer; }
181
+
182
+ /* --- Multi-workspace hosted shell + config surface. Reuses the board's
183
+ tokens and its editorial vocabulary (uppercase micro-labels echoing the
184
+ column heads, hairline rules) so Config reads as part of the board. --- */
185
+ .shepherd-root { max-width:1100px; margin:0 auto; padding:40px 44px; }
186
+ .shepherd-root > main { padding-top:18px; }
187
+ .shepherd-config { display:flex; flex-direction:column; gap:24px; }
188
+ .shepherd-config h2 { font-size:16px; margin:0 0 4px; }
189
+
190
+ /* Every config card shares one shell: a header band sitting on a hairline
191
+ above a padded body. Nested cards (Members) reuse the same anatomy. */
192
+ .shepherd-workspaces, .shepherd-members, .shepherd-connect-agent {
193
+ border:1px solid var(--line); border-radius:12px; background:var(--card); overflow:hidden; }
194
+ .shepherd-config .card-head { padding:18px 20px 14px; border-bottom:1px solid var(--line2); }
195
+ .shepherd-config .card-head h3 { font-size:14px; font-weight:600; margin:0; }
196
+ .shepherd-config .card-sub { margin:3px 0 0; font-size:12.5px; color:var(--ink3); }
197
+ .shepherd-config .card-body { padding:16px 20px 18px; display:flex; flex-direction:column; gap:16px; }
198
+ .shepherd-config .card-body > [role="alert"] { margin:0; color:var(--drop); font-size:13px; }
199
+ .shepherd-config .card-body > [role="status"] { margin:0; color:var(--ink2); font-size:13px; }
200
+
201
+ /* A field: uppercase eyebrow label, optional helper, then input(s) + action
202
+ on one row. Labels borrow the board's .colhead h2 treatment. */
203
+ .shepherd-config .field { display:flex; flex-direction:column; gap:8px; }
204
+ .shepherd-config .card-body label {
205
+ font-size:11px; font-weight:600; letter-spacing:.05em; text-transform:uppercase; color:var(--ink3); }
206
+ .shepherd-config .helper { margin:0; font-size:12.5px; color:var(--ink2); }
207
+ .shepherd-config .field > select { width:100%; }
208
+ .shepherd-config .field__row { display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
209
+ .shepherd-config .field__row > input { flex:1; min-width:200px; }
210
+
211
+ /* Admin zone (invites + roster) is set off from create/join by a hairline. */
212
+ .shepherd-workspaces .admin { display:flex; flex-direction:column; gap:14px;
213
+ padding-top:16px; border-top:1px solid var(--line2); }
214
+ .shepherd-workspaces .invites { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
215
+
216
+ .shepherd-config input, .shepherd-config select {
217
+ padding:9px 12px; border-radius:8px; border:1px solid var(--line);
218
+ background:var(--bg); color:var(--ink); font:inherit;
219
+ transition:border-color .12s ease, box-shadow .12s ease; }
220
+ .shepherd-config input::placeholder { color:var(--ink3); }
221
+ .shepherd-config input:focus, .shepherd-config select:focus {
222
+ outline:none; border-color:var(--terr); box-shadow:0 0 0 3px rgba(122,106,72,.14); }
223
+ .shepherd-config button {
224
+ padding:9px 16px; border-radius:8px; border:1px solid var(--ink);
225
+ background:var(--ink); color:var(--bg); font-weight:600; cursor:pointer; font:inherit;
226
+ white-space:nowrap; transition:background .12s ease; }
227
+ .shepherd-config button:hover:not(:disabled) { background:#413a2a; }
228
+ .shepherd-config button:disabled { opacity:.55; cursor:default; }
229
+
230
+ /* Token / member rows: leading name grows, meta + action ride the right. */
231
+ .shepherd-config ul { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:6px; }
232
+ .shepherd-config li { display:flex; align-items:center; gap:10px; padding:8px 12px;
233
+ border:1px solid var(--line2); border-radius:8px; background:var(--bg); font-size:13px; }
234
+ .shepherd-config li > span:first-child { flex:1; min-width:0; font-weight:500; }
235
+ .shepherd-config li button { padding:5px 12px; }
236
+ .shepherd-config .role { color:var(--ink3); font-size:12px; }
237
+
238
+ /* Install command block. */
239
+ .shepherd-connect-agent pre { margin:0; padding:12px 14px; border-radius:8px;
240
+ border:1px solid var(--line); background:var(--bg); color:var(--ink);
241
+ font-family:ui-monospace, SFMono-Regular, Menlo, monospace; font-size:12px; line-height:1.5;
242
+ overflow-x:auto; white-space:pre-wrap; word-break:break-word; }
243
+ .shepherd-connect-agent h4 { margin:6px 0 0; font-size:11px; font-weight:600;
244
+ letter-spacing:.05em; text-transform:uppercase; color:var(--ink3); }
245
+
246
+ .shepherd-config .invite-result, .shepherd-connect-agent .token-once {
247
+ font-family:ui-monospace, SFMono-Regular, Menlo, monospace; font-size:12px;
248
+ word-break:break-all; padding:8px 10px; border-radius:8px;
249
+ background:var(--chip); border:1px solid var(--line2); }
250
+ .shepherd-config .revoked { color:var(--ink3); text-decoration:line-through; }
251
+ .shepherd-empty-state { text-align:center; color:var(--ink2); padding:48px 24px; }
252
+ .shepherd-empty-state button { margin-top:14px; }