side_bro 0.2.2 → 0.2.3

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.
@@ -1,207 +1,148 @@
1
1
  :root {
2
- --bg-0: #0b0614;
3
- --bg-1: #110a1f;
4
- --bg-2: #170f29;
5
- --bg-3: #1d1334;
6
- --line: #2a1d49;
7
- --line-soft: #1f1638;
8
- --text: #ece7fb;
9
- --text-dim: #9c91c2;
10
- --text-faint: #6a5f8a;
2
+ --bg-0: #0e1126;
3
+ --bg-1: #12152f;
4
+ --bg-2: #151936;
5
+ --bg-3: #1a1e40;
6
+ --sidebar: #0b0e20;
7
+ --line: #2a3058;
8
+ --line-soft: #1e2344;
9
+ --line-row: #191d3b;
10
+ --text: #d9dcf0;
11
+ --text-dim: #a7acc8;
12
+ --text-faint: #6f779c;
13
+ --text-dimmer: #4f567c;
11
14
 
12
15
  --violet-50: #f3efff;
13
- --violet-200: #c8b8ff;
14
- --violet-300: #a98cff;
15
- --violet-400: #8b5cff;
16
- --violet-500: #7a3dff;
17
- --violet-600: #6526ff;
18
- --violet-700: #4d12d4;
19
-
20
- --magenta: #ff3db7;
21
- --pink-glow: #ff5cd6;
22
- --cyan: #4be3ff;
23
- --lime: #a4ff5c;
24
- --amber: #ffb84d;
25
- --red: #ff5470;
26
-
27
- --radius-sm: 8px;
28
- --radius: 12px;
29
- --radius-lg: 16px;
30
-
31
- --mono: 'JetBrains Mono', ui-monospace, monospace;
32
-
33
- --shadow-pop: 0 10px 40px -8px rgba(122, 61, 255, .35), 0 2px 0 0 rgba(255,255,255,.03) inset;
16
+ --violet-200: #a99dff;
17
+ --violet-300: #8f9cff;
18
+ --violet-400: #8b7cff;
19
+ --violet-500: #7c6cf6;
20
+ --violet-600: #6a5bea;
21
+ --violet-700: #5a4bd6;
22
+ --accent-bg: #2a2560;
23
+ --accent-line: #3b3480;
24
+
25
+ --magenta: #7c6cf6;
26
+ --pink-glow: #a99dff;
27
+ --cyan: #6fa0ff;
28
+ --lime: #7ee0b5;
29
+ --amber: #f5b86b;
30
+ --red: #f2708a;
31
+ --red-line: #4a2340;
32
+ --red-bg: #2a1428;
33
+
34
+ --radius-sm: 6px;
35
+ --radius: 8px;
36
+ --radius-lg: 10px;
37
+
38
+ --mono: 'Geist Mono', ui-monospace, monospace;
34
39
  }
35
40
 
36
41
  * { box-sizing: border-box; }
37
42
  html, body { margin: 0; padding: 0; }
