@hanzlaa/rcode 4.5.0 → 4.7.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 (38) hide show
  1. package/README.md +47 -14
  2. package/package.json +1 -1
  3. package/rcode/agents/rcode-mariam.md +6 -0
  4. package/rcode/agents/rcode-sadiq.md +6 -0
  5. package/rcode/agents/rcode-waleed.md +6 -0
  6. package/rcode/bin/rcode-hooks.cjs +41 -5
  7. package/rcode/skills/agents/mariam-marketing/SKILL.md +1 -0
  8. package/rcode/skills/agents/sadiq-analyst/SKILL.md +1 -0
  9. package/rcode/skills/agents/waleed-architect/SKILL.md +1 -0
  10. package/rcode/workflows/council.md +29 -1
  11. package/server/dashboard.js +6 -3
  12. package/server/lib/html/client/components/App.js +16 -2
  13. package/server/lib/html/client/components/OrchPanel.js +2 -2
  14. package/server/lib/html/client/components/PhaseGraph.js +20 -12
  15. package/server/lib/html/client/components/Sidebar.js +1 -0
  16. package/server/lib/html/client/components/Topbar.js +3 -3
  17. package/server/lib/html/client/components/XtermPanel.js +98 -23
  18. package/server/lib/html/client/components/dashboard/Blockers.js +3 -3
  19. package/server/lib/html/client/components/dashboard/CompletedTasks.js +4 -2
  20. package/server/lib/html/client/components/dashboard/InProgress.js +4 -3
  21. package/server/lib/html/client/components/dashboard/ProgressTimeline.js +11 -6
  22. package/server/lib/html/client/components/dashboard/RecentDecisions.js +4 -3
  23. package/server/lib/html/client/components/shared.js +111 -2
  24. package/server/lib/html/client/orchestrator.js +28 -15
  25. package/server/lib/html/client/store.js +47 -0
  26. package/server/lib/html/client/util.js +1 -22
  27. package/server/lib/html/client/views/BacklogView.js +44 -0
  28. package/server/lib/html/client/views/DecisionsView.js +4 -3
  29. package/server/lib/html/client/views/FilesView.js +47 -34
  30. package/server/lib/html/client/views/KanbanView.js +8 -0
  31. package/server/lib/html/client/views/OrchestrationView.js +247 -169
  32. package/server/lib/html/client/views/PhasesView.js +8 -3
  33. package/server/lib/html/client/views/SprintsView.js +9 -0
  34. package/server/lib/html/client.js +1 -0
  35. package/server/lib/html/css.js +692 -246
  36. package/server/lib/html/shell.js +9 -3
  37. package/server/lib/scanner.js +21 -6
  38. package/server/orchestrator.js +3 -4
@@ -1,7 +1,7 @@
1
1
  /* CLAUDE.md exemption: pure CSS data file, no logic — 1000-line limit does not apply */
2
2
  /**
3
- * Dashboard CSS — Linear design system.
4
- * Dark-first (Linear-style). rcode accent: #5e6ad2 (Aether Blue).
3
+ * Dashboard CSS — Diwan design system.
4
+ * Dark-first. rcode accent: #22b6cf (Diwan Teal).
5
5
  */