38
43
  body {
39
- font-family: 'Space Grotesk', system-ui, sans-serif;
40
- background: var(--bg-0);
44
+ font-family: 'Geist', system-ui, sans-serif;
45
+ background: linear-gradient(180deg, #121633 0%, #0e1126 60%);
46
+ background-color: var(--bg-0);
47
+ background-attachment: fixed;
41
48
  color: var(--text);
42
49
  min-height: 100vh;
43
50
  -webkit-font-smoothing: antialiased;
44
- background-image:
45
- radial-gradient(1200px 600px at 12% -10%, rgba(122,61,255,.18), transparent 60%),
46
- radial-gradient(900px 500px at 100% 0%, rgba(255,61,183,.10), transparent 60%);
47
- background-attachment: fixed;
48
51
  }
49
52
 
50
- .mono { font-family: 'JetBrains Mono', ui-monospace, monospace; }
53
+ .mono { font-family: var(--mono); }
51
54
 
52
55
  /* ---------- Layout ---------- */
53
- .app {
54
- display: grid;
55
- grid-template-columns: 200px 1fr;
56
- min-height: 100vh;
57
- }
56
+ .app { display: flex; min-height: 100vh; }
58
57
 
59
58
  /* ---------- Sidebar ---------- */
60
59
  .sidebar {
61
- border-right: 1px solid var(--line-soft);
62
- background: linear-gradient(180deg, rgba(23,15,41,.8), rgba(11,6,20,.6));
63
- backdrop-filter: blur(8px);
64
- padding: 18px 10px;
65
- position: sticky; top: 0; height: 100vh;
66
- display: flex; flex-direction: column; gap: 6px;
67
- }
68
- .brand {
69
- display: flex; align-items: center; gap: 8px;
70
- padding: 4px 6px 14px;
71
- border-bottom: 1px solid var(--line-soft);
72
- margin-bottom: 8px;
73
- }
74
- .brand-mark {
75
- width: 28px; height: 28px; border-radius: 8px;
76
- background:
77
- conic-gradient(from 200deg, var(--violet-400), var(--magenta), var(--violet-600), var(--violet-400));
78
- box-shadow: 0 6px 22px -4px rgba(139,92,255,.6), inset 0 0 0 1px rgba(255,255,255,.18);
79
- position: relative;
80
- }
81
- .brand-mark::after{
82
- content: ""; position:absolute; inset: 5px; border-radius: 4px;
83
- background: var(--bg-0);
84
- box-shadow: inset 0 0 0 1px rgba(255,255,255,.08);
85
- }
86
- .brand-mark::before{
87
- content:""; position:absolute; left:50%; top:50%; width: 8px; height: 8px;
88
- transform: translate(-50%,-50%); border-radius: 2px;
89
- background: var(--pink-glow);
90
- box-shadow: 0 0 12px var(--pink-glow);
91
- z-index: 1;
92
- }
93
- .brand-name { font-weight: 700; letter-spacing: .2px; font-size: 15px; }
94
- .brand-name span { color: var(--violet-300); }
95
- .brand-pill {
96
- margin-left: auto; font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase;
97
- color: var(--lime); background: rgba(164,255,92,.08);
98
- border: 1px solid rgba(164,255,92,.25);
99
- border-radius: 999px; padding: 3px 8px;
100
- display: flex; align-items: center; gap: 5px; font-weight: 600;
101
- }
102
- .brand-pill::before{ content:""; width:6px;height:6px;border-radius:50%; background: var(--lime); box-shadow: 0 0 8px var(--lime); }
103
-
104
- .nav-label { font-size: 10px; letter-spacing: .14em; text-transform: uppercase; color: var(--text-faint); margin: 12px 8px 4px; font-weight: 600; }
105
- .nav { display: flex; flex-direction: column; gap: 1px; }
60
+ width: 212px; flex-shrink: 0;
61
+ background: var(--sidebar);
62
+ border-right: 1px solid #1a1f3d;
63
+ padding: 20px 14px;
64
+ position: sticky; top: 0; height: 100vh; overflow-y: auto;
65
+ display: flex; flex-direction: column; gap: 2px;
66
+ }
67
+ .brand { display: flex; align-items: center; gap: 10px; padding: 0 6px 20px; }
68
+ .brand-mark { width: 22px; height: 22px; border-radius: 7px; background: var(--violet-500); box-shadow: 0 0 0 3px var(--accent-bg); }
69
+ .brand-name { font-weight: 600; font-size: 15px; color: #fff; }
70
+ .brand-name span { color: #fff; }
71
+
72
+ .nav-label { font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-dimmer); margin: 20px 0 4px; padding: 0 8px 2px; font-weight: 500; }
73
+ .nav { display: flex; flex-direction: column; gap: 2px; }
106
74
  .nav a {
107
- display: flex; align-items: center; gap: 9px;
108
- padding: 7px 8px; border-radius: 8px;
75
+ display: flex; align-items: center; gap: 10px;
76
+ padding: 7px 8px; border-radius: 7px;
109
77
  color: var(--text-dim); text-decoration: none;
110
- font-size: 13px; font-weight: 500;
111
- border: 1px solid transparent;
112
- transition: all .15s ease;
113
- }
114
- .nav a:hover { background: rgba(122,61,255,.08); color: var(--text); }
115
- .nav a.active {
116
- background: linear-gradient(180deg, rgba(122,61,255,.22), rgba(122,61,255,.08));
117
- color: white;
118
- border-color: rgba(168,140,255,.25);
119
- box-shadow: 0 1px 0 rgba(255,255,255,.05) inset, 0 6px 22px -8px rgba(122,61,255,.5);
78
+ font-size: 13px;
79
+ transition: background .15s, color .15s;
120
80
  }
81
+ .nav a:hover { background: #15183a; color: #fff; }
82
+ .nav a.active { background: #1c1b4a; color: #fff; }
121
83
  .nav a .dot {
122
- width: 7px; height: 7px; border-radius: 50%; background: var(--text-faint);
123
- box-shadow: 0 0 0 0 rgba(0,0,0,0);
124
- }
125
- .nav a.active .dot { background: var(--magenta); box-shadow: 0 0 8px var(--pink-glow); }
126
- .nav a .count {
127
- margin-left: auto; font-family: 'JetBrains Mono', monospace; font-size: 11.5px;
128
- color: var(--text-faint); padding: 2px 7px; border-radius: 6px;
129
- background: rgba(255,255,255,.03); border: 1px solid var(--line-soft);
84
+ width: 12px; height: 12px; border: 1.5px solid var(--text-dimmer); border-radius: 3px; flex-shrink: 0;
130
85
  }
131
- .nav a.active .count { color: var(--violet-200); border-color: rgba(168,140,255,.3); background: rgba(122,61,255,.18); }
86
+ .nav a.active .dot { border-color: var(--violet-500); border-radius: 50%; }
87
+ .nav a .count { margin-left: auto; font: 500 11px var(--mono); color: var(--text-faint); }
88
+ .nav a.active .count { color: var(--violet-200); }
132
89
 
133
- .sidebar-footer { margin-top: auto; padding: 10px; border-top: 1px solid var(--line-soft); display: flex; align-items: center; gap: 10px; }
134
- .avatar { width: 30px; height: 30px; border-radius: 8px; background: linear-gradient(135deg, var(--violet-500), var(--magenta)); display:grid; place-items:center; font-weight:700; font-size:12px; }
135
- .who { font-size: 13px; }
136
- .who small { display:block; color: var(--text-faint); font-size: 11px; }
90
+ .sidebar-footer {
91
+ margin-top: auto; padding: 10px 12px; display: flex; align-items: center; gap: 10px;
92
+ border: 1px solid #2f2a66; background: #141537; border-radius: 8px;
93
+ }
94
+ .avatar { width: 22px; height: 22px; border-radius: 6px; background: var(--violet-500); display: grid; place-items: center; font-weight: 600; font-size: 10px; color: #fff; }
95
+ .who { font: 600 10px 'Geist'; letter-spacing: .06em; color: var(--violet-200); text-transform: uppercase; }
96
+ .who small { display: block; color: var(--text-dim); font: 400 12px var(--mono); text-transform: none; letter-spacing: 0; margin-top: 2px; }
137
97
 
138
98
  /* ---------- Main ---------- */
139
- .main {
140
- padding: 22px 32px 48px;
141
- max-width: 1500px;
142
- }
99
+ .main { flex: 1; min-width: 0; padding: 0 24px 48px; }
143
100
 
144
101
  /* Top bar */
145
102
  .topbar {
146
103
  display: flex; align-items: center; gap: 14px;
147
- margin-bottom: 22px;
148
- }
149
- .breadcrumb { display:flex; align-items:center; gap: 8px; color: var(--text-dim); font-size: 13px; }
150
- .breadcrumb b { color: var(--text); font-weight: 600; }
151
- .breadcrumb svg { opacity: .4; }
152
- .topbar-actions { margin-left: auto; display: flex; align-items: center; gap: 10px; }
104
+ margin: 0 -24px 22px; padding: 12px 24px;
105
+ border-bottom: 1px solid #1a1f3d; background: #111430;
106
+ position: sticky; top: 0; z-index: 5;
107
+ }
108
+ .breadcrumb { display: flex; align-items: center; gap: 8px; color: var(--text-dimmer); font-size: 13px; }
109
+ .breadcrumb b { color: #fff; font-weight: 500; }
110
+ .breadcrumb svg { opacity: .6; }
111
+ .topbar-actions { margin-left: auto; display: flex; align-items: center; gap: 8px; }
153
112
  .live-toggle {
154
- display:flex; align-items:center; gap: 8px; padding: 7px 12px;
155
- border: 1px solid var(--line); border-radius: 8px; background: rgba(122,61,255,.06);
156
- font-size: 13px; cursor: pointer; color: var(--text); font-family: inherit;
157
- transition: all .15s;
158
- }
159
- .live-toggle:hover { background: rgba(122,61,255,.14); border-color: var(--violet-400); }
160
- .live-toggle .pulse { width: 7px; height: 7px; border-radius: 50%; background: var(--lime); box-shadow: 0 0 0 0 rgba(164,255,92,.6); animation: pulse 1.6s ease-out infinite; }
161
- .live-toggle.off .pulse { background: var(--text-faint); animation: none; box-shadow: none; }
162
- @keyframes pulse {
163
- 0% { box-shadow: 0 0 0 0 rgba(164,255,92,.6); }
164
- 70% { box-shadow: 0 0 0 8px rgba(164,255,92,0); }
165
- 100% { box-shadow: 0 0 0 0 rgba(164,255,92,0); }
166
- }
113
+ display: inline-flex; align-items: center; gap: 8px; padding: 6px 11px;
114
+ border: 1px solid var(--line); border-radius: 7px; background: transparent;
115
+ font: 500 12px 'Geist'; cursor: pointer; color: #c3c7e0; white-space: nowrap;
116
+ transition: background .15s, border-color .15s, color .15s, transform .08s;
117
+ }
118
+ .live-toggle:hover { background: var(--bg-3); border-color: #3d4580; color: #fff; }
119
+ .live-toggle:active { transform: scale(.97); }
120
+ .live-toggle .pulse { width: 7px; height: 7px; border-radius: 50%; background: var(--lime); box-shadow: 0 0 0 4px rgba(126,224,181,.15); }
121
+ .live-toggle.off .pulse { background: var(--text-dimmer); box-shadow: none; }
167
122
  .icon-btn {
168
- width: 34px; height: 34px; border-radius: 8px; border: 1px solid var(--line);
169
- background: transparent; color: var(--text-dim); cursor: pointer; display:grid;place-items:center;
123
+ width: 30px; height: 30px; border-radius: 7px; border: 1px solid var(--line);
124
+ background: transparent; color: #c3c7e0; cursor: pointer; display: grid; place-items: center;
125
+ transition: background .15s, border-color .15s, color .15s;
170
126
  }
171
- .icon-btn:hover { color: white; border-color: var(--violet-400); background: rgba(122,61,255,.1); }
127
+ .icon-btn:hover { color: #fff; border-color: #3d4580; background: var(--bg-3); }
172
128
 
173
129
  /* Stat bar */
174
130
  .stat-strip {
175
- display: grid; grid-template-columns: repeat(7, 1fr);
176
- background: linear-gradient(180deg, var(--bg-2), var(--bg-1));
177
- border: 1px solid var(--line-soft);
178
- border-radius: var(--radius-lg);
179
- overflow: hidden;
180
- position: relative;
181
- margin-bottom: 28px;
182
- }
183
- .stat-strip::before {
184
- content:""; position:absolute; inset:0;
185
- background:
186
- radial-gradient(600px 120px at 30% 0%, rgba(122,61,255,.15), transparent 70%);
187
- pointer-events:none;
131
+ display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));
132
+ background: var(--bg-1); border: 1px solid var(--line-soft);
133
+ border-radius: var(--radius-lg); overflow: hidden; margin-bottom: 18px;
188
134
  }
189
135
  .stat {
190
- padding: 16px 18px;
191
- display: flex; flex-direction: column; gap: 4px;
192
- border-right: 1px solid var(--line-soft);
193
- position: relative; z-index: 1;
194
- cursor: pointer;
195
- transition: background .15s;
196
- text-decoration: none;
197
- color: inherit;
136
+ padding: 14px 16px; display: flex; flex-direction: column; gap: 6px;
137
+ border-right: 1px solid var(--line-soft); cursor: pointer;
138
+ transition: background .15s; text-decoration: none; color: inherit;
198
139
  }
199
- .stat:hover { background: rgba(122,61,255,.05); }
140
+ .stat:hover { background: #171a3a; }
200
141
  .stat:last-child { border-right: 0; }
201
- .stat-label { font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--text-faint); font-weight: 600; display: flex; align-items: center; gap: 6px; }
202
- .stat-label .dot-mini { width: 6px; height: 6px; border-radius: 50%; }
203
- .stat-value { font-family: 'JetBrains Mono', monospace; font-size: 22px; font-weight: 600; letter-spacing: -.5px; }
204
- .stat-delta { font-size: 11px; color: var(--text-faint); }
142
+ .stat-label { font: 500 11px 'Geist'; letter-spacing: .04em; color: var(--text-faint); display: flex; align-items: center; gap: 6px; }
143
+ .stat-label .dot-mini { width: 6px; height: 6px; border-radius: 50%; box-shadow: none !important; }
144
+ .stat-value { font: 500 20px var(--mono); letter-spacing: -.02em; color: #fff; }
145
+ .stat-delta { font-size: 11px; color: var(--text-dimmer); }
205
146
  .stat-delta.up { color: var(--lime); }
206
147
  .stat-delta.down { color: var(--red); }
207
148
  .stat-delta.warn { color: var(--amber); }
@@ -210,308 +151,180 @@ body {
210
151
  .stat[data-tone="failed"] .stat-value, .stat[data-tone="dead"] .stat-value { color: var(--red); }
211
152
  .stat[data-tone="busy"] .stat-value, .stat[data-tone="enqueued"] .stat-value { color: var(--cyan); }
212
153
  .stat[data-tone="retries"] .stat-value { color: var(--amber); }
213
- .stat[data-tone="scheduled"] .stat-value { color: var(--text); }
154
+ .stat[data-tone="scheduled"] .stat-value { color: #fff; }
214
155
 
215
156
  /* ---------- Page Header ---------- */
216
- .page-head {
217
- display: flex; align-items: end; gap: 16px; margin-bottom: 18px; flex-wrap: wrap;
218
- }
219
- .page-title-block { display:flex; flex-direction: column; gap: 6px; }
220
- .eyebrow { display:flex; align-items:center; gap: 8px; font-size: 12px; color: var(--text-faint); letter-spacing: .12em; text-transform: uppercase; font-weight: 600; }
221
- .eyebrow .pill { background: rgba(122,61,255,.18); border: 1px solid rgba(168,140,255,.3); color: var(--violet-200); padding: 2px 8px; border-radius: 999px; font-size: 10px; }
157
+ .page-head { display: flex; align-items: center; gap: 16px; margin-bottom: 18px; flex-wrap: wrap; }
158
+ .page-title-block { display: flex; flex-direction: column; gap: 6px; }
159
+ .eyebrow { display: flex; align-items: center; gap: 8px; font: 500 10px 'Geist'; color: var(--text-dimmer); letter-spacing: .12em; text-transform: uppercase; }
160
+ .eyebrow .pill { background: var(--accent-bg); color: var(--violet-200); padding: 2px 6px; border-radius: 4px; font: 600 9px 'Geist'; }
222
161
  h1 {
223
- margin: 0; font-size: 34px; letter-spacing: -.8px; font-weight: 600;
224
- display: flex; align-items: center; gap: 14px;
225
- }
226
- h1 .queue-name {
227
- background: linear-gradient(110deg, var(--violet-200), var(--pink-glow) 60%, var(--violet-300));
228
- -webkit-background-clip: text; background-clip: text; color: transparent;
229
- font-weight: 700;
162
+ margin: 0; font-size: 22px; letter-spacing: -.01em; font-weight: 600; color: #fff;
163
+ display: flex; align-items: center; gap: 12px;
230
164
  }
165
+ h1 .queue-name { color: #fff; font-weight: 600; }
231
166
  h1 .badge-num {
232
- font-family: 'JetBrains Mono', monospace; font-size: 14px; font-weight: 600;
233
- background: rgba(255,61,183,.15); border: 1px solid rgba(255,92,214,.3); color: var(--pink-glow);
234
- padding: 4px 10px; border-radius: 999px; letter-spacing: 0;
167
+ font: 500 11px 'Geist'; background: #1d2147 !important; border: 0 !important; color: var(--text-dim) !important;
168
+ padding: 3px 8px; border-radius: 5px; letter-spacing: 0;
235
169
  }
236
170
 
237
- .page-head-meta {
238
- margin-left: auto; display: flex; align-items: center; gap: 20px;
239
- color: var(--text-dim); font-size: 13px;
240
- }
171
+ .page-head-meta { margin-left: auto; display: flex; align-items: center; gap: 20px; color: var(--text-dim); font-size: 13px; }
241
172
  .page-head-meta .meta-item { display: flex; flex-direction: column; gap: 2px; align-items: flex-end; }
242
- .page-head-meta .meta-k { font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--text-faint); font-weight: 600;}
243
- .page-head-meta .meta-v { font-family: 'JetBrains Mono', monospace; font-weight: 500; color: var(--text); font-size: 14px;}
173
+ .page-head-meta .meta-k { font: 500 10px 'Geist'; letter-spacing: .1em; text-transform: uppercase; color: var(--text-dimmer); }
174
+ .page-head-meta .meta-v { font: 500 13px var(--mono); color: var(--text); }
244
175
 
245
- /* sparkline */
246
- .sparkline {
247
- display: flex; align-items: flex-end; gap: 2px;
248
- height: 28px;
249
- }
250
- .sparkline span {
251
- width: 4px; background: linear-gradient(180deg, var(--magenta), var(--violet-400));
252
- border-radius: 2px;
253
- opacity: .9;
254
- }
176
+ .sparkline { display: flex; align-items: flex-end; gap: 2px; height: 28px; }
177
+ .sparkline span { width: 4px; background: var(--violet-500); border-radius: 2px; opacity: .9; }
255
178
 
256
179
  /* ---------- Toolbar / Filters ---------- */
257
180
  .toolbar {
258
181
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
259
182
  background: var(--bg-1); border: 1px solid var(--line-soft);
260
- border-radius: var(--radius);
261
- padding: 10px;
262
- margin-bottom: 14px;
183
+ border-radius: var(--radius-lg); padding: 10px; margin-bottom: 14px;
263
184
  }
264
185
  .search {
265
- flex: 1; min-width: 280px;
266
- display: flex; align-items: center; gap: 8px;
267
- background: var(--bg-0); border: 1px solid var(--line-soft);
268
- border-radius: 9px; padding: 8px 12px;
269
- }
270
- .search:focus-within { border-color: var(--violet-400); box-shadow: 0 0 0 3px rgba(122,61,255,.2); }
271
- .search svg { opacity: .5; }
272
- .search input {
273
- flex: 1; background: transparent; border: 0; outline: 0; color: var(--text);
274
- font-family: 'JetBrains Mono', monospace; font-size: 13px;
275
- }
276
- .search input::placeholder { color: var(--text-faint); }
277
- .search kbd {
278
- font-family: inherit; font-size: 10.5px; color: var(--text-faint);
279
- border: 1px solid var(--line); padding: 2px 6px; border-radius: 5px; background: rgba(255,255,255,.02);
280
- }
281
-
282
- .filter-group { display: flex; align-items: center; gap: 6px; }
283
- .filter-label { font-size: 11.5px; color: var(--text-faint); text-transform: uppercase; letter-spacing: .1em; font-weight: 600; padding: 0 4px; }
186
+ flex: 1; min-width: 240px; display: flex; align-items: center; gap: 8px;
187
+ background: #0f1229; border: 1px solid #232850; border-radius: 8px; padding: 7px 10px;
188
+ transition: border-color .15s;
189
+ }
190
+ .search:focus-within { border-color: var(--violet-500); }
191
+ .search svg { opacity: .5; flex-shrink: 0; }
192
+ .search .search-btn { padding: 4px 10px; }
193
+ .search input { flex: 1; background: transparent; border: 0; outline: 0; color: #fff; font: 400 13px 'Geist'; }
194
+ .search input::placeholder { color: #5f6690; }
195
+ .search kbd { font: 500 11px var(--mono); color: #8a90b5; border: 1px solid #2a3058; padding: 1px 6px; border-radius: 4px; }
196
+
197
+ .filter-group { display: flex; align-items: center; gap: 2px; background: var(--bg-2); border: 1px solid #232850; border-radius: 8px; padding: 3px; }
198
+ .filter-label { font: 500 10px 'Geist'; color: var(--text-faint); text-transform: uppercase; letter-spacing: .1em; padding: 0 6px; }
284
199
  .chip {
285
- background: var(--bg-0); border: 1px solid var(--line-soft);
286
- color: var(--text-dim); font-size: 12.5px; font-weight: 500;
287
- padding: 7px 11px; border-radius: 8px; cursor: pointer;
200
+ background: transparent; border: 0; color: var(--text-dim);
201
+ font: 500 12px 'Geist'; padding: 5px 11px; border-radius: 6px; cursor: pointer;
288
202
  display: inline-flex; align-items: center; gap: 6px;
289
- font-family: inherit;
290
- transition: all .15s;
291
- }
292
- .chip:hover { color: white; border-color: var(--violet-400); }
293
- .chip.active {
294
- background: linear-gradient(180deg, rgba(122,61,255,.22), rgba(122,61,255,.08));
295
- color: white; border-color: rgba(168,140,255,.4);
203
+ transition: background .15s, color .15s;
296
204
  }
297
- .chip .chip-count { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--text-faint); }
298
- .chip.active .chip-count { color: var(--violet-200); }
205
+ .chip:hover { color: #fff; }
206
+ .chip.active { background: var(--violet-500); color: #fff; }
207
+ .chip .chip-count { font: 500 11px var(--mono); color: var(--text-faint); }
208
+ .chip.active .chip-count { color: #e0dcff; }
299
209
 
300
- .dropdown {
301
- position: relative;
302
- }
210
+ .dropdown { position: relative; }
303
211
  .dropdown > .chip { gap: 8px; }
304
212
  .dropdown > .chip svg { opacity: .6; }
305
213
 
306
214
  .divider-v { width: 1px; align-self: stretch; background: var(--line-soft); margin: 4px 4px; }
307
215
 
308
- .btn {
309
- background: linear-gradient(180deg, var(--violet-500), var(--violet-700));
310
- color: white; border: 0;
311
- padding: 9px 14px; border-radius: 8px; font-family: inherit; font-weight: 600; font-size: 13px;
312
- cursor: pointer;
313
- box-shadow: 0 6px 22px -8px rgba(122,61,255,.7), inset 0 1px 0 rgba(255,255,255,.18);
314
- display: inline-flex; align-items: center; gap: 7px;
315
- text-decoration: none;
316
- }
317
- .btn:hover { filter: brightness(1.1); }
318
- .btn.danger {
319
- background: linear-gradient(180deg, #ff4666, #c01837);
320
- box-shadow: 0 6px 22px -8px rgba(255,84,112,.6), inset 0 1px 0 rgba(255,255,255,.18);
321
- }
322
- .btn.ghost {
323
- background: transparent; border: 1px solid var(--line); color: var(--text-dim);
324
- box-shadow: none;
325
- }
326
- .btn.ghost:hover { color: white; border-color: var(--violet-400); background: rgba(122,61,255,.08); }
327
-
328
- /* legacy button classes */
329
- .btn-primary {
330
- background: linear-gradient(180deg, var(--violet-500), var(--violet-700));
331
- color: white; border: 0;
332
- padding: 9px 14px; border-radius: 8px; font-family: inherit; font-weight: 600; font-size: 13px;
333
- cursor: pointer;
334
- box-shadow: 0 6px 22px -8px rgba(122,61,255,.7), inset 0 1px 0 rgba(255,255,255,.18);
335
- display: inline-flex; align-items: center; gap: 7px; text-decoration: none;
216
+ .btn, .btn-primary, .btn-danger, .btn-warning {
217
+ display: inline-flex; align-items: center; gap: 6px; text-decoration: none; cursor: pointer;
218
+ border: 1px solid var(--violet-500); background: var(--violet-500); color: #fff;
219
+ border-radius: 7px; padding: 6px 12px; font: 500 12px 'Geist';
220
+ transition: background .15s, border-color .15s, color .15s, box-shadow .15s, transform .08s;
336
221
  }
337
- .btn-primary:hover { filter: brightness(1.1); }
338
- .btn-danger {
339
- background: linear-gradient(180deg, #ff4666, #c01837);
340
- box-shadow: 0 6px 22px -8px rgba(255,84,112,.6), inset 0 1px 0 rgba(255,255,255,.18);
341
- color: white; border: 0;
342
- padding: 9px 14px; border-radius: 8px; font-family: inherit; font-weight: 600; font-size: 13px;
343
- cursor: pointer; display: inline-flex; align-items: center; gap: 7px; text-decoration: none;
344
- }
345
- .btn-danger:hover { filter: brightness(1.1); }
346
- .btn-warning {
347
- background: transparent; border: 1px solid var(--line); color: var(--text-dim);
348
- box-shadow: none;
349
- padding: 9px 14px; border-radius: 8px; font-family: inherit; font-weight: 600; font-size: 13px;
350
- cursor: pointer; display: inline-flex; align-items: center; gap: 7px; text-decoration: none;
351
- }
352
- .btn-warning:hover { color: white; border-color: var(--violet-400); background: rgba(122,61,255,.08); }
222
+ .btn:hover, .btn-primary:hover { background: var(--violet-400); box-shadow: 0 0 0 3px rgba(124,108,246,.2); color: #fff; }
223
+ .btn:active, .btn-primary:active, .btn-danger:active, .btn-warning:active { transform: scale(.97); }
224
+ .btn.ghost, .btn-warning { background: transparent; border-color: var(--line); color: #c3c7e0; }
225
+ .btn.ghost:hover, .btn-warning:hover { background: var(--bg-3); border-color: #3d4580; color: #fff; box-shadow: none; }
226
+ .btn.danger, .btn-danger { background: transparent; border-color: var(--red-line); color: var(--red); }
227
+ .btn.danger:hover, .btn-danger:hover { background: var(--red-bg); border-color: var(--red); color: var(--red); box-shadow: none; }
353
228
 
354
229
  /* Active filter row */
355
- .active-filters {
356
- display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
357
- padding: 0 4px 14px;
358
- color: var(--text-faint); font-size: 12px;
359
- }
230
+ .active-filters { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 0 4px 14px; color: var(--text-faint); font-size: 12px; }
360
231
  .filter-tag {
361
- display:inline-flex; align-items:center; gap:6px;
362
- background: rgba(122,61,255,.12);
363
- border: 1px solid rgba(168,140,255,.3);
364
- color: var(--violet-200);
365
- padding: 4px 6px 4px 10px;
366
- border-radius: 7px;
367
- font-size: 12px; font-family: 'JetBrains Mono', monospace;
368
- }
369
- .filter-tag .x {
370
- cursor: pointer; opacity: .6; padding: 0 2px; line-height: 1;
232
+ display: inline-flex; align-items: center; gap: 6px;
233
+ background: #1a1944; border: 1px solid var(--accent-line); color: #fff;
234
+ padding: 4px 6px 4px 10px; border-radius: 7px; font: 400 12px var(--mono);
371
235
  }
372
- .filter-tag .x:hover { opacity: 1; color: var(--pink-glow); }
236
+ .filter-tag .x { cursor: pointer; opacity: .6; padding: 0 2px; line-height: 1; }
237
+ .filter-tag .x:hover { opacity: 1; color: var(--red); }
373
238
 
374
239
  /* ---------- Panel / Table ---------- */
375
240
  .panel {
376
- background: var(--bg-1);
377
- border: 1px solid var(--line-soft);
378
- border-radius: var(--radius-lg);
379
- overflow: hidden;
380
- box-shadow: 0 1px 0 rgba(255,255,255,.02) inset;
381
- margin-bottom: 22px;
382
- }
383
- .panel-head {
384
- display: flex; align-items: center; gap: 14px;
385
- padding: 12px 16px;
386
- border-bottom: 1px solid var(--line-soft);
387
- background: rgba(255,255,255,.01);
388
- }
389
- .panel-head .ph-title {
390
- font-size: 13px; color: var(--text); font-weight: 600;
241
+ background: var(--bg-1); border: 1px solid var(--line-soft);
242
+ border-radius: var(--radius-lg); overflow: hidden; margin-bottom: 18px;
391
243
  }
392
- .panel-head .ph-meta { color: var(--text-faint); font-size: 12px; font-family: 'JetBrains Mono', monospace; }
244
+ .panel-head { display: flex; align-items: center; gap: 10px; padding: 10px 16px; border-bottom: 1px solid var(--line-soft); }
245
+ .panel-head .ph-title { font: 600 14px 'Geist'; color: #fff; }
246
+ .panel-head .ph-meta { color: var(--text-faint); font: 400 12px var(--mono); }
393
247
  .panel-head .ph-spacer { flex: 1; }
394
- .bulk-bar {
395
- display: flex; align-items: center; gap: 10px;
396
- color: var(--text-dim); font-size: 12.5px;
397
- }
248
+ .bulk-bar { display: flex; align-items: center; gap: 10px; color: var(--text-dim); font-size: 12.5px; }
398
249
  .bulk-bar.hidden { display: none; }
399
- .bulk-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 10px 16px; }
250
+ .bulk-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 8px 10px 8px 16px; border-bottom: 1px solid var(--accent-line); background: #1a1944; }
400
251
 
401
- table {
402
- width: 100%; border-collapse: collapse;
403
- font-size: 13.5px;
404
- }
252
+ table { width: 100%; border-collapse: collapse; font-size: 13px; }
405
253
  thead th {
406
- text-align: left; font-weight: 600; font-size: 11.5px; letter-spacing: .1em;
407
- text-transform: uppercase; color: var(--text-faint);
408
- padding: 10px 16px;
409
- background: var(--bg-1);
410
- position: sticky; top: 0; z-index: 1;
411
- overflow: hidden; white-space: nowrap;
254
+ text-align: left; font: 500 10px 'Geist'; letter-spacing: .1em; text-transform: uppercase; color: #5f6690;
255
+ padding: 10px 16px; background: var(--bg-1); border-bottom: 1px solid var(--line-soft);
256
+ position: sticky; top: 0; z-index: 1; overflow: hidden; white-space: nowrap;
412
257
  }
413
258
  .table-scroll {
414
- max-height: calc(100vh - 300px);
415
- overflow: auto;
416
- scrollbar-width: thin;
417
- scrollbar-color: var(--violet-500) transparent;
259
+ max-height: calc(100vh - 300px); overflow: auto;
260
+ scrollbar-width: thin; scrollbar-color: #2a3058 transparent;
418
261
  }
419
262
  .table-scroll::-webkit-scrollbar { width: 6px; height: 6px; }
420
263
  .table-scroll::-webkit-scrollbar-track { background: transparent; }
421
- .table-scroll::-webkit-scrollbar-thumb { background: var(--violet-500); border-radius: 3px; }
422
- .table-scroll::-webkit-scrollbar-thumb:hover { background: var(--violet-400); }
423
- .table-head-wrap {
424
- background: var(--bg-1);
425
- border-bottom: 1px solid var(--line-soft);
426
- }
264
+ .table-scroll::-webkit-scrollbar-thumb { background: #2a3058; border-radius: 3px; }
265
+ .table-scroll::-webkit-scrollbar-thumb:hover { background: #3d4580; }
266
+ .table-head-wrap { background: var(--bg-1); border-bottom: 1px solid var(--line-soft); }
427
267
  .table-head-wrap table { table-layout: fixed; }
428
268
  .table-scroll table { table-layout: fixed; }
429
269
  thead th .sort-arrow { opacity: .8; }
430
- tbody td {
431
- padding: 14px 16px;
432
- border-bottom: 1px solid var(--line-soft);
433
- color: var(--text);
434
- vertical-align: middle;
435
- overflow: hidden;
436
- }
437
- tbody tr { transition: background .12s; cursor: pointer; }
438
- tbody tr:hover { background: rgba(122,61,255,.06); }
439
- tbody tr.selected { background: rgba(122,61,255,.12); box-shadow: inset 3px 0 0 var(--magenta); }
270
+ tbody td { padding: 10px 16px; border-bottom: 1px solid var(--line-row); color: var(--text); vertical-align: middle; overflow: hidden; }
271
+ tbody tr { transition: background .15s; cursor: pointer; }
272
+ tbody tr:hover { background: #161a3a; }
273
+ tbody tr.selected { background: #1a1944; }
440
274
  tbody tr:last-child td { border-bottom: 0; }
441
275
 
442
276
  .check {
443
- appearance: none; width: 16px; height: 16px; border-radius: 4px;
444
- border: 1.5px solid var(--line); background: var(--bg-0);
445
- cursor: pointer; display: inline-grid; place-items: center;
446
- margin: 0;
447
- }
448
- .check:checked {
449
- background: var(--violet-500); border-color: var(--violet-300);
277
+ appearance: none; -webkit-appearance: none; width: 14px; height: 14px; border-radius: 4px;
278
+ border: 1.5px solid var(--text-dimmer); background: transparent;
279
+ cursor: pointer; display: block; position: relative; margin: 0; vertical-align: middle;
280
+ transition: background .12s, border-color .12s;
450
281
  }
282
+ .check:hover { border-color: var(--violet-200); }
283
+ .check:checked { background: var(--violet-500); border-color: var(--violet-500); }
451
284
  .check:checked::after {
452
- content: ""; width: 8px; height: 4px;
453
- border-left: 2px solid white; border-bottom: 2px solid white;
454
- transform: rotate(-45deg) translate(0, -1px);
285
+ content: ""; position: absolute; left: 2px; top: 2.5px; width: 7px; height: 3px;
286
+ border-left: 1.5px solid #fff; border-bottom: 1.5px solid #fff;
287
+ transform: rotate(-45deg);
455
288
  }
456
289
 
457
290
  .col-select { width: 36px; padding-right: 0 !important; }
458
- .col-num { width: 56px; font-family: 'JetBrains Mono', monospace; color: var(--text-faint); }
291
+ .col-num { width: 56px; font-family: var(--mono); color: var(--text-faint); }
459
292
  .col-actions { width: 90px; text-align: right; }
460
- /* col-compact: reduced side padding for narrow data cells */
461
293
  .col-compact { padding-left: 8px !important; padding-right: 8px !important; }
462
- /* width classes for col elements — col only supports border/background/width/visibility */
463
294
  col.w-xs { width: 40px; }
464
295
  col.w-sm { width: 60px; }
465
296
  col.w-md { width: 80px; }
466
297
  col.w-lg { width: 140px; }
467
298
 
468
- .job-cell { display: flex; flex-direction: column; gap: 4px; }
469
- .job-name {
470
- font-family: 'JetBrains Mono', monospace; font-weight: 600; font-size: 13px;
471
- color: var(--violet-200);
472
- display: inline-flex; align-items: center; gap: 7px;
473
- }
299
+ .job-cell { display: flex; flex-direction: column; gap: 3px; }
300
+ .job-name { font: 400 13px 'Geist'; color: var(--violet-300); display: inline-flex; align-items: center; gap: 7px; }
474
301
  a.job-name { text-decoration: none; }
475
- a.job-name:hover { color: #fff; text-shadow: 0 0 14px var(--violet-300); }
476
- .job-name::before {
477
- content:""; width: 6px; height: 6px; border-radius: 50%;
478
- background: var(--violet-400); box-shadow: 0 0 6px var(--violet-400);
479
- }
480
- .job-meta { font-size: 11.5px; color: var(--text-faint); display: flex; gap: 10px; }
481
- .job-meta .tag {
482
- color: var(--text-dim); display: inline-flex; align-items: center; gap: 4px;
483
- }
302
+ a.job-name:hover { color: #fff; }
303
+ .job-meta { font: 400 11px var(--mono); color: #5f6690; display: flex; gap: 10px; }
304
+ .job-meta .tag { color: var(--text-faint); display: inline-flex; align-items: center; gap: 4px; }
484
305
 
485
306
  .args {
486
- font-family: 'JetBrains Mono', monospace; font-size: 12.5px; color: var(--text-dim);
487
- background: var(--bg-0); border: 1px solid var(--line-soft);
488
- padding: 5px 9px; border-radius: 6px;
489
- max-width: 460px;
490
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
491
- display: inline-block;
307
+ font: 400 11px var(--mono); color: #5f6690;
308
+ background: transparent; border: 0; padding: 0; border-radius: 0;
309
+ max-width: 460px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; display: inline-block;
492
310
  }
493
311
  a.args-link { text-decoration: none; display: inline-block; }
494
- a.args-link:hover code.args { border-color: var(--violet-400); color: var(--violet-200); }
312
+ a.args-link:hover code.args { color: var(--violet-200); }
495
313
  .args .k { color: var(--cyan); }
496
314
  .args .s { color: var(--lime); }
497
315
  .args .n { color: var(--amber); }
498
316
 
499
317
  .ctx-pill {
500
318
  display: inline-flex; align-items: center; gap: 6px;
501
- font-family: 'JetBrains Mono', monospace; font-size: 11.5px;
502
- color: var(--text-dim);
503
- padding: 3px 8px; border-radius: 6px;
504
- background: rgba(255,255,255,.02); border: 1px solid var(--line-soft);
319
+ font: 600 10px var(--mono); color: var(--cyan);
320
+ padding: 3px 6px; border-radius: 4px; background: #1a2752; border: 0;
505
321
  }
506
322
  .ctx-pill .ctx-dot { width: 6px; height: 6px; border-radius: 50%; }
507
323
 
508
- .priority {
509
- display: inline-flex; align-items: center; gap: 6px;
510
- font-size: 11.5px; font-weight: 500;
511
- }
324
+ .priority { display: inline-flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 500; }
512
325
  .priority .bars { display: inline-flex; gap: 1.5px; align-items: flex-end; height: 10px; }
513
- .priority .bars i { display: block; width: 2.5px; background: var(--text-faint); border-radius: 1px;}
514
- .priority.high .bars i { background: var(--magenta); }
326
+ .priority .bars i { display: block; width: 2.5px; background: var(--text-faint); border-radius: 1px; }
327
+ .priority.high .bars i { background: var(--red); }
515
328
  .priority.med .bars i { background: var(--amber); }
516
329
  .priority.low .bars i { background: var(--text-faint); }
517
330
  .priority .bars i:nth-child(1){height:3px}
@@ -521,116 +334,102 @@ a.args-link:hover code.args { border-color: var(--violet-400); color: var(--viol
521
334
  .priority.low .bars i:nth-child(2),
522
335
  .priority.low .bars i:nth-child(3){ opacity:.25; }
523
336
 
524
- .row-actions {
525
- display: inline-flex; gap: 4px; opacity: 0; transition: opacity .15s;
526
- }
527
- tbody tr:hover .row-actions { opacity: 1; }
528
- tbody tr.selected .row-actions { opacity: 1; }
337
+ .row-actions { display: inline-flex; gap: 4px; opacity: 0; transition: opacity .15s; }
338
+ tbody tr:hover .row-actions, tbody tr.selected .row-actions { opacity: 1; }
529
339
  .iconlink {
530
- width: 28px; height: 28px; border-radius: 6px; border: 1px solid var(--line-soft);
531
- background: var(--bg-0); color: var(--text-dim);
532
- display: inline-grid; place-items: center; cursor: pointer;
340
+ width: 28px; height: 28px; border-radius: 6px; border: 1px solid transparent;
341
+ background: transparent; color: #8a90b5; display: inline-grid; place-items: center; cursor: pointer;
342
+ transition: background .15s, border-color .15s, color .15s;
533
343
  }
534
- .iconlink:hover { color: white; border-color: var(--violet-400); background: rgba(122,61,255,.1); }
535
- .iconlink.danger:hover { color: var(--red); border-color: var(--red); background: rgba(255,84,112,.08); }
344
+ .iconlink:hover { color: #fff; border-color: #3b3480; background: #1f1d4d; }
345
+ .iconlink.danger:hover { color: var(--red); border-color: var(--red-line); background: var(--red-bg); }
536
346
 
537
347
  /* footer / pagination */
538
- .panel-foot {
539
- display: flex; align-items: center; gap: 10px;
540
- padding: 12px 16px;
541
- border-top: 1px solid var(--line-soft);
542
- color: var(--text-faint); font-size: 12.5px;
543
- }
544
- .pager { margin-left: auto; display: inline-flex; gap: 4px; }
348
+ .panel-foot { display: flex; align-items: center; gap: 10px; padding: 10px 16px; border-top: 1px solid var(--line-soft); color: var(--text-faint); font-size: 12px; }
349
+ .pager { margin-left: auto; display: inline-flex; gap: 6px; }
545
350
  .pager a, .pager button {
546
- background: transparent; border: 1px solid var(--line-soft); color: var(--text-dim);
547
- width: 30px; height: 30px; border-radius: 7px; cursor: pointer;
548
- font-family: 'JetBrains Mono', monospace; font-size: 12.5px;
549
- display: inline-grid; place-items: center; text-decoration: none;
351
+ background: transparent; border: 1px solid var(--line); color: #c3c7e0;
352
+ min-width: 30px; height: 28px; padding: 0 10px; border-radius: 6px; cursor: pointer;
353
+ font: 400 12px var(--mono); display: inline-grid; place-items: center; text-decoration: none;
354
+ transition: background .15s, color .15s;
550
355
  }
551
- .pager a:hover, .pager button:hover { color: white; border-color: var(--violet-400); }
552
- .pager button.active, .pager a.active { background: var(--violet-500); border-color: var(--violet-400); color: white; }
553
- .pager button[disabled]{ opacity: .35; cursor: not-allowed; }
356
+ .pager a:hover, .pager button:hover { color: #fff; background: var(--bg-3); }
357
+ .pager button.active, .pager a.active { background: var(--violet-500); border-color: var(--violet-500); color: #fff; }
358
+ .pager button[disabled]{ color: var(--text-dimmer); cursor: not-allowed; }
554
359
 
555
- /* old paging partial compat */
556
- .paging { display: flex; align-items: center; gap: 10px; padding: 12px 16px; color: var(--text-faint); font-size: 12.5px; border-top: 1px solid var(--line-soft); }
557
- .paging a { color: var(--violet-200); text-decoration: none; }
360
+ .paging { display: flex; align-items: center; gap: 10px; padding: 10px 16px; color: var(--text-faint); font-size: 12px; border-top: 1px solid var(--line-soft); }
361
+ .paging a { color: #c3c7e0; text-decoration: none; border: 1px solid var(--line); border-radius: 6px; padding: 4px 10px; }
362
+ .paging a:hover { background: var(--bg-3); color: #fff; }
558
363
 
559
- /* Empty / loaded states */
560
- .empty {
561
- padding: 40px 16px; text-align: center; color: var(--text-faint);
562
- font-size: 13px;
563
- }
564
- .empty-state {
565
- padding: 40px 16px; text-align: center; color: var(--text-faint);
566
- font-size: 13px;
567
- }
364
+ .empty, .empty-state { padding: 48px 16px; text-align: center; color: var(--text-faint); font-size: 13px; }
568
365
 
569
366
  /* job-info table */
367
+ .panel-body { padding: 20px 16px; }
570
368
  .job-info { width: auto; }
571
- .job-info th { text-align: left; color: var(--text-faint); padding: 8px 16px 8px 0; font-size: 12px; text-transform: uppercase; letter-spacing: .08em; width: 160px; vertical-align: top; }
572
- .job-info td { padding: 8px 0; color: var(--text); }
573
- .job-info pre { background: var(--bg-0); border: 1px solid var(--line-soft); padding: 12px; border-radius: 8px; font-size: 12px; overflow: auto; color: var(--text-dim); font-family: 'JetBrains Mono', monospace; }
369
+ .job-info th, .job-info td { padding-left: 0; }
370
+ .job-info th { text-align: left; color: var(--text-faint); padding: 8px 16px 8px 0; font: 500 13px 'Geist'; width: 140px; vertical-align: top; position: static; background: none; border: 0; letter-spacing: 0; text-transform: none; }
371
+ .job-info td { padding: 8px 0; color: var(--text); font: 400 12px var(--mono); border: 0; }
372
+ .job-info pre { background: var(--sidebar); border: 1px solid var(--line-soft); padding: 12px; border-radius: 8px; font: 400 12px/1.6 var(--mono); overflow: auto; color: var(--text-dim); white-space: pre-wrap; }
574
373
  .job-detail-meta { margin-bottom: 18px; color: var(--text-dim); font-size: 13px; }
575
374
 
576
- /* links */
577
375
  a { color: var(--violet-200); text-decoration: none; }
578
- a:hover { color: var(--violet-300); }
376
+ a:hover { color: #fff; }
579
377
 
580
- /* code inline */
581
- code { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: var(--text-dim); background: var(--bg-0); border: 1px solid var(--line-soft); padding: 2px 6px; border-radius: 5px; }
378
+ code { font: 400 12px var(--mono); color: var(--text-dim); }
582
379
 
583
380
  /* Responsive */
584
381
  @media (max-width: 1100px){
585
- .stat-strip { grid-template-columns: repeat(4,1fr); }
382
+ .stat-strip { grid-template-columns: repeat(4, minmax(0, 1fr)); }
586
383
  .stat:nth-child(n+5) { border-top: 1px solid var(--line-soft); }
587
384
  }
588
385
  @media (max-width: 800px){
589
- .app { grid-template-columns: 1fr; }
590
386
  .sidebar { display: none; }
591
- .main { padding: 18px; }
387
+ .main { padding: 0 16px 32px; }
388
+ .topbar { margin: 0 -16px 18px; padding: 12px 16px; }
592
389
  .args { max-width: 220px; }
593
390
  }
594
391
 
595
392
  /* ---------- Dashboard-only: poll slider, charts, redis ---------- */
596
- .poll-slider { -webkit-appearance: none; appearance: none; flex: 1; height: 4px; border-radius: 999px;
597
- background: linear-gradient(90deg, var(--violet-500), var(--violet-600), var(--line)); outline: 0; }
598
- .poll-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 16px; height: 16px; border-radius: 50%;
599
- background: var(--violet-300); border: 2px solid var(--bg-0); cursor: pointer; box-shadow: 0 0 12px var(--violet-400); }
600
- .poll-slider::-moz-range-thumb { width: 16px; height: 16px; border-radius: 50%;
601
- background: var(--violet-300); border: 2px solid var(--bg-0); cursor: pointer; box-shadow: 0 0 12px var(--violet-400); }
602
- .chart-wrap { position: relative; padding: 14px 16px 14px; }
603
- .chart-wrap svg { width: 100%; height: 280px; display: block; }
604
- #historyChart { height: 320px; }
605
- .chart-tooltip { display: none; position: absolute; pointer-events: none;
606
- background: rgba(11,6,20,.95); border: 1px solid var(--violet-400); border-radius: 8px;
607
- padding: 8px 10px; font-size: 12px; min-width: 130px; z-index: 5;
608
- box-shadow: 0 8px 24px rgba(0,0,0,.5); }
609
- .chart-tooltip .tip-time { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--violet-200); margin-bottom: 4px; }
393
+ .poll-slider { -webkit-appearance: none; appearance: none; flex: 1; height: 4px; border-radius: 999px; background: #1d2147; outline: 0; }
394
+ .poll-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 14px; border-radius: 50%; background: var(--violet-500); border: 2px solid var(--bg-1); cursor: pointer; }
395
+ .poll-slider::-moz-range-thumb { width: 14px; height: 14px; border-radius: 50%; background: var(--violet-500); border: 2px solid var(--bg-1); cursor: pointer; }
396
+ .chart-wrap { position: relative; padding: 14px 16px; }
397
+ .chart-wrap svg { width: 100%; height: 200px; display: block; }
398
+ .chart-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; margin-bottom: 18px; }
399
+ .chart-grid > .panel { margin-bottom: 0; min-width: 0; }
400
+ @media (max-width: 1100px) { .chart-grid { grid-template-columns: minmax(0, 1fr); } }
401
+ .chart-tooltip {
402
+ display: none; position: absolute; pointer-events: none;
403
+ background: #1b1f45; border: 1px solid #2f3566; border-radius: 6px;
404
+ padding: 6px 9px; font: 500 11px var(--mono); min-width: 130px; z-index: 5; color: #fff;
405
+ }
406
+ .chart-tooltip .tip-time { font-size: 11px; color: #8a90b5; margin-bottom: 4px; }
610
407
  .chart-tooltip .tip-row { display: flex; align-items: center; gap: 6px; color: var(--text-dim); margin: 2px 0; }
611
- .chart-tooltip .tip-row b { color: white; font-family: 'JetBrains Mono', monospace; margin-left: auto; }
612
- .legend-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
613
- .redis-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 1px; background: var(--line-soft); }
614
- .redis-card { padding: 22px 18px; background: var(--bg-1); display: flex; flex-direction: column; gap: 6px;
615
- position: relative; overflow: hidden; }
616
- .redis-card::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 2px; opacity: .9; }
617
- .redis-card[data-tone="violet"]::before { background: var(--violet-400); box-shadow: 0 0 14px var(--violet-400); }
618
- .redis-card[data-tone="cyan"]::before { background: var(--cyan); box-shadow: 0 0 14px var(--cyan); }
619
- .redis-card[data-tone="magenta"]::before { background: var(--magenta); box-shadow: 0 0 14px var(--magenta); }
620
- .redis-card[data-tone="amber"]::before { background: var(--amber); box-shadow: 0 0 14px var(--amber); }
621
- .redis-card[data-tone="red"]::before { background: var(--red); box-shadow: 0 0 14px var(--red); }
622
- .redis-num { font-size: 30px; font-weight: 600; letter-spacing: -.5px; color: white; font-family: 'JetBrains Mono', monospace; }
623
- .redis-num small { font-size: 18px; color: var(--text-dim); margin-left: 2px; }
624
- .redis-label { font-size: 12px; color: var(--text-dim); font-weight: 500; }
625
- .redis-label small { color: var(--text-faint); font-size: 11px; }
626
- .redis-foot { font-size: 11px; color: var(--text-faint); margin-top: 4px; font-family: 'JetBrains Mono', monospace; }
627
- .redis-bar { height: 4px; border-radius: 2px; background: var(--bg-0); margin-top: 8px; overflow: hidden; }
408
+ .chart-tooltip .tip-row b { color: #fff; margin-left: auto; }
409
+ .legend-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; box-shadow: none !important; }
410
+ .legend-processed { background: #7c6cf6; }
411
+ .legend-failed { background: #f2708a; }
412
+ .chart-legend { display: flex; align-items: center; gap: 14px; font-size: 12px; color: var(--text-dim); }
413
+ .chart-legend > span { display: inline-flex; align-items: center; gap: 6px; }
414
+ .redis-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 1px; background: var(--line-soft); }
415
+ .redis-card { padding: 16px; background: var(--bg-1); display: flex; flex-direction: column; gap: 6px; position: relative; }
416
+ .redis-card::before { content: none; }
417
+ .redis-num { font: 500 20px var(--mono); letter-spacing: -.02em; color: #fff; }
418
+ .redis-card[data-tone="violet"] .redis-num { color: var(--violet-200); }
419
+ .redis-card[data-tone="cyan"] .redis-num { color: var(--cyan); }
420
+ .redis-card[data-tone="magenta"] .redis-num { color: var(--lime); }
421
+ .redis-card[data-tone="amber"] .redis-num { color: var(--amber); }
422
+ .redis-card[data-tone="red"] .redis-num { color: var(--red); }
423
+ .redis-num small { font-size: 14px; color: var(--text-dim); margin-left: 2px; }
424
+ .redis-label { font: 500 11px 'Geist'; letter-spacing: .04em; color: var(--text-faint); }
425
+ .redis-label small { color: var(--text-dimmer); font-size: 11px; }
426
+ .redis-foot { font: 400 11px var(--mono); color: var(--text-dimmer); }
427
+ .redis-bar { height: 3px; border-radius: 2px; background: #1d2147; margin-top: 4px; overflow: hidden; }
628
428
  .redis-bar i { display: block; height: 100%; border-radius: 2px; }
629
- @media (max-width: 1100px){ .redis-grid { grid-template-columns: repeat(2, 1fr);} }
429
+ @media (max-width: 1100px){ .redis-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
630
430
 
631
431
  /* ---------- Flash messages ---------- */
632
432
  .flash-bar { display: flex; flex-direction: column; gap: 6px; margin: 0 0 16px; }
633
- .flash { padding: 10px 16px; border-radius: 6px; font-size: 13px; font-weight: 500;
634
- border: 1px solid; display: flex; align-items: center; gap: 8px; }
635
- .flash-notice { background: rgba(75,227,255,.08); border-color: rgba(75,227,255,.3); color: var(--cyan); }
636
- .flash-error { background: rgba(255,84,112,.08); border-color: rgba(255,84,112,.3); color: var(--red); }
433
+ .flash { padding: 10px 14px; border-radius: 8px; font-size: 13px; font-weight: 500; border: 1px solid; display: flex; align-items: center; gap: 8px; }
434
+ .flash-notice { background: #1a1944; border-color: var(--accent-line); color: #fff; }
435
+ .flash-error { background: #1a0f22; border-color: var(--red-line); color: var(--red); }