6
6
  function renderCss() {
7
7
  return `<style>
@@ -10,56 +10,72 @@ function renderCss() {
10
10
  /* ── Design tokens ─────────────────────────────────────────────── */
11
11
  :root {
12
12
  /* Surfaces */
13
- --bg-page: #08090a;
14
- --bg-elev-1: #0f1011;
15
- --bg-elev-2: #161718;
16
- --bg-elev-3: #1c1d1f;
17
- --bg-hover: #23252a;
18
- --bg-input: #1a1b1d;
19
- --bg-active: #2c2d31;
13
+ --bg-page: #0b0d0f;
14
+ --bg-elev-1: #131619;
15
+ --bg-elev-2: #1a1e22;
16
+ --bg-elev-3: #222831;
17
+ --bg-hover: #1e2329;
18
+ --bg-input: #1a1e22;
19
+ --bg-active: #262d35;
20
+ --bg-sunken: #070809; /* wells/terminal chrome — one step below bg-page */
20
21
 
21
22
  /* Borders */
22
23
  --border-subtle: rgba(255,255,255,0.06);
23
- --border-default: #23252a;
24
- --border-strong: #323334;
24
+ --border-default: rgba(255,255,255,0.10);
25
+ --border-strong: #2f373f;
25
26
 
26
27
  /* Text */
27
- --text-primary: #f7f8f8;
28
- --text-secondary: #b4bcd0;
29
- --text-tertiary: #8a8f98;
30
- --text-muted: #62666d;
31
-
32
- /* Brand — rcode keeps Aether Blue */
33
- --accent-primary: #5e6ad2;
34
- --accent-hover: #7170ff;
35
- --accent-active: #4853bb;
36
- --accent-bg: rgba(94,106,210,0.12);
37
- --accent-border: rgba(94,106,210,0.35);
28
+ --text-primary: #e8edf1;
29
+ --text-secondary: #a6b2bd;
30
+ --text-tertiary: #717d88;
31
+ --text-muted: #4c565f;
32
+
33
+ /* Brand — Diwan accent (teal) */
34
+ --accent-primary: #22b6cf;
35
+ --accent-hover: #46cde3;
36
+ --accent-active: #178ea3;
37
+ --accent-bg: rgba(34,182,207,0.12);
38
+ --accent-border: rgba(34,182,207,0.35);
39
+ --accent-fg: #04222a;
38
40
 
39
41
  /* Semantic */
40
- --green: #4cb782;
41
- --amber: #f2c94c;
42
- --red: #eb5757;
43
- --blue: #26b5ce;
42
+ --green: #3cb98a;
43
+ --amber: #e0a63a;
44
+ --red: #ec6a5e;
45
+ --blue: #4d9fe8;
44
46
  --violet: #bf7af0;
45
47
 
46
48
  /* Status */
47
- --status-todo: #e2e2e2;
48
- --status-progress: #f2c94c;
49
- --status-blocked: #eb5757;
50
- --status-done: #4cb782;
49
+ --status-todo: #7f8ea0;
50
+ --status-progress: #e0a63a;
51
+ --status-blocked: #ec6a5e;
52
+ --status-done: #3cb98a;
53
+
54
+ /* Per-status wash + border (badge/pill treatment) */
55
+ --st-planned: #7f8ea0;
56
+ --st-planned-wash: rgba(127,142,160,0.14);
57
+ --st-planned-border: rgba(127,142,160,0.36);
58
+ --st-executing-wash: rgba(224,166,58,0.15);
59
+ --st-executing-border: rgba(224,166,58,0.40);
60
+ --st-complete-wash: rgba(60,185,138,0.15);
61
+ --st-complete-border: rgba(60,185,138,0.40);
62
+ --st-blocked-wash: rgba(236,106,94,0.15);
63
+ --st-blocked-border: rgba(236,106,94,0.42);
64
+ --st-info-wash: rgba(77,159,232,0.14);
65
+ --st-info-border: rgba(77,159,232,0.40);
66
+ --chart-track: rgba(255,255,255,0.07);
51
67
 
52
68
  /* Type */
53
69
  --font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
54
- --font-mono: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
70
+ --font-mono: ui-monospace, "SF Mono", "JetBrains Mono", "Cascadia Code", Menlo, Consolas, monospace;
55
71
 
56
72
  /* Size scale */
57
73
  --text-xl: 20px;
58
- --text-lg: 17px;
59
- --text-md: 15px;
60
- --text-sm: 14px;
61
- --text-xs: 13px;
62
- --text-2xs: 11px;
74
+ --text-lg: 16px;
75
+ --text-md: 14px;
76
+ --text-sm: 12px;
77
+ --text-xs: 11px;
78
+ --text-2xs: 10px;
63
79
  --text-stat: 28px; /* stat card value — large metric numeral */
64
80
 
65
81
  /* Component dimensions */
@@ -67,21 +83,21 @@ function renderCss() {
67
83
  --size-icon-btn: 32px; /* square icon button (hamburger, etc.) */
68
84
 
69
85
  /* Spacing (4px base) */
70
- --space-1: 2px;
71
- --space-2: 4px;
72
- --space-3: 8px;
73
- --space-4: 12px;
74
- --space-5: 16px;
75
- --space-6: 20px;
76
- --space-7: 24px;
86
+ --space-1: 4px;
87
+ --space-2: 8px;
88
+ --space-3: 12px;
89
+ --space-4: 16px;
90
+ --space-5: 24px;
91
+ --space-6: 32px;
92
+ --space-7: 48px;
77
93
  --space-8: 32px;
78
94
  --space-10: 64px;
79
95
 
80
96
  /* Radius */
81
- --radius-1: 2px;
82
- --radius-2: 4px;
83
- --radius-3: 6px;
84
- --radius-4: 8px;
97
+ --radius-1: 4px;
98
+ --radius-2: 6px;
99
+ --radius-3: 9px;
100
+ --radius-4: 14px;
85
101
  --radius-5: 12px;
86
102
  --radius-full: 9999px;
87
103
 
@@ -89,9 +105,9 @@ function renderCss() {
89
105
  --shadow-lg: 0 16px 32px rgba(0,0,0,0.6);
90
106
 
91
107
  /* Motion */
92
- --ease: cubic-bezier(0.4,0,0.2,1);
93
- --t-fast: 120ms;
94
- --t-base: 200ms;
108
+ --ease: cubic-bezier(0.32,0.72,0,1);
109
+ --t-fast: 90ms;
110
+ --t-base: 160ms;
95
111
  --t-menu: 240ms;
96
112
 
97
113
  /* Legacy compat aliases */
@@ -105,51 +121,81 @@ function renderCss() {
105
121
  --accent-red: var(--red);
106
122
  --accent-blue: var(--blue);
107
123
 
108
- /* ── Dashboard redesign (mockup) tokens ──────────────────────────
109
- Exact values from .planning/campaign/MOCKUP-SPEC.md. Namespaced
110
- --dash-* so the Overview redesign can adopt the deep-navy mockup
111
- palette without disturbing the existing Linear theme above. */
112
- --dash-bg: #0F1729; /* deep navy page base */
113
- --dash-card: #111A2E; /* card surface */
114
- --dash-border: #1E2A44; /* 1px hairline border */
115
- --dash-teal: #2DD4BF;
116
- --dash-purple: #A78BFA;
117
- --dash-blue: #3B82F6;
118
- --dash-amber: #F59E0B;
119
- --dash-sev-high: #F87171; /* red — High */
120
- --dash-sev-medium: #FBBF24; /* amber — Medium */
121
- --dash-sev-low: #9CA3AF; /* gray — Low */
122
- --dash-text: #E6EDF7; /* primary text */
123
- --dash-text-muted: #8595AD; /* muted text */
124
- --dash-hover: rgba(255, 255, 255, 0.04); /* row/button hover wash */
124
+ /* ── Dashboard chrome tokens ──────────────────────────────────────
125
+ --dash-* aliases onto the Diwan design tokens above so the Overview
126
+ card grid, sidebar, and topbar share one palette with the rest of
127
+ the app no independent hex values, single source of truth. */
128
+ --dash-bg: var(--bg-page);
129
+ --dash-card: var(--bg-elev-1);
130
+ --dash-border: var(--border-subtle);
131
+ --dash-teal: var(--accent-primary);
132
+ --dash-purple: var(--accent-primary); /* was lavender; aliases accent teal now */
133
+ --dash-blue: var(--status-progress); /* was blue; "in progress" amber now */
134
+ --dash-amber: var(--amber);
135
+ --dash-sev-high: var(--red);
136
+ --dash-sev-medium: var(--amber);
137
+ --dash-sev-low: var(--text-tertiary);
138
+ --dash-text: var(--text-primary);
139
+ --dash-text-muted: var(--text-tertiary);
140
+ --dash-hover: var(--bg-hover);
125
141
  }
126
142
 
127
143
  /* Light mode */
128
144
  [data-theme="light"] {
129
- --bg-page: #f5f5f7;
145
+ --bg-page: #f3f5f8;
130
146
  --bg-elev-1: #ffffff;
131
- --bg-elev-2: #f0f0f2;
132
- --bg-elev-3: #e8e8ec;
133
- --bg-hover: #e2e2e8;
134
- --bg-input: #f8f8fa;
135
- --bg-active: #dcdce4;
136
- --border-subtle: rgba(0,0,0,0.06);
137
- --border-default: #d8d8e0;
138
- --border-strong: #c0c0cc;
139
- --text-primary: #0f0f11;
140
- --text-secondary: #4a4a58;
141
- --text-tertiary: #72727e;
142
- --text-muted: #9898a4;
143
- --accent-bg: rgba(94,106,210,0.08);
144
-
145
- /* Dashboard mockup tokens — light theme. Surfaces/text flip to light;
146
- teal/purple/blue/amber accents and severity colors stay the same. */
147
- --dash-bg: #F4F6FB;
148
- --dash-card: #FFFFFF;
149
- --dash-border: #E2E8F0;
150
- --dash-text: #1A2233;
151
- --dash-text-muted: #5B6B82;
152
- --dash-hover: rgba(15, 23, 41, 0.05);
147
+ --bg-elev-2: #ffffff;
148
+ --bg-elev-3: #eef2f6;
149
+ --bg-hover: #edf1f5;
150
+ --bg-input: #ffffff;
151
+ --bg-active: #e4eaf0;
152
+ --bg-sunken: #e7ecf1;
153
+ --border-subtle: rgba(15,25,35,0.08);
154
+ --border-default: rgba(15,25,35,0.13);
155
+ --border-strong: #ccd5de;
156
+ --text-primary: #0f161c;
157
+ --text-secondary: #45525d;
158
+ --text-tertiary: #6b7883;
159
+ --text-muted: #a3adb6;
160
+
161
+ --accent-primary: #0f97b0;
162
+ --accent-hover: #0c8299;
163
+ --accent-active: #0a6d80;
164
+ --accent-bg: rgba(15,151,176,0.10);
165
+ --accent-border: rgba(15,151,176,0.34);
166
+ --accent-fg: #ffffff;
167
+
168
+ --green: #178a5f;
169
+ --amber: #b0741a;
170
+ --red: #d1443a;
171
+ --blue: #2679c9;
172
+
173
+ --status-todo: #62707d;
174
+ --status-progress: #b0741a;
175
+ --status-blocked: #d1443a;
176
+ --status-done: #178a5f;
177
+
178
+ --st-planned: #62707d;
179
+ --st-planned-wash: rgba(98,112,125,0.11);
180
+ --st-planned-border: rgba(98,112,125,0.34);
181
+ --st-executing-wash: rgba(176,116,26,0.12);
182
+ --st-executing-border: rgba(176,116,26,0.36);
183
+ --st-complete-wash: rgba(23,138,95,0.12);
184
+ --st-complete-border: rgba(23,138,95,0.36);
185
+ --st-blocked-wash: rgba(209,68,58,0.11);
186
+ --st-blocked-border: rgba(209,68,58,0.36);
187
+ --st-info-wash: rgba(38,121,201,0.11);
188
+ --st-info-border: rgba(38,121,201,0.36);
189
+ --chart-track: rgba(15,25,35,0.09);
190
+
191
+ /* Dashboard chrome tokens — light theme. Same alias approach; flips
192
+ automatically with the base tokens above. */
193
+ --dash-bg: var(--bg-page);
194
+ --dash-card: var(--bg-elev-1);
195
+ --dash-border: var(--border-subtle);
196
+ --dash-text: var(--text-primary);
197
+ --dash-text-muted: var(--text-tertiary);
198
+ --dash-hover: var(--bg-hover);
153
199
  }
154
200
 
155
201
  /* ── Reset ─────────────────────────────────────────────────────── */
@@ -233,6 +279,7 @@ html, body {
233
279
  .nav-section:first-child { margin-top: 0; }
234
280
 
235
281
  .nav-link {
282
+ position: relative;
236
283
  display: flex;
237
284
  align-items: center;
238
285
  gap: var(--space-3);
@@ -252,7 +299,17 @@ html, body {
252
299
  transition: background var(--t-fast) var(--ease), color var(--t-fast) var(--ease);
253
300
  }
254
301
  .nav-link:hover { background: var(--bg-hover); color: var(--text-secondary); }
255
- .nav-link.active { background: var(--bg-elev-2); color: var(--text-primary); }
302
+ .nav-link.active { background: var(--accent-bg); color: var(--text-primary); font-weight: 600; }
303
+ .nav-link.active::before {
304
+ content: '';
305
+ position: absolute;
306
+ left: 0;
307
+ top: 7px;
308
+ bottom: 7px;
309
+ width: 2px;
310
+ border-radius: 2px;
311
+ background: var(--accent-primary);
312
+ }
256
313
  .nav-count {
257
314
  margin-left: auto;
258
315
  font-size: 10px;
@@ -308,7 +365,7 @@ html, body {
308
365
 
309
366
  /* ── Topbar / header ───────────────────────────────────────────── */
310
367
  header {
311
- background: rgba(8,9,10,0.8); /* intentional: frosted glass tied to --bg-page exact value; alpha can't be expressed as a theme token */
368
+ background: rgba(11,13,15,0.8); /* intentional: frosted glass tied to --bg-page exact value; alpha can't be expressed as a theme token */
312
369
  backdrop-filter: blur(12px);
313
370
  -webkit-backdrop-filter: blur(12px);
314
371
  border-bottom: 1px solid var(--border-subtle);
@@ -323,7 +380,7 @@ header {
323
380
  }
324
381
 
325
382
  [data-theme="light"] header {
326
- background: rgba(245,245,247,0.85); /* intentional: light frosted glass; alpha channel can't be expressed as a theme token */
383
+ background: rgba(243,245,248,0.85); /* intentional: light frosted glass; alpha channel can't be expressed as a theme token */
327
384
  }
328
385
 
329
386
  .brand {
@@ -418,6 +475,11 @@ header {
418
475
  /* ── Views ─────────────────────────────────────────────────────── */
419
476
  .view { display: none; }
420
477
  .view.active { display: block; }
478
+ /* Orchestration's 2-column grid needs display:grid, not the block above.
479
+ Three classes (0,3,0) beats .view.active's (0,2,0) regardless of source
480
+ order, so this wins without touching the shared .view/.view.active rules
481
+ every other view relies on. */
482
+ .view.active.orch-layout { display: grid; }
421
483
 
422
484
  .view-title {
423
485
  font-size: var(--text-xl);
@@ -658,7 +720,7 @@ section .body {
658
720
  /* ── Progress bar ───────────────────────────────────────────────── */
659
721
  .progress-bar {
660
722
  height: 4px;
661
- background: var(--bg-elev-3);
723
+ background: var(--chart-track);
662
724
  border-radius: 2px;
663
725
  overflow: hidden;
664
726
  width: 100%;
@@ -688,7 +750,7 @@ section .body {
688
750
  .velocity-bar-track {
689
751
  flex: 1;
690
752
  height: 6px;
691
- background: var(--bg-elev-3);
753
+ background: var(--chart-track);
692
754
  border-radius: 3px;
693
755
  overflow: hidden;
694
756
  }
@@ -935,6 +997,7 @@ section .body {
935
997
  .inline-file-entry {
936
998
  display: flex;
937
999
  align-items: center;
1000
+ gap: var(--space-2);
938
1001
  padding: var(--space-2) var(--space-4);
939
1002
  font-family: var(--font-mono);
940
1003
  font-size: var(--text-xs);
@@ -946,9 +1009,50 @@ section .body {
946
1009
  }
947
1010
  .inline-file-entry:last-child { border-bottom: none; }
948
1011
  .inline-file-entry:hover { background: var(--bg-hover); color: var(--text-primary); }
949
- .inline-file-entry.selected { background: rgba(94,106,210,0.1); color: var(--accent-primary); }
1012
+ .inline-file-entry.selected { background: rgba(34,182,207,0.1); color: var(--accent-primary); }
1013
+ .inline-file-entry svg { flex-shrink: 0; opacity: 0.7; }
1014
+ .inline-file-label {
1015
+ overflow: hidden;
1016
+ text-overflow: ellipsis;
1017
+ white-space: nowrap;
1018
+ }
950
1019
  .inline-file-group { margin-bottom: var(--space-3); }
951
- .inline-subgroup { padding-left: var(--space-4); }
1020
+ .inline-file-group-title {
1021
+ display: flex;
1022
+ align-items: center;
1023
+ gap: var(--space-2);
1024
+ font-size: var(--text-xs);
1025
+ font-weight: 600;
1026
+ color: var(--text-muted);
1027
+ text-transform: uppercase;
1028
+ letter-spacing: 0.07em;
1029
+ padding: var(--space-1) var(--space-3);
1030
+ }
1031
+ .inline-file-group-count {
1032
+ font-size: var(--text-2xs);
1033
+ font-weight: 500;
1034
+ color: var(--text-muted);
1035
+ text-transform: none;
1036
+ letter-spacing: 0;
1037
+ }
1038
+ .inline-subgroup { padding-left: var(--space-4); margin-bottom: var(--space-1); }
1039
+ .inline-subgroup-summary {
1040
+ display: flex;
1041
+ align-items: center;
1042
+ gap: var(--space-2);
1043
+ font-size: var(--text-xs);
1044
+ font-weight: 500;
1045
+ color: var(--text-secondary);
1046
+ cursor: pointer;
1047
+ padding: var(--space-1) var(--space-3);
1048
+ user-select: none;
1049
+ }
1050
+ .inline-file-total {
1051
+ margin-left: var(--space-2);
1052
+ font-size: var(--text-sm);
1053
+ font-weight: 400;
1054
+ color: var(--text-muted);
1055
+ }
952
1056
  .file-path-header {
953
1057
  font-size: var(--text-2xs);
954
1058
  color: var(--text-muted);
@@ -1073,7 +1177,7 @@ section .body {
1073
1177
  font-weight: 500;
1074
1178
  padding: 1px 5px;
1075
1179
  border-radius: var(--radius-full);
1076
- background: rgba(94,106,210,0.15);
1180
+ background: rgba(34,182,207,0.15);
1077
1181
  color: var(--accent-hover);
1078
1182
  text-transform: uppercase;
1079
1183
  letter-spacing: 0.04em;
@@ -1121,8 +1225,8 @@ section .body {
1121
1225
  align-items: center;
1122
1226
  gap: var(--space-4);
1123
1227
  padding: var(--space-3) var(--space-5);
1124
- background: rgba(235,87,87,0.1);
1125
- border-bottom: 1px solid rgba(235,87,87,0.25);
1228
+ background: rgba(236,106,94,0.1);
1229
+ border-bottom: 1px solid rgba(236,106,94,0.25);
1126
1230
  font-size: var(--text-xs);
1127
1231
  flex-shrink: 0;
1128
1232
  }
@@ -1130,7 +1234,7 @@ section .body {
1130
1234
  .banner-list { color: var(--text-secondary); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1131
1235
  .banner-dismiss {
1132
1236
  background: none;
1133
- border: 1px solid rgba(235,87,87,0.4);
1237
+ border: 1px solid rgba(236,106,94,0.4);
1134
1238
  border-radius: var(--radius-2);
1135
1239
  color: var(--red);
1136
1240
  font-size: var(--text-2xs);
@@ -1139,12 +1243,12 @@ section .body {
1139
1243
  cursor: pointer;
1140
1244
  white-space: nowrap;
1141
1245
  }
1142
- .banner-dismiss:hover { background: rgba(235,87,87,0.15); }
1246
+ .banner-dismiss:hover { background: rgba(236,106,94,0.15); }
1143
1247
 
1144
1248
  #parse-warning {
1145
1249
  padding: var(--space-3) var(--space-5);
1146
- background: rgba(242,201,76,0.08);
1147
- border-bottom: 1px solid rgba(242,201,76,0.2);
1250
+ background: rgba(224,166,58,0.08);
1251
+ border-bottom: 1px solid rgba(224,166,58,0.2);
1148
1252
  font-size: var(--text-xs);
1149
1253
  color: var(--amber);
1150
1254
  }
@@ -1234,7 +1338,7 @@ footer {
1234
1338
  }
1235
1339
 
1236
1340
  .kanban-col {
1237
- background: var(--bg-elev-1);
1341
+ background: var(--bg-sunken);
1238
1342
  border: 1px solid var(--border-subtle);
1239
1343
  border-radius: var(--radius-4);
1240
1344
  min-height: 200px;
@@ -1317,10 +1421,10 @@ footer {
1317
1421
  box-shadow: 0 0 0 1px var(--accent-border);
1318
1422
  }
1319
1423
  .kanban-card.done {
1320
- border-color: rgba(76,183,130,0.3);
1424
+ border-color: rgba(60,185,138,0.3);
1321
1425
  }
1322
1426
  .kanban-card.blocked-state {
1323
- border-color: rgba(235,87,87,0.3);
1427
+ border-color: rgba(236,106,94,0.3);
1324
1428
  }
1325
1429
 
1326
1430
  /* Drag-over highlight */
@@ -1368,10 +1472,10 @@ footer {
1368
1472
  padding: 1px 5px;
1369
1473
  border-radius: var(--radius-1);
1370
1474
  }
1371
- .s-todo .kanban-card-status { background: rgba(226,226,226,0.1); color: var(--status-todo); }
1372
- .s-in_progress .kanban-card-status { background: rgba(242,201,76,0.12); color: var(--status-progress); }
1373
- .s-blocked .kanban-card-status { background: rgba(235,87,87,0.12); color: var(--status-blocked); }
1374
- .s-done .kanban-card-status { background: rgba(76,183,130,0.12); color: var(--status-done); }
1475
+ .s-todo .kanban-card-status { background: var(--st-planned-wash); color: var(--status-todo); border: 1px solid var(--st-planned-border); }
1476
+ .s-in_progress .kanban-card-status { background: var(--st-executing-wash); color: var(--status-progress); border: 1px solid var(--st-executing-border); }
1477
+ .s-blocked .kanban-card-status { background: var(--st-blocked-wash); color: var(--status-blocked); border: 1px solid var(--st-blocked-border); }
1478
+ .s-done .kanban-card-status { background: var(--st-complete-wash); color: var(--status-done); border: 1px solid var(--st-complete-border); }
1375
1479
 
1376
1480
  /* Running indicator on card */
1377
1481
  .card-run-indicator {
@@ -1428,17 +1532,17 @@ footer {
1428
1532
  .kanban-run-btn:hover {
1429
1533
  background: var(--accent-primary);
1430
1534
  border-color: var(--accent-primary);
1431
- color: white;
1535
+ color: var(--accent-fg);
1432
1536
  }
1433
1537
  .kanban-run-btn:active { transform: scale(0.97); }
1434
1538
 
1435
1539
  .kanban-stop-btn {
1436
- background: rgba(235,87,87,0.1);
1437
- border-color: rgba(235,87,87,0.3);
1540
+ background: rgba(236,106,94,0.1);
1541
+ border-color: rgba(236,106,94,0.3);
1438
1542
  color: var(--red);
1439
1543
  }
1440
1544
  .kanban-stop-btn:hover {
1441
- background: rgba(235,87,87,0.2);
1545
+ background: rgba(236,106,94,0.2);
1442
1546
  }
1443
1547
  .kanban-stop-btn:active { transform: scale(0.97); }
1444
1548
 
@@ -1514,7 +1618,7 @@ footer {
1514
1618
  }
1515
1619
  .orch-panel-resize:hover,
1516
1620
  .orch-panel-resize.dragging {
1517
- background: var(--accent, #5865f2);
1621
+ background: var(--accent-primary, #22b6cf);
1518
1622
  opacity: 0.35;
1519
1623
  }
1520
1624
  .orch-panel.open {
@@ -1636,7 +1740,7 @@ footer {
1636
1740
  flex: 1;
1637
1741
  overflow-y: auto;
1638
1742
  padding: var(--space-4) var(--space-5);
1639
- background: #050507;
1743
+ background: var(--bg-sunken);
1640
1744
  font-family: var(--font-mono);
1641
1745
  font-size: 12px;
1642
1746
  line-height: 1.6;
@@ -1756,11 +1860,11 @@ footer {
1756
1860
  }
1757
1861
  .orch-footer-btn:hover { background: var(--bg-active); color: var(--text-primary); }
1758
1862
  .orch-footer-btn.stop {
1759
- background: rgba(235,87,87,0.1);
1760
- border-color: rgba(235,87,87,0.3);
1863
+ background: rgba(236,106,94,0.1);
1864
+ border-color: rgba(236,106,94,0.3);
1761
1865
  color: var(--red);
1762
1866
  }
1763
- .orch-footer-btn.stop:hover { background: rgba(235,87,87,0.2); }
1867
+ .orch-footer-btn.stop:hover { background: rgba(236,106,94,0.2); }
1764
1868
 
1765
1869
  /* ── Old kanban inline terminals (hidden) ────────────────────── */
1766
1870
  .kanban-log-panel { display: none !important; }
@@ -1800,9 +1904,9 @@ footer {
1800
1904
  padding: 1px 5px;
1801
1905
  border-radius: var(--radius-1);
1802
1906
  }
1803
- .phase-status.done { background: rgba(76,183,130,0.12); color: var(--green); }
1804
- .phase-status.planned { background: rgba(94,106,210,0.12); color: var(--accent-hover); }
1805
- .phase-status.active { background: rgba(242,201,76,0.12); color: var(--amber); }
1907
+ .phase-status.done { background: var(--st-complete-wash); color: var(--green); border: 1px solid var(--st-complete-border); }
1908
+ .phase-status.planned { background: var(--accent-bg); color: var(--accent-hover); border: 1px solid var(--accent-border); }
1909
+ .phase-status.active { background: var(--st-executing-wash); color: var(--amber); border: 1px solid var(--st-executing-border); }
1806
1910
 
1807
1911
  /* Sprint / tasks */
1808
1912
  .sprint-card {
@@ -1854,7 +1958,7 @@ footer {
1854
1958
  font-size: 9px;
1855
1959
  color: var(--green);
1856
1960
  }
1857
- .task-check.done { border-color: var(--green); background: rgba(76,183,130,0.12); }
1961
+ .task-check.done { border-color: var(--green); background: var(--st-complete-wash); }
1858
1962
  .task-id {
1859
1963
  font-family: var(--font-mono);
1860
1964
  font-size: var(--text-2xs);
@@ -1899,10 +2003,10 @@ footer {
1899
2003
  display: inline-flex;
1900
2004
  align-self: flex-start;
1901
2005
  }
1902
- .memory-type.user { background: rgba(94,106,210,0.12); color: var(--accent-hover); }
1903
- .memory-type.feedback { background: rgba(242,201,76,0.12); color: var(--amber); }
1904
- .memory-type.project { background: rgba(76,183,130,0.12); color: var(--green); }
1905
- .memory-type.reference { background: rgba(38,181,206,0.12); color: var(--blue); }
2006
+ .memory-type.user { background: var(--accent-bg); color: var(--accent-hover); border: 1px solid var(--accent-border); }
2007
+ .memory-type.feedback { background: var(--st-executing-wash); color: var(--amber); border: 1px solid var(--st-executing-border); }
2008
+ .memory-type.project { background: var(--st-complete-wash); color: var(--green); border: 1px solid var(--st-complete-border); }
2009
+ .memory-type.reference { background: var(--st-info-wash); color: var(--blue); border: 1px solid var(--st-info-border); }
1906
2010
  .memory-name {
1907
2011
  font-size: var(--text-xs);
1908
2012
  font-weight: 600;
@@ -2024,7 +2128,7 @@ footer {
2024
2128
  right: 0;
2025
2129
  height: 55vh;
2026
2130
  min-height: 300px;
2027
- background: #0c0c0e;
2131
+ background: var(--bg-sunken);
2028
2132
  border-top: 2px solid var(--accent-primary);
2029
2133
  z-index: 201;
2030
2134
  flex-direction: column;
@@ -2126,7 +2230,7 @@ footer {
2126
2230
  flex: 1;
2127
2231
  overflow: hidden;
2128
2232
  padding: 6px 8px;
2129
- background: #0c0c0e;
2233
+ background: var(--bg-sunken);
2130
2234
  }
2131
2235
  .term-hint {
2132
2236
  padding: var(--space-2) var(--space-3);
@@ -2146,7 +2250,7 @@ footer {
2146
2250
  background: var(--accent-primary);
2147
2251
  border: 1px solid rgba(255,255,255,0.1);
2148
2252
  border-radius: var(--radius-3);
2149
- color: white;
2253
+ color: var(--accent-fg);
2150
2254
  font-size: var(--text-xs);
2151
2255
  font-weight: 500;
2152
2256
  font-family: var(--font-sans);
@@ -2192,6 +2296,27 @@ footer {
2192
2296
  color var(--t-fast) var(--ease),
2193
2297
  border-color var(--t-fast) var(--ease);
2194
2298
  }
2299
+ .card-file-btn {
2300
+ float: right;
2301
+ margin-left: var(--space-3);
2302
+ height: 20px;
2303
+ padding: 0 var(--space-3);
2304
+ background: transparent;
2305
+ border: 1px solid var(--border-default);
2306
+ border-radius: var(--radius-2);
2307
+ color: var(--text-tertiary);
2308
+ font-size: 10px;
2309
+ font-weight: 500;
2310
+ cursor: pointer;
2311
+ transition: background var(--t-fast) var(--ease),
2312
+ color var(--t-fast) var(--ease),
2313
+ border-color var(--t-fast) var(--ease);
2314
+ }
2315
+ .card-file-btn:hover {
2316
+ background: var(--accent-blue);
2317
+ border-color: var(--accent-blue);
2318
+ color: #fff;
2319
+ }
2195
2320
  .card-run-btn:hover {
2196
2321
  background: var(--accent-green);
2197
2322
  border-color: var(--accent-green);
@@ -2232,7 +2357,7 @@ footer {
2232
2357
  .orch-card.orch-running { border-left-color: var(--accent-green); }
2233
2358
  .orch-card.orch-waiting {
2234
2359
  border-left-color: var(--accent-amber);
2235
- background: rgba(245,158,11,0.05);
2360
+ background: rgba(224,166,58,0.05);
2236
2361
  }
2237
2362
  .orch-card.orch-waiting .orch-card-badge { color: var(--accent-amber); }
2238
2363
  .orch-card.orch-error,
@@ -2274,6 +2399,312 @@ footer {
2274
2399
  gap: var(--space-2);
2275
2400
  }
2276
2401
 
2402
+ /* ── Orchestration view — 2-column Diwan layout ──────────────────
2403
+ .orch-layout replaces the old single-column stack (header → banner →
2404
+ command runner → orch-grid → history). Left rail is fixed 300px; right
2405
+ column hosts the docked xterm terminal (XtermPanel docked=true) + run
2406
+ history beneath it. Reuses the existing bg-elev/border/st-*-wash
2407
+ tokens — no new colors introduced. */
2408
+ .orch-layout {
2409
+ display: grid;
2410
+ grid-template-columns: 300px 1fr;
2411
+ gap: var(--space-4);
2412
+ height: 100%;
2413
+ padding: var(--space-5) var(--space-6);
2414
+ box-sizing: border-box;
2415
+ }
2416
+ .orch-left-rail {
2417
+ display: flex;
2418
+ flex-direction: column;
2419
+ gap: var(--space-4);
2420
+ min-height: 0;
2421
+ }
2422
+ .orch-h1 {
2423
+ margin: 0 0 2px;
2424
+ font-size: var(--text-xl);
2425
+ font-weight: 660;
2426
+ letter-spacing: -0.01em;
2427
+ color: var(--text-primary);
2428
+ }
2429
+ .orch-header-sub {
2430
+ font-size: var(--text-sm);
2431
+ color: var(--text-tertiary);
2432
+ }
2433
+ .orch-card-label {
2434
+ padding: var(--space-3) var(--space-4);
2435
+ border-bottom: 1px solid var(--border-subtle);
2436
+ font-size: var(--text-2xs);
2437
+ text-transform: uppercase;
2438
+ letter-spacing: 0.06em;
2439
+ color: var(--text-tertiary);
2440
+ }
2441
+
2442
+ /* Agents card — live rows for sessions the orchestrator is currently running. */
2443
+ .orch-runner-card {
2444
+ background: var(--bg-elev-1);
2445
+ border: 1px solid var(--border-subtle);
2446
+ border-radius: var(--radius-3);
2447
+ overflow: hidden;
2448
+ display: flex;
2449
+ flex-direction: column;
2450
+ }
2451
+ .orch-runner-list {
2452
+ padding: var(--space-2);
2453
+ display: flex;
2454
+ flex-direction: column;
2455
+ gap: 2px;
2456
+ overflow-y: auto;
2457
+ }
2458
+ .orch-runner-row {
2459
+ display: flex;
2460
+ align-items: center;
2461
+ gap: 10px;
2462
+ padding: 9px 10px;
2463
+ border-radius: var(--radius-2);
2464
+ cursor: pointer;
2465
+ border: 1px solid transparent;
2466
+ background: transparent;
2467
+ transition: background var(--t-fast) var(--ease);
2468
+ }
2469
+ .orch-runner-row:hover { background: var(--bg-hover); }
2470
+ .orch-runner-row.selected { background: var(--accent-bg); border-color: var(--accent-border); }
2471
+ .orch-runner-row.attached { border-color: var(--accent-primary); }
2472
+ .orch-runner-abbr {
2473
+ width: 26px;
2474
+ height: 26px;
2475
+ border-radius: var(--radius-2);
2476
+ background: var(--bg-elev-3);
2477
+ display: grid;
2478
+ place-items: center;
2479
+ font-family: var(--font-mono);
2480
+ font-size: var(--text-xs);
2481
+ color: var(--accent-primary);
2482
+ flex-shrink: 0;
2483
+ }
2484
+ .orch-runner-info { flex: 1; min-width: 0; }
2485
+ .orch-runner-name {
2486
+ font-size: var(--text-md);
2487
+ color: var(--text-primary);
2488
+ overflow: hidden;
2489
+ text-overflow: ellipsis;
2490
+ white-space: nowrap;
2491
+ }
2492
+ .orch-runner-role {
2493
+ font-family: var(--font-mono);
2494
+ font-size: var(--text-2xs);
2495
+ color: var(--text-tertiary);
2496
+ overflow: hidden;
2497
+ text-overflow: ellipsis;
2498
+ white-space: nowrap;
2499
+ }
2500
+ .orch-runner-glance {
2501
+ font-size: var(--text-2xs);
2502
+ color: var(--text-muted);
2503
+ overflow: hidden;
2504
+ text-overflow: ellipsis;
2505
+ white-space: nowrap;
2506
+ margin-top: 1px;
2507
+ }
2508
+ .orch-runner-status {
2509
+ font-size: var(--text-xs);
2510
+ font-weight: 600;
2511
+ color: var(--text-muted);
2512
+ white-space: nowrap;
2513
+ }
2514
+ .orch-runner-status.running { color: var(--green); }
2515
+ .orch-agent-status {
2516
+ font-size: var(--text-2xs);
2517
+ font-weight: 600;
2518
+ text-transform: uppercase;
2519
+ letter-spacing: 0.04em;
2520
+ padding: 2px 7px;
2521
+ border-radius: var(--radius-1);
2522
+ white-space: nowrap;
2523
+ flex-shrink: 0;
2524
+ }
2525
+ .orch-agent-status.running { background: var(--st-executing-wash); color: var(--status-progress); border: 1px solid var(--st-executing-border); }
2526
+ .orch-agent-status.blocked { background: var(--st-blocked-wash); color: var(--status-blocked); border: 1px solid var(--st-blocked-border); }
2527
+ .orch-agent-status.exited { background: transparent; color: var(--text-tertiary); border: 1px solid var(--border-subtle); }
2528
+ .orch-runner-empty { padding: var(--space-2) var(--space-1); }
2529
+ .orch-runner-card-footer {
2530
+ padding: var(--space-3) var(--space-4);
2531
+ border-top: 1px solid var(--border-subtle);
2532
+ display: flex;
2533
+ flex-direction: column;
2534
+ gap: var(--space-2);
2535
+ }
2536
+ .orch-runner-hint { font-size: var(--text-2xs); color: var(--text-tertiary); }
2537
+ .orch-run-cmd-field {
2538
+ display: flex;
2539
+ flex-direction: column;
2540
+ gap: 4px;
2541
+ }
2542
+
2543
+ /* Pipeline card — live sessions, or a history-status summary fallback. */
2544
+ .orch-pipeline-card {
2545
+ background: var(--bg-elev-1);
2546
+ border: 1px solid var(--border-subtle);
2547
+ border-radius: var(--radius-3);
2548
+ padding: var(--space-4);
2549
+ overflow-y: auto;
2550
+ }
2551
+ .orch-pipeline-label {
2552
+ font-size: var(--text-2xs);
2553
+ text-transform: uppercase;
2554
+ letter-spacing: 0.06em;
2555
+ color: var(--text-tertiary);
2556
+ margin-bottom: var(--space-3);
2557
+ }
2558
+ .orch-pipeline-row {
2559
+ display: flex;
2560
+ align-items: center;
2561
+ gap: 10px;
2562
+ padding: 6px 8px;
2563
+ margin: 0 -8px;
2564
+ border-radius: var(--radius-2);
2565
+ cursor: pointer;
2566
+ }
2567
+ .orch-pipeline-row.active { background: var(--accent-bg); }
2568
+ .orch-pipeline-glyph {
2569
+ width: 20px;
2570
+ height: 20px;
2571
+ border-radius: 50%;
2572
+ display: grid;
2573
+ place-items: center;
2574
+ font-size: 11px;
2575
+ flex-shrink: 0;
2576
+ }
2577
+ .orch-pipeline-glyph.running,
2578
+ .orch-pipeline-glyph.stopped { background: var(--st-executing-wash); border: 1px solid var(--st-executing-border); color: var(--amber); }
2579
+ .orch-pipeline-glyph.blocked,
2580
+ .orch-pipeline-glyph.waiting,
2581
+ .orch-pipeline-glyph.exited,
2582
+ .orch-pipeline-glyph.error { background: var(--st-blocked-wash); border: 1px solid var(--st-blocked-border); color: var(--red); }
2583
+ .orch-pipeline-glyph.done { background: var(--st-complete-wash); border: 1px solid var(--st-complete-border); color: var(--green); }
2584
+ .orch-pipeline-label-text {
2585
+ flex: 1;
2586
+ font-size: var(--text-md);
2587
+ color: var(--text-secondary);
2588
+ overflow: hidden;
2589
+ text-overflow: ellipsis;
2590
+ white-space: nowrap;
2591
+ text-transform: capitalize;
2592
+ }
2593
+ .orch-pipeline-count {
2594
+ font-family: var(--font-mono);
2595
+ font-size: var(--text-xs);
2596
+ color: var(--text-tertiary);
2597
+ white-space: nowrap;
2598
+ }
2599
+ .orch-pipeline-actions { display: flex; gap: 4px; margin-left: 6px; }
2600
+ .orch-pipeline-action-btn {
2601
+ background: transparent;
2602
+ border: 1px solid var(--border-default);
2603
+ border-radius: var(--radius-1);
2604
+ color: var(--text-tertiary);
2605
+ font-size: 10px;
2606
+ line-height: 1;
2607
+ padding: 3px 6px;
2608
+ cursor: pointer;
2609
+ }
2610
+ .orch-pipeline-action-btn:hover { background: var(--bg-hover); color: var(--text-primary); }
2611
+ .orch-pipeline-action-btn.danger { color: var(--red); border-color: rgba(236,106,94,0.4); }
2612
+ .orch-pipeline-action-btn.danger:hover { background: rgba(236,106,94,0.12); }
2613
+
2614
+ /* Right column — docked terminal + run history beneath it. */
2615
+ .orch-right-col {
2616
+ display: flex;
2617
+ flex-direction: column;
2618
+ gap: var(--space-4);
2619
+ height: 100%;
2620
+ min-height: 0;
2621
+ }
2622
+ .orch-term-dock {
2623
+ border: 1px solid var(--border-strong);
2624
+ border-radius: var(--radius-3);
2625
+ overflow: hidden;
2626
+ background: var(--bg-sunken);
2627
+ box-shadow: var(--shadow-lg);
2628
+ display: flex;
2629
+ flex-direction: column;
2630
+ min-height: 320px;
2631
+ flex: 1 1 auto;
2632
+ }
2633
+ .orch-term-dock-header {
2634
+ display: flex;
2635
+ align-items: center;
2636
+ gap: 8px;
2637
+ padding: 8px 12px;
2638
+ background: var(--bg-elev-2);
2639
+ border-bottom: 1px solid var(--border-subtle);
2640
+ flex-shrink: 0;
2641
+ }
2642
+ .orch-term-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; }
2643
+ .orch-term-dot.red { background: var(--red); }
2644
+ .orch-term-dot.amber { background: var(--amber); }
2645
+ .orch-term-dot.green { background: var(--green); }
2646
+ .orch-term-dock-label {
2647
+ font-family: var(--font-mono);
2648
+ font-size: var(--text-xs);
2649
+ color: var(--text-tertiary);
2650
+ margin-left: 6px;
2651
+ overflow: hidden;
2652
+ text-overflow: ellipsis;
2653
+ white-space: nowrap;
2654
+ }
2655
+ .orch-term-dock-live {
2656
+ display: inline-flex;
2657
+ align-items: center;
2658
+ gap: 5px;
2659
+ margin-left: auto;
2660
+ font-size: var(--text-2xs);
2661
+ color: var(--green);
2662
+ font-family: var(--font-mono);
2663
+ white-space: nowrap;
2664
+ }
2665
+ .orch-term-dock-live-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--green); }
2666
+ .orch-term-dock-stop {
2667
+ height: 22px;
2668
+ padding: 0 10px;
2669
+ border-radius: var(--radius-1);
2670
+ font-size: var(--text-2xs);
2671
+ font-weight: 600;
2672
+ color: var(--red);
2673
+ background: var(--st-blocked-wash);
2674
+ border: 1px solid var(--st-blocked-border);
2675
+ cursor: pointer;
2676
+ font-family: var(--font-sans);
2677
+ margin-left: var(--space-2);
2678
+ }
2679
+ .orch-term-dock-stop:hover { opacity: 0.85; }
2680
+ .orch-term-dock-body {
2681
+ flex: 1;
2682
+ min-height: 0;
2683
+ display: flex;
2684
+ flex-direction: column;
2685
+ }
2686
+ .orch-term-dock-container {
2687
+ flex: 1;
2688
+ overflow: hidden;
2689
+ padding: 14px;
2690
+ }
2691
+ .orch-term-dock-empty {
2692
+ flex: 1;
2693
+ display: flex;
2694
+ align-items: center;
2695
+ justify-content: center;
2696
+ padding: var(--space-6);
2697
+ text-align: center;
2698
+ color: var(--text-tertiary);
2699
+ font-size: var(--text-sm);
2700
+ }
2701
+ .orch-hist-dock {
2702
+ flex: 0 0 auto;
2703
+ max-height: 240px;
2704
+ overflow-y: auto;
2705
+ }
2706
+ .orch-hist-dock .hist-panel { margin-top: 0; }
2707
+
2277
2708
  /* ── Run history panel ── */
2278
2709
  .hist-panel { margin-top: var(--space-6); }
2279
2710
  .hist-panel-title { display: flex; align-items: center; gap: var(--space-2); font-size: var(--text-md); color: var(--text-primary); margin-bottom: var(--space-4); }
@@ -2281,6 +2712,9 @@ footer {
2281
2712
  .hist-group-title { font-size: var(--text-xs); text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-tertiary); margin-bottom: var(--space-2); }
2282
2713
  .hist-date { font-size: var(--text-2xs); color: var(--text-muted); margin: var(--space-3) 0 var(--space-2); }
2283
2714
  .hist-row { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-2) var(--space-3); background: var(--bg-elev-2); border: 1px solid var(--border-subtle); border-radius: var(--radius-2); margin-bottom: var(--space-2); }
2715
+ .hist-row.clickable { cursor: pointer; }
2716
+ .hist-row.clickable:hover { background: var(--bg-hover); }
2717
+ .hist-row.active { border-color: var(--accent-primary); background: var(--accent-bg); }
2284
2718
  .hist-row-id { font-weight: 600; font-size: var(--text-sm); color: var(--text-primary); }
2285
2719
  .hist-row-cmd { font-family: var(--font-mono); font-size: var(--text-2xs); color: var(--text-secondary); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
2286
2720
  .hist-row-duration { display: flex; align-items: center; gap: var(--space-1); font-size: var(--text-2xs); color: var(--text-muted); white-space: nowrap; }
@@ -2393,8 +2827,8 @@ footer {
2393
2827
  .sb-logo-badge {
2394
2828
  width: 30px; height: 30px; border-radius: 9px; flex-shrink: 0;
2395
2829
  display: flex; align-items: center; justify-content: center;
2396
- font-weight: 800; font-size: 16px; color: #06121f;
2397
- background: linear-gradient(135deg, var(--dash-teal), var(--dash-blue));
2830
+ font-weight: 800; font-size: 16px; color: var(--dash-ink);
2831
+ background: linear-gradient(135deg, var(--accent-primary), var(--accent-hover));
2398
2832
  }
2399
2833
  .sb-logo-word { font-size: 16px; font-weight: 700; color: var(--dash-text); letter-spacing: -0.01em; }
2400
2834
 
@@ -2423,7 +2857,7 @@ footer {
2423
2857
  transition: background 0.15s, color 0.15s;
2424
2858
  }
2425
2859
  .sb-nav-link:hover { background: rgba(255, 255, 255, 0.04); color: var(--dash-text); }
2426
- .sb-nav-link.active { background: rgba(45, 212, 191, 0.12); color: var(--dash-text); font-weight: 600; }
2860
+ .sb-nav-link.active { background: rgba(34, 182, 207, 0.12); color: var(--dash-text); font-weight: 600; }
2427
2861
  .sb-nav-link.active .sb-nav-ic { color: var(--dash-teal); }
2428
2862
  .sb-nav-ic { display: inline-flex; color: var(--dash-text-muted); }
2429
2863
  .sb-nav-label { flex: 1; }
@@ -2442,16 +2876,16 @@ footer {
2442
2876
  .phealth-pct { font-size: 26px; font-weight: 800; line-height: 1; color: var(--dash-text); }
2443
2877
  .phealth-pct-sign { font-size: 14px; font-weight: 700; margin-left: 1px; color: var(--dash-text-muted); }
2444
2878
  .phealth-label { font-size: 12px; font-weight: 600; }
2445
- .phealth--good .phealth-label { color: var(--dash-teal); }
2879
+ .phealth--good .phealth-label { color: var(--status-done); }
2446
2880
  .phealth--warn .phealth-label { color: var(--dash-sev-medium); }
2447
2881
  .phealth--risk .phealth-label { color: var(--dash-sev-high); }
2448
2882
  .phealth-spark { width: 100%; height: 36px; display: block; }
2449
2883
  .phealth-spark-line { fill: none; stroke-width: 2; vector-effect: non-scaling-stroke; }
2450
- .phealth--good .phealth-spark-line { stroke: var(--dash-teal); }
2884
+ .phealth--good .phealth-spark-line { stroke: var(--status-done); }
2451
2885
  .phealth--warn .phealth-spark-line { stroke: var(--dash-sev-medium); }
2452
2886
  .phealth--risk .phealth-spark-line { stroke: var(--dash-sev-high); }
2453
2887
  .phealth-spark-area { stroke: none; opacity: 0.14; }
2454
- .phealth--good .phealth-spark-area { fill: var(--dash-teal); }
2888
+ .phealth--good .phealth-spark-area { fill: var(--status-done); }
2455
2889
  .phealth--warn .phealth-spark-area { fill: var(--dash-sev-medium); }
2456
2890
  .phealth--risk .phealth-spark-area { fill: var(--dash-sev-high); }
2457
2891
 
@@ -2463,8 +2897,8 @@ footer {
2463
2897
  .sb-avatar {
2464
2898
  width: 34px; height: 34px; border-radius: 50%; flex-shrink: 0;
2465
2899
  display: flex; align-items: center; justify-content: center;
2466
- font-size: 12px; font-weight: 700; color: #06121f;
2467
- background: linear-gradient(135deg, var(--dash-purple), var(--dash-blue));
2900
+ font-size: 12px; font-weight: 700; color: var(--dash-ink);
2901
+ background: linear-gradient(135deg, var(--accent-primary), var(--accent-hover));
2468
2902
  }
2469
2903
  .sb-profile-meta { display: flex; flex-direction: column; min-width: 0; }
2470
2904
  .sb-profile-name { font-size: 13px; font-weight: 600; color: var(--dash-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@@ -2490,8 +2924,8 @@ footer {
2490
2924
  font-size: 12px; color: var(--dash-text-muted);
2491
2925
  }
2492
2926
  .tb-synced:hover { color: var(--dash-text); }
2493
- .tb-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--dash-teal); box-shadow: 0 0 0 3px rgba(45, 212, 191, 0.18); flex-shrink: 0; }
2494
- .tb-synced--busy .tb-dot { background: var(--dash-blue); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.18); animation: tb-pulse 0.8s ease-in-out infinite; }
2927
+ .tb-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--status-done); box-shadow: 0 0 0 3px rgba(60, 185, 138, 0.18); flex-shrink: 0; }
2928
+ .tb-synced--busy .tb-dot { background: var(--dash-blue); box-shadow: 0 0 0 3px rgba(224, 166, 58, 0.18); animation: tb-pulse 0.8s ease-in-out infinite; }
2495
2929
  @keyframes tb-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }
2496
2930
  .tb-btn {
2497
2931
  display: inline-flex; align-items: center; gap: 7px;
@@ -2503,12 +2937,11 @@ footer {
2503
2937
  }
2504
2938
  .tb-btn:hover { border-color: var(--dash-teal); }
2505
2939
  .tb-btn--primary {
2506
- background: linear-gradient(135deg, var(--dash-teal), var(--dash-blue));
2507
- border-color: transparent; color: #06121f;
2940
+ background: linear-gradient(135deg, var(--accent-primary), var(--accent-hover));
2941
+ border-color: transparent; color: var(--dash-ink);
2508
2942
  }
2509
2943
  .tb-btn--primary:hover { filter: brightness(1.05); border-color: transparent; }
2510
2944
  .tb-btn--icon { padding: 8px 11px; }
2511
- .tb-kebab { font-size: 16px; line-height: 1; letter-spacing: 1px; }
2512
2945
 
2513
2946
  @media (max-width: 760px) {
2514
2947
  .tb-sub { display: none; }
@@ -2759,7 +3192,7 @@ footer {
2759
3192
  border-radius: 50%;
2760
3193
  display: inline-block;
2761
3194
  }
2762
- .donut-dot--done { background: var(--dash-teal); }
3195
+ .donut-dot--done { background: var(--status-done); }
2763
3196
  .donut-dot--prog { background: var(--dash-blue); }
2764
3197
  .donut-dot--idle { background: var(--dash-sev-low); }
2765
3198
  .donut-legend-label {
@@ -2806,8 +3239,8 @@ footer {
2806
3239
  justify-content: center;
2807
3240
  font-size: 20px;
2808
3241
  border-radius: 10px;
2809
- background: rgba(167, 139, 250, 0.12);
2810
- border: 1px solid rgba(167, 139, 250, 0.25);
3242
+ background: var(--accent-bg);
3243
+ border: 1px solid var(--accent-border);
2811
3244
  }
2812
3245
  .cp-headtext { min-width: 0; }
2813
3246
  .cp-titlerow {
@@ -2830,8 +3263,8 @@ footer {
2830
3263
  padding: 2px 9px;
2831
3264
  border-radius: 999px;
2832
3265
  color: var(--dash-purple);
2833
- background: rgba(167, 139, 250, 0.12);
2834
- border: 1px solid rgba(167, 139, 250, 0.3);
3266
+ background: rgba(34, 182, 207, 0.12);
3267
+ border: 1px solid rgba(34, 182, 207, 0.3);
2835
3268
  white-space: nowrap;
2836
3269
  }
2837
3270
  .cp-sub {
@@ -2887,14 +3320,14 @@ footer {
2887
3320
  z-index: 1;
2888
3321
  }
2889
3322
  .cp-done .cp-node {
2890
- background: var(--dash-teal);
2891
- border-color: var(--dash-teal);
3323
+ background: var(--status-done);
3324
+ border-color: var(--status-done);
2892
3325
  color: var(--dash-bg);
2893
3326
  }
2894
3327
  .cp-active .cp-node {
2895
3328
  background: var(--dash-card);
2896
3329
  border-color: var(--dash-purple);
2897
- box-shadow: 0 0 0 4px rgba(167, 139, 250, 0.2);
3330
+ box-shadow: 0 0 0 4px rgba(34, 182, 207, 0.2);
2898
3331
  }
2899
3332
  .cp-label {
2900
3333
  font-size: 10px;
@@ -3009,7 +3442,7 @@ footer {
3009
3442
  padding: 4px 9px;
3010
3443
  border-radius: 999px;
3011
3444
  color: var(--dash-blue);
3012
- background: rgba(59, 130, 246, 0.15);
3445
+ background: rgba(224, 166, 58, 0.15);
3013
3446
  }
3014
3447
 
3015
3448
  /* ── Blockers — icon + title/desc + severity pill (Row 2, Card 3) ── */
@@ -3051,16 +3484,16 @@ footer {
3051
3484
  .bk-sev-medium { color: var(--dash-sev-medium); }
3052
3485
  .bk-sev-low { color: var(--dash-sev-low); }
3053
3486
  .bk-pill.bk-sev-high {
3054
- background: rgba(248, 113, 113, 0.12);
3055
- border-color: rgba(248, 113, 113, 0.35);
3487
+ background: rgba(236, 106, 94, 0.12);
3488
+ border-color: rgba(236, 106, 94, 0.35);
3056
3489
  }
3057
3490
  .bk-pill.bk-sev-medium {
3058
- background: rgba(251, 191, 36, 0.12);
3059
- border-color: rgba(251, 191, 36, 0.35);
3491
+ background: rgba(224, 166, 58, 0.12);
3492
+ border-color: rgba(224, 166, 58, 0.35);
3060
3493
  }
3061
3494
  .bk-pill.bk-sev-low {
3062
- background: rgba(156, 163, 175, 0.12);
3063
- border-color: rgba(156, 163, 175, 0.35);
3495
+ background: rgba(113, 125, 136, 0.12);
3496
+ border-color: rgba(113, 125, 136, 0.35);
3064
3497
  }
3065
3498
 
3066
3499
  /* ── RecentDecisions — title + status badge + date (Row 3, Card 1) ── */
@@ -3087,16 +3520,16 @@ footer {
3087
3520
  white-space: nowrap;
3088
3521
  }
3089
3522
  .rd-badge--approved {
3090
- color: var(--dash-teal);
3091
- background: rgba(45, 212, 191, 0.12);
3523
+ color: var(--status-done);
3524
+ background: var(--st-complete-wash);
3092
3525
  }
3093
3526
  .rd-badge--rejected {
3094
3527
  color: var(--dash-sev-high);
3095
- background: rgba(248, 113, 113, 0.12);
3528
+ background: rgba(236, 106, 94, 0.12);
3096
3529
  }
3097
3530
  .rd-badge--proposed {
3098
- color: var(--dash-purple);
3099
- background: rgba(167, 139, 250, 0.12);
3531
+ color: var(--status-todo);
3532
+ background: var(--st-planned-wash);
3100
3533
  }
3101
3534
  .rd-date {
3102
3535
  flex: none;
@@ -3130,7 +3563,7 @@ footer {
3130
3563
  border-top: 3px solid var(--dash-sev-low);
3131
3564
  background: rgba(255, 255, 255, 0.02);
3132
3565
  }
3133
- .pt-seg--done { border-top-color: var(--dash-teal); }
3566
+ .pt-seg--done { border-top-color: var(--status-done); }
3134
3567
  .pt-seg--active { border-top-color: var(--dash-purple); }
3135
3568
  .pt-seg--todo { border-top-color: var(--dash-sev-low); }
3136
3569
  .pt-seg-name {
@@ -3149,7 +3582,7 @@ footer {
3149
3582
  padding: 4px 9px;
3150
3583
  border-radius: 999px;
3151
3584
  color: var(--dash-blue);
3152
- background: rgba(59, 130, 246, 0.15);
3585
+ background: rgba(224, 166, 58, 0.15);
3153
3586
  }
3154
3587
  .bk-desc {
3155
3588
  margin: 2px 0 0;
@@ -3172,16 +3605,16 @@ footer {
3172
3605
  .bk-sev-medium { color: var(--dash-sev-medium); }
3173
3606
  .bk-sev-low { color: var(--dash-sev-low); }
3174
3607
  .bk-pill.bk-sev-high {
3175
- background: rgba(248, 113, 113, 0.12);
3176
- border-color: rgba(248, 113, 113, 0.35);
3608
+ background: rgba(236, 106, 94, 0.12);
3609
+ border-color: rgba(236, 106, 94, 0.35);
3177
3610
  }
3178
3611
  .bk-pill.bk-sev-medium {
3179
- background: rgba(251, 191, 36, 0.12);
3180
- border-color: rgba(251, 191, 36, 0.35);
3612
+ background: rgba(224, 166, 58, 0.12);
3613
+ border-color: rgba(224, 166, 58, 0.35);
3181
3614
  }
3182
3615
  .bk-pill.bk-sev-low {
3183
- background: rgba(156, 163, 175, 0.12);
3184
- border-color: rgba(156, 163, 175, 0.35);
3616
+ background: rgba(113, 125, 136, 0.12);
3617
+ border-color: rgba(113, 125, 136, 0.35);
3185
3618
  }
3186
3619
  .pt-seg-range {
3187
3620
  font-size: 11px;
@@ -3195,15 +3628,15 @@ footer {
3195
3628
  border-radius: 999px;
3196
3629
  align-self: flex-start;
3197
3630
  color: var(--dash-sev-low);
3198
- background: rgba(156, 163, 175, 0.14);
3631
+ background: rgba(113, 125, 136, 0.14);
3199
3632
  }
3200
3633
  .pt-seg--done .pt-seg-badge {
3201
- color: var(--dash-teal);
3202
- background: rgba(45, 212, 191, 0.12);
3634
+ color: var(--status-done);
3635
+ background: var(--st-complete-wash);
3203
3636
  }
3204
3637
  .pt-seg--active .pt-seg-badge {
3205
3638
  color: var(--dash-purple);
3206
- background: rgba(167, 139, 250, 0.12);
3639
+ background: rgba(34, 182, 207, 0.12);
3207
3640
  }
3208
3641
  @media (max-width: 700px) {
3209
3642
  .pt-track { flex-direction: column; }
@@ -3233,7 +3666,7 @@ footer {
3233
3666
  width: 30px; height: 30px; border-radius: 9px; flex-shrink: 0;
3234
3667
  display: flex; align-items: center; justify-content: center;
3235
3668
  font-weight: 800; font-size: 16px; color: var(--dash-ink);
3236
- background: linear-gradient(135deg, var(--dash-teal), var(--dash-blue));
3669
+ background: linear-gradient(135deg, var(--accent-primary), var(--accent-hover));
3237
3670
  }
3238
3671
  .sb-logo-word { font-size: 16px; font-weight: 700; color: var(--dash-text); letter-spacing: -0.01em; }
3239
3672
 
@@ -3262,7 +3695,7 @@ footer {
3262
3695
  transition: background 0.15s, color 0.15s;
3263
3696
  }
3264
3697
  .sb-nav-link:hover { background: var(--dash-hover); color: var(--dash-text); }
3265
- .sb-nav-link.active { background: rgba(45, 212, 191, 0.12); color: var(--dash-text); font-weight: 600; }
3698
+ .sb-nav-link.active { background: rgba(34, 182, 207, 0.12); color: var(--dash-text); font-weight: 600; }
3266
3699
  .sb-nav-link.active .sb-nav-ic { color: var(--dash-teal); }
3267
3700
  .sb-nav-ic { display: inline-flex; color: var(--dash-text-muted); }
3268
3701
  .sb-nav-label { flex: 1; }
@@ -3281,16 +3714,16 @@ footer {
3281
3714
  .phealth-pct { font-size: 26px; font-weight: 800; line-height: 1; color: var(--dash-text); }
3282
3715
  .phealth-pct-sign { font-size: 14px; font-weight: 700; margin-left: 1px; color: var(--dash-text-muted); }
3283
3716
  .phealth-label { font-size: 12px; font-weight: 600; }
3284
- .phealth--good .phealth-label { color: var(--dash-teal); }
3717
+ .phealth--good .phealth-label { color: var(--status-done); }
3285
3718
  .phealth--warn .phealth-label { color: var(--dash-sev-medium); }
3286
3719
  .phealth--risk .phealth-label { color: var(--dash-sev-high); }
3287
3720
  .phealth-spark { width: 100%; height: 36px; display: block; }
3288
3721
  .phealth-spark-line { fill: none; stroke-width: 2; vector-effect: non-scaling-stroke; }
3289
- .phealth--good .phealth-spark-line { stroke: var(--dash-teal); }
3722
+ .phealth--good .phealth-spark-line { stroke: var(--status-done); }
3290
3723
  .phealth--warn .phealth-spark-line { stroke: var(--dash-sev-medium); }
3291
3724
  .phealth--risk .phealth-spark-line { stroke: var(--dash-sev-high); }
3292
3725
  .phealth-spark-area { stroke: none; opacity: 0.14; }
3293
- .phealth--good .phealth-spark-area { fill: var(--dash-teal); }
3726
+ .phealth--good .phealth-spark-area { fill: var(--status-done); }
3294
3727
  .phealth--warn .phealth-spark-area { fill: var(--dash-sev-medium); }
3295
3728
  .phealth--risk .phealth-spark-area { fill: var(--dash-sev-high); }
3296
3729
 
@@ -3303,7 +3736,7 @@ footer {
3303
3736
  width: 34px; height: 34px; border-radius: 50%; flex-shrink: 0;
3304
3737
  display: flex; align-items: center; justify-content: center;
3305
3738
  font-size: 12px; font-weight: 700; color: var(--dash-ink);
3306
- background: linear-gradient(135deg, var(--dash-purple), var(--dash-blue));
3739
+ background: linear-gradient(135deg, var(--accent-primary), var(--accent-hover));
3307
3740
  }
3308
3741
  .sb-profile-meta { display: flex; flex-direction: column; min-width: 0; }
3309
3742
  .sb-profile-name { font-size: 13px; font-weight: 600; color: var(--dash-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@@ -3329,8 +3762,8 @@ footer {
3329
3762
  font-size: 12px; color: var(--dash-text-muted);
3330
3763
  }
3331
3764
  .tb-synced:hover { color: var(--dash-text); }
3332
- .tb-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--dash-teal); box-shadow: 0 0 0 3px rgba(45, 212, 191, 0.18); flex-shrink: 0; }
3333
- .tb-synced--busy .tb-dot { background: var(--dash-blue); box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.18); animation: tb-pulse 0.8s ease-in-out infinite; }
3765
+ .tb-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--status-done); box-shadow: 0 0 0 3px rgba(60, 185, 138, 0.18); flex-shrink: 0; }
3766
+ .tb-synced--busy .tb-dot { background: var(--dash-blue); box-shadow: 0 0 0 3px rgba(224, 166, 58, 0.18); animation: tb-pulse 0.8s ease-in-out infinite; }
3334
3767
  @keyframes tb-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } }
3335
3768
  .tb-btn {
3336
3769
  display: inline-flex; align-items: center; gap: 7px;
@@ -3342,12 +3775,11 @@ footer {
3342
3775
  }
3343
3776
  .tb-btn:hover { border-color: var(--dash-teal); }
3344
3777
  .tb-btn--primary {
3345
- background: linear-gradient(135deg, var(--dash-teal), var(--dash-blue));
3778
+ background: linear-gradient(135deg, var(--accent-primary), var(--accent-hover));
3346
3779
  border-color: transparent; color: var(--dash-ink);
3347
3780
  }
3348
3781
  .tb-btn--primary:hover { filter: brightness(1.05); border-color: transparent; }
3349
3782
  .tb-btn--icon { padding: 8px 11px; }
3350
- .tb-kebab { font-size: 16px; line-height: 1; letter-spacing: 1px; }
3351
3783
 
3352
3784
  @media (max-width: 760px) {
3353
3785
  .tb-sub { display: none; }
@@ -3361,44 +3793,41 @@ footer {
3361
3793
  ════════════════════════════════════════════════════════════════════ */
3362
3794
 
3363
3795
  :root {
3364
- /* Sidebar surface — darker sibling of --dash-card per mockup spec
3365
- ("Card surface: #0E1626 / #111A2E"); kept separate so the sidebar
3366
- reads one step below the page base. */
3367
- --dash-sidebar: #0E1626;
3796
+ /* Sidebar surface — same value as --dash-card; the Diwan design uses
3797
+ one surface-1 for sidebar, topbar, and cards alike. */
3798
+ --dash-sidebar: var(--bg-elev-1);
3368
3799
  /* Ink on accent-filled surfaces (logo badge, avatar, primary button,
3369
- offline banner) — dark navy reads on the teal/blue gradient in both
3370
- themes, so it has no light override. */
3371
- --dash-ink: #06121F;
3372
- /* Subtle hover overlay for nav items — theme-dependent direction
3373
- (lighten on dark, darken on light). */
3374
- --dash-hover: rgba(255, 255, 255, 0.04);
3375
- /* Plain-text log view (OrchPanel) + xterm panel surround. The xterm
3376
- canvas itself keeps its own dark JS theme — these style the chrome. */
3377
- --dash-term-bg: #050507;
3800
+ offline banner) — aliases the design's accent-fg contrast color. */
3801
+ --dash-ink: var(--accent-fg);
3802
+ /* Subtle hover overlay for nav items. */
3803
+ --dash-hover: var(--bg-hover);
3804
+ /* Sunken surface for the plain-text log view (OrchPanel) + xterm panel
3805
+ surround. The xterm canvas itself keeps its own dark JS theme — these
3806
+ style the chrome only. */
3807
+ --dash-term-bg: var(--bg-sunken);
3378
3808
  --dash-term-text: #C8D8C8;
3379
3809
  --dash-term-line: #A0C4A0;
3380
3810
  --dash-term-tool: #7CB8FF;
3381
3811
  }
3382
3812
 
3383
- /* Light theme — same --dash-* tokens, light values. The chrome (and any
3384
- card CSS built on these tokens) flips with the existing data-theme
3385
- toggle; accents (teal/purple/blue/amber/severity) stay identical. */
3813
+ /* Light theme — same alias approach; flips automatically with the base
3814
+ tokens above. */
3386
3815
  [data-theme="light"] {
3387
- --dash-bg: #F4F6FB;
3388
- --dash-card: #FFFFFF;
3389
- --dash-border: #E2E8F0;
3390
- --dash-text: #1A2233;
3391
- --dash-text-muted: #5B6B82;
3392
- --dash-sidebar: #FFFFFF;
3393
- --dash-hover: rgba(15, 23, 41, 0.05);
3394
- --dash-term-bg: #F1F5F9;
3816
+ --dash-bg: var(--bg-page);
3817
+ --dash-card: var(--bg-elev-1);
3818
+ --dash-border: var(--border-subtle);
3819
+ --dash-text: var(--text-primary);
3820
+ --dash-text-muted: var(--text-tertiary);
3821
+ --dash-sidebar: var(--bg-elev-1);
3822
+ --dash-hover: var(--bg-hover);
3823
+ --dash-term-bg: var(--bg-sunken);
3395
3824
  --dash-term-text: #334155;
3396
3825
  --dash-term-line: #166534;
3397
- --dash-term-tool: #1D4ED8;
3826
+ --dash-term-tool: var(--blue);
3398
3827
  }
3399
3828
 
3400
- /* Frame: deep-navy base behind chrome AND content so the mockup palette
3401
- is continuous (legacy body bg is near-black #08090a). */
3829
+ /* Frame: Diwan canvas base behind chrome AND content so the palette is
3830
+ continuous across the app shell and scroll area. */
3402
3831
  .app-shell,
3403
3832
  .main-scroll { background: var(--dash-bg); }
3404
3833
 
@@ -3450,7 +3879,7 @@ header.topbar {
3450
3879
  }
3451
3880
  .statusbar-dot {
3452
3881
  width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0;
3453
- background: var(--dash-teal);
3882
+ background: var(--status-done);
3454
3883
  }
3455
3884
  .statusbar-dot--offline { background: var(--dash-sev-high); }
3456
3885
  .statusbar-dot--busy { animation: pulse-dot 1s ease-in-out infinite; }
@@ -3677,7 +4106,7 @@ header.topbar {
3677
4106
  font-size: 24px;
3678
4107
  font-weight: 800;
3679
4108
  color: #fff;
3680
- background: linear-gradient(135deg, var(--dash-teal), var(--dash-purple));
4109
+ background: linear-gradient(135deg, var(--accent-primary), var(--accent-hover));
3681
4110
  }
3682
4111
  .firstrun-title { margin: 0; font-size: 18px; font-weight: 700; color: var(--dash-text); }
3683
4112
  .firstrun-sub { margin: 0; font-size: 13px; color: var(--dash-text-muted); max-width: 440px; line-height: 1.5; }
@@ -3725,7 +4154,7 @@ select:focus-visible,
3725
4154
  input:focus-visible,
3726
4155
  summary:focus-visible,
3727
4156
  [role="button"]:focus-visible {
3728
- outline: 2px solid var(--dash-teal, #2DD4BF);
4157
+ outline: 2px solid var(--dash-teal, #22b6cf);
3729
4158
  outline-offset: 2px;
3730
4159
  border-radius: 4px;
3731
4160
  }
@@ -3751,8 +4180,8 @@ summary:focus-visible,
3751
4180
  gap: var(--space-3);
3752
4181
  padding: var(--space-2) var(--space-4);
3753
4182
  margin-bottom: var(--space-3);
3754
- background: var(--accent-amber, #F59E0B);
3755
- color: var(--dash-ink, #06121F);
4183
+ background: var(--accent-amber, #e0a63a);
4184
+ color: var(--dash-ink, #04222a);
3756
4185
  font-size: var(--text-sm);
3757
4186
  font-weight: 600;
3758
4187
  border-radius: 8px;
@@ -3799,6 +4228,11 @@ summary:focus-visible,
3799
4228
  /* Slide-in sidebar sits above the backdrop; backdrop above content. */
3800
4229
  .sidebar { z-index: 30; }
3801
4230
  #sidebar-backdrop { z-index: 25; }
4231
+ /* Orchestration's 300px/1fr grid has no room to breathe on narrow
4232
+ viewports — stack left rail above the terminal/history column. */
4233
+ .orch-layout { grid-template-columns: 1fr; height: auto; }
4234
+ .orch-left-rail { min-height: auto; }
4235
+ .orch-term-dock { min-height: 260px; }
3802
4236
  }
3803
4237
 
3804
4238
  /* ══════════════════════════════════════════════════════════════════
@@ -4379,11 +4813,11 @@ summary:focus-visible,
4379
4813
  .runner-picker-btn--run {
4380
4814
  background: var(--accent-primary);
4381
4815
  border-color: var(--accent-primary);
4382
- color: #fff;
4816
+ color: var(--accent-fg);
4383
4817
  }
4384
4818
  .runner-picker-btn--run:hover {
4385
4819
  background: var(--accent-hover);
4386
- color: #fff;
4820
+ color: var(--accent-fg);
4387
4821
  }
4388
4822
  .runner-picker-btn--run:disabled {
4389
4823
  opacity: 0.5;
@@ -4477,9 +4911,9 @@ summary:focus-visible,
4477
4911
  }
4478
4912
  .filter-chip:hover { border-color: var(--accent-primary); }
4479
4913
  .filter-chip.active {
4480
- background: var(--accent-primary);
4481
- color: #fff;
4482
- border-color: var(--accent-primary);
4914
+ background: var(--accent-bg);
4915
+ color: var(--text-primary);
4916
+ border-color: var(--accent-border);
4483
4917
  }
4484
4918
  .filter-chip-clear {
4485
4919
  font-size: var(--text-2xs);
@@ -4964,8 +5398,8 @@ summary:focus-visible,
4964
5398
  Status colors are --pg-* tokens scoped to the panel so both themes flip
4965
5399
  them without touching the global token block. */
4966
5400
  .pg-panel {
4967
- --pg-done: #2dd4bf; /* teal */
4968
- --pg-active: #a78bfa; /* purple */
5401
+ --pg-done: var(--status-done);
5402
+ --pg-active: var(--accent-primary);
4969
5403
  --pg-todo: var(--text-muted);
4970
5404
  --pg-blocked: var(--amber);
4971
5405
  margin-bottom: var(--space-4);
@@ -4973,10 +5407,6 @@ summary:focus-visible,
4973
5407
  border-radius: var(--radius-4);
4974
5408
  background: var(--bg-elev-1);
4975
5409
  }
4976
- [data-theme="light"] .pg-panel {
4977
- --pg-done: #0d9488;
4978
- --pg-active: #7c3aed;
4979
- }
4980
5410
  .pg-panel summary {
4981
5411
  padding: var(--space-3) var(--space-5);
4982
5412
  font-size: var(--text-xs);
@@ -5067,21 +5497,32 @@ summary:focus-visible,
5067
5497
  .pg-tip text { font-size: var(--text-2xs); fill: var(--text-secondary); pointer-events: none; }
5068
5498
  .pg-tip .pg-tip-title { fill: var(--text-primary); font-weight: 600; }
5069
5499
 
5070
- /* Flow-row mode — no cross-phase dependencies: wrapped chip sequence. */
5071
- .pg-flow {
5500
+ /* Sequence mode — no cross-phase dependencies: a connected chain of small
5501
+ pills in roadmap order (arrows imply order, not a graph edge). */
5502
+ .pg-hint-top {
5503
+ padding-top: var(--space-2);
5504
+ padding-bottom: var(--space-3);
5505
+ }
5506
+ .pg-seq {
5072
5507
  display: flex;
5073
5508
  flex-wrap: wrap;
5074
- gap: var(--space-3);
5075
- padding: 0 var(--space-5) var(--space-2);
5509
+ align-items: center;
5510
+ row-gap: var(--space-2);
5511
+ padding: 0 var(--space-5) var(--space-4);
5076
5512
  }
5077
- .pg-chip {
5513
+ .pg-seq-item {
5078
5514
  display: inline-flex;
5079
5515
  align-items: center;
5080
- gap: var(--space-2);
5081
- max-width: 220px;
5082
- padding: var(--space-2) var(--space-3);
5083
- border: 1.5px solid var(--pg-todo);
5084
- border-radius: var(--radius-3);
5516
+ }
5517
+ .pg-seq-chip {
5518
+ display: inline-flex;
5519
+ align-items: center;
5520
+ gap: 6px;
5521
+ max-width: 190px;
5522
+ padding: 3px var(--space-3);
5523
+ border: 1px solid var(--border-default);
5524
+ border-left: 3px solid var(--pg-todo);
5525
+ border-radius: var(--radius-full, 999px);
5085
5526
  background: var(--bg-elev-2);
5086
5527
  color: var(--text-secondary);
5087
5528
  font-size: var(--text-2xs);
@@ -5089,20 +5530,25 @@ summary:focus-visible,
5089
5530
  cursor: pointer;
5090
5531
  transition: background var(--t-fast) var(--ease);
5091
5532
  }
5092
- .pg-chip:hover { background: var(--bg-hover); }
5093
- .pg-chip.pg-done { border-color: var(--pg-done); }
5094
- .pg-chip.pg-active { border-color: var(--pg-active); animation: pg-chip-pulse 2s var(--ease) infinite; }
5095
- .pg-chip.pg-blocked { border-color: var(--pg-blocked); }
5533
+ .pg-seq-chip:hover { background: var(--bg-hover); }
5534
+ .pg-seq-chip.pg-done { border-left-color: var(--pg-done); }
5535
+ .pg-seq-chip.pg-active { border-left-color: var(--pg-active); animation: pg-chip-pulse 2s var(--ease) infinite; }
5536
+ .pg-seq-chip.pg-blocked { border-left-color: var(--pg-blocked); }
5096
5537
  @keyframes pg-chip-pulse {
5097
5538
  0%, 100% { box-shadow: 0 0 0 0 transparent; }
5098
5539
  50% { box-shadow: 0 0 6px 0 var(--pg-active); }
5099
5540
  }
5100
- .pg-chip-id { font-weight: 600; color: var(--text-primary); }
5101
- .pg-chip-name {
5541
+ .pg-seq-id { font-weight: 600; color: var(--text-primary); }
5542
+ .pg-seq-name {
5102
5543
  overflow: hidden;
5103
5544
  text-overflow: ellipsis;
5104
5545
  white-space: nowrap;
5105
5546
  }
5547
+ .pg-seq-arrow {
5548
+ padding: 0 var(--space-2);
5549
+ color: var(--text-muted);
5550
+ font-size: var(--text-sm);
5551
+ }
5106
5552
  .pg-hint, .pg-empty {
5107
5553
  padding: 0 var(--space-5) var(--space-3);
5108
5554
  font-size: var(--text-2xs);