hpc-runner 0.1.1__py3-none-any.whl → 0.2.1__py3-none-any.whl
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.
- hpc_runner/_version.py +2 -2
- hpc_runner/cli/cancel.py +1 -1
- hpc_runner/cli/config.py +2 -2
- hpc_runner/cli/main.py +17 -13
- hpc_runner/cli/monitor.py +30 -0
- hpc_runner/cli/run.py +223 -67
- hpc_runner/cli/status.py +6 -5
- hpc_runner/core/__init__.py +30 -0
- hpc_runner/core/descriptors.py +87 -33
- hpc_runner/core/exceptions.py +9 -0
- hpc_runner/core/job.py +272 -93
- hpc_runner/core/job_info.py +104 -0
- hpc_runner/core/result.py +4 -0
- hpc_runner/schedulers/base.py +148 -30
- hpc_runner/schedulers/detection.py +22 -4
- hpc_runner/schedulers/local/scheduler.py +119 -2
- hpc_runner/schedulers/sge/args.py +161 -94
- hpc_runner/schedulers/sge/parser.py +106 -13
- hpc_runner/schedulers/sge/scheduler.py +727 -171
- hpc_runner/schedulers/sge/templates/batch.sh.j2 +82 -0
- hpc_runner/schedulers/sge/templates/interactive.sh.j2 +78 -0
- hpc_runner/tui/__init__.py +5 -0
- hpc_runner/tui/app.py +436 -0
- hpc_runner/tui/components/__init__.py +17 -0
- hpc_runner/tui/components/detail_panel.py +187 -0
- hpc_runner/tui/components/filter_bar.py +174 -0
- hpc_runner/tui/components/filter_popup.py +345 -0
- hpc_runner/tui/components/job_table.py +260 -0
- hpc_runner/tui/providers/__init__.py +5 -0
- hpc_runner/tui/providers/jobs.py +197 -0
- hpc_runner/tui/screens/__init__.py +7 -0
- hpc_runner/tui/screens/confirm.py +67 -0
- hpc_runner/tui/screens/job_details.py +210 -0
- hpc_runner/tui/screens/log_viewer.py +170 -0
- hpc_runner/tui/snapshot.py +153 -0
- hpc_runner/tui/styles/monitor.tcss +567 -0
- hpc_runner-0.2.1.dist-info/METADATA +285 -0
- hpc_runner-0.2.1.dist-info/RECORD +56 -0
- hpc_runner/schedulers/sge/templates/job.sh.j2 +0 -39
- hpc_runner-0.1.1.dist-info/METADATA +0 -46
- hpc_runner-0.1.1.dist-info/RECORD +0 -38
- {hpc_runner-0.1.1.dist-info → hpc_runner-0.2.1.dist-info}/WHEEL +0 -0
- {hpc_runner-0.1.1.dist-info → hpc_runner-0.2.1.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
/* HPC Monitor TUI Stylesheet
|
|
2
|
+
* Based on TEXTUAL_STYLING_COOKBOOK.md patterns
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/* Border Variables */
|
|
6
|
+
$border-style: round;
|
|
7
|
+
$border-blurred: $primary-background-lighten-3;
|
|
8
|
+
$border: $primary-lighten-3;
|
|
9
|
+
$border-disabled: $panel;
|
|
10
|
+
|
|
11
|
+
/* Scrollbar Colors */
|
|
12
|
+
$scrollbar: $primary;
|
|
13
|
+
$scrollbar-hover: $primary-lighten-3;
|
|
14
|
+
$scrollbar-active: $primary-lighten-3;
|
|
15
|
+
$scrollbar-background: $primary-muted;
|
|
16
|
+
|
|
17
|
+
/* Reset default dimming and set scrollbar defaults */
|
|
18
|
+
* {
|
|
19
|
+
scrollbar-size: 1 1;
|
|
20
|
+
scrollbar-color: $scrollbar;
|
|
21
|
+
scrollbar-background: $scrollbar-background;
|
|
22
|
+
scrollbar-color-hover: $scrollbar-hover;
|
|
23
|
+
scrollbar-color-active: $scrollbar-active;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* Header and Footer - transparent to blend with terminal */
|
|
27
|
+
Header {
|
|
28
|
+
background: transparent;
|
|
29
|
+
color: $foreground;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
HeaderTitle {
|
|
33
|
+
background: transparent;
|
|
34
|
+
color: $foreground;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* Custom footer (not using Textual's Footer widget for ANSI transparency) */
|
|
38
|
+
#footer {
|
|
39
|
+
dock: bottom;
|
|
40
|
+
height: 1;
|
|
41
|
+
background: transparent;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#footer > * {
|
|
45
|
+
background: transparent;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.footer-key {
|
|
49
|
+
color: $primary;
|
|
50
|
+
text-style: bold;
|
|
51
|
+
width: auto;
|
|
52
|
+
padding: 0 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.footer-label {
|
|
56
|
+
color: $foreground;
|
|
57
|
+
width: auto;
|
|
58
|
+
padding: 0 1;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* Base panel styling */
|
|
62
|
+
.panel {
|
|
63
|
+
background: transparent;
|
|
64
|
+
border: $border-style $border-blurred;
|
|
65
|
+
border-subtitle-background: $border-blurred;
|
|
66
|
+
opacity: 1 !important;
|
|
67
|
+
background-tint: transparent !important;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.panel:focus-within {
|
|
71
|
+
border: $border-style $border;
|
|
72
|
+
border-subtitle-background: $border;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Hide utility */
|
|
76
|
+
.hidden {
|
|
77
|
+
display: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* ============================================
|
|
81
|
+
Tabbed Content Styling
|
|
82
|
+
============================================ */
|
|
83
|
+
|
|
84
|
+
TabbedContent {
|
|
85
|
+
height: 1fr;
|
|
86
|
+
background: transparent;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Content switcher between tabs and panes */
|
|
90
|
+
ContentSwitcher {
|
|
91
|
+
background: transparent;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/* Tab bar container */
|
|
95
|
+
Tabs {
|
|
96
|
+
dock: top;
|
|
97
|
+
background: transparent;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Tab underline bar - muted when unfocused */
|
|
101
|
+
Underline > .underline--bar {
|
|
102
|
+
color: $primary-darken-2;
|
|
103
|
+
background: $background-lighten-1;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Tab underline bar - bright when focused */
|
|
107
|
+
Tabs:focus-within Underline > .underline--bar {
|
|
108
|
+
color: $primary;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
Underline:ansi > .underline--bar {
|
|
112
|
+
background: $background-lighten-1;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* Individual tab styling
|
|
116
|
+
* Note: This styles Textual's standard Tab widget.
|
|
117
|
+
* Rovr uses custom TablineTab widgets - if using custom widgets,
|
|
118
|
+
* adjust selectors accordingly.
|
|
119
|
+
*/
|
|
120
|
+
Tab {
|
|
121
|
+
padding: 0 2;
|
|
122
|
+
color: $foreground-darken-1;
|
|
123
|
+
background: transparent;
|
|
124
|
+
/* Transparency reset pattern - prevents default dimming */
|
|
125
|
+
opacity: 1 !important;
|
|
126
|
+
background-tint: transparent !important;
|
|
127
|
+
text-opacity: 1 !important;
|
|
128
|
+
tint: transparent !important;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
Tab:hover {
|
|
132
|
+
background: $boost;
|
|
133
|
+
color: $foreground;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
Tab:hover:ansi {
|
|
137
|
+
background: transparent;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
Tab:focus {
|
|
141
|
+
/* Override default focus highlight */
|
|
142
|
+
background: transparent;
|
|
143
|
+
text-style: none;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* Active tab: muted when tab bar unfocused, bright when focused */
|
|
147
|
+
Tab.-active {
|
|
148
|
+
background: $primary-darken-2;
|
|
149
|
+
color: $background;
|
|
150
|
+
text-style: bold;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* Active tab brightens when tab bar has focus */
|
|
154
|
+
Tabs:focus-within Tab.-active {
|
|
155
|
+
background: $primary;
|
|
156
|
+
color: $background;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
Tab.-active:hover,
|
|
160
|
+
Tab.-active:focus {
|
|
161
|
+
background: $primary;
|
|
162
|
+
color: $background;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/* Tab pane content areas */
|
|
166
|
+
TabPane {
|
|
167
|
+
padding: 1 1;
|
|
168
|
+
background: transparent;
|
|
169
|
+
/* Transparency reset */
|
|
170
|
+
opacity: 1 !important;
|
|
171
|
+
background-tint: transparent !important;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/* Placeholder styling for empty tab content */
|
|
175
|
+
#active-placeholder,
|
|
176
|
+
#completed-placeholder {
|
|
177
|
+
width: 100%;
|
|
178
|
+
height: 100%;
|
|
179
|
+
content-align: center middle;
|
|
180
|
+
color: $foreground-darken-2;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* ============================================
|
|
184
|
+
Job Table Styling
|
|
185
|
+
============================================ */
|
|
186
|
+
|
|
187
|
+
JobTable {
|
|
188
|
+
height: 1fr;
|
|
189
|
+
background: transparent;
|
|
190
|
+
/* Transparency reset */
|
|
191
|
+
opacity: 1 !important;
|
|
192
|
+
background-tint: transparent !important;
|
|
193
|
+
/* Match border title style with filter panels */
|
|
194
|
+
border: $border-style $border-blurred;
|
|
195
|
+
border-title-color: $primary;
|
|
196
|
+
border-title-background: transparent;
|
|
197
|
+
/* Add padding inside the border (horizontal only, vertical not possible in half-rows) */
|
|
198
|
+
padding: 0 2;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* DataTable header row */
|
|
202
|
+
JobTable > .datatable--header {
|
|
203
|
+
background: transparent;
|
|
204
|
+
color: $primary;
|
|
205
|
+
text-style: bold;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/* DataTable cells */
|
|
209
|
+
JobTable > .datatable--header-cell {
|
|
210
|
+
background: transparent;
|
|
211
|
+
color: $primary;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/* Cursor/selected row */
|
|
215
|
+
JobTable > .datatable--cursor {
|
|
216
|
+
background: $primary;
|
|
217
|
+
color: $background;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/* Hover state */
|
|
221
|
+
JobTable > .datatable--hover {
|
|
222
|
+
background: $surface;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/* Zebra striping - odd rows */
|
|
226
|
+
JobTable > .datatable--odd-row {
|
|
227
|
+
background: transparent;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* Zebra striping - even rows */
|
|
231
|
+
JobTable > .datatable--even-row {
|
|
232
|
+
background: $background-lighten-1;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/* When table has focus */
|
|
236
|
+
JobTable:focus {
|
|
237
|
+
border: $border-style $border;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* When table doesn't have focus - already handled by default */
|
|
241
|
+
|
|
242
|
+
/* Empty table message */
|
|
243
|
+
.job-table-empty {
|
|
244
|
+
width: 100%;
|
|
245
|
+
height: 100%;
|
|
246
|
+
content-align: center middle;
|
|
247
|
+
color: $foreground-darken-2;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/* ============================================
|
|
251
|
+
Filter Status Line & Popups
|
|
252
|
+
============================================ */
|
|
253
|
+
|
|
254
|
+
#active-content {
|
|
255
|
+
height: 1fr;
|
|
256
|
+
background: transparent;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* Filter status bar with bordered panels */
|
|
260
|
+
FilterStatusLine {
|
|
261
|
+
height: 3;
|
|
262
|
+
width: 100%;
|
|
263
|
+
background: transparent;
|
|
264
|
+
padding: 0 0;
|
|
265
|
+
overflow: hidden;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* Filter panels (Status, Queue) */
|
|
269
|
+
FilterPanel {
|
|
270
|
+
height: 3;
|
|
271
|
+
width: auto;
|
|
272
|
+
min-width: 14;
|
|
273
|
+
padding: 0 1;
|
|
274
|
+
margin: 0 1 0 0;
|
|
275
|
+
content-align: center middle;
|
|
276
|
+
background: transparent;
|
|
277
|
+
border: round $border-blurred;
|
|
278
|
+
border-title-color: $primary;
|
|
279
|
+
border-title-background: transparent;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
FilterPanel:focus {
|
|
283
|
+
border: round $border;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
#search-container {
|
|
287
|
+
width: 1fr;
|
|
288
|
+
height: 3;
|
|
289
|
+
margin: 0;
|
|
290
|
+
padding: 0 1;
|
|
291
|
+
background: transparent;
|
|
292
|
+
border: round $border-blurred;
|
|
293
|
+
border-title-color: $primary;
|
|
294
|
+
border-title-background: transparent;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
#search-container > Input {
|
|
298
|
+
background: transparent;
|
|
299
|
+
border: none;
|
|
300
|
+
width: 100%;
|
|
301
|
+
height: 1;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* Search box highlights when focused */
|
|
305
|
+
#search-container:focus-within {
|
|
306
|
+
border: round $border;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/* ============================================
|
|
310
|
+
Detail Panel
|
|
311
|
+
============================================ */
|
|
312
|
+
|
|
313
|
+
DetailPanel {
|
|
314
|
+
height: auto;
|
|
315
|
+
min-height: 8;
|
|
316
|
+
max-height: 12;
|
|
317
|
+
background: transparent;
|
|
318
|
+
border: round $border-blurred;
|
|
319
|
+
border-title-color: $primary;
|
|
320
|
+
border-title-background: transparent;
|
|
321
|
+
padding: 0 1;
|
|
322
|
+
margin-top: 1;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
DetailPanel:focus-within {
|
|
326
|
+
border: round $border;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
#detail-content {
|
|
330
|
+
height: auto;
|
|
331
|
+
background: transparent;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
.detail-row {
|
|
335
|
+
height: 1;
|
|
336
|
+
background: transparent;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.detail-label {
|
|
340
|
+
width: 12;
|
|
341
|
+
color: $primary;
|
|
342
|
+
background: transparent;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.detail-value {
|
|
346
|
+
width: 1fr;
|
|
347
|
+
background: transparent;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
#detail-buttons {
|
|
351
|
+
height: 3;
|
|
352
|
+
background: transparent;
|
|
353
|
+
margin-top: 1;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
#detail-buttons > Button {
|
|
357
|
+
margin-right: 1;
|
|
358
|
+
min-width: 12;
|
|
359
|
+
background: transparent;
|
|
360
|
+
border: round $border-blurred;
|
|
361
|
+
color: $foreground;
|
|
362
|
+
text-style: none;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
#detail-buttons > Button:hover {
|
|
366
|
+
background: transparent;
|
|
367
|
+
border: round $border;
|
|
368
|
+
color: $primary;
|
|
369
|
+
text-style: bold;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
#detail-buttons > Button:focus {
|
|
373
|
+
background: transparent;
|
|
374
|
+
border: round $primary;
|
|
375
|
+
color: $primary;
|
|
376
|
+
text-style: bold;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
#detail-buttons > Button.-disabled {
|
|
380
|
+
color: $foreground-darken-2;
|
|
381
|
+
border: round $border-disabled;
|
|
382
|
+
text-style: none;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/* Cancel button - error styling only on hover/focus */
|
|
386
|
+
#detail-buttons > #btn-cancel:hover {
|
|
387
|
+
border: round $error;
|
|
388
|
+
color: $error;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
#detail-buttons > #btn-cancel:focus {
|
|
392
|
+
border: round $error;
|
|
393
|
+
color: $error;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
#no-selection {
|
|
397
|
+
height: 100%;
|
|
398
|
+
width: 100%;
|
|
399
|
+
content-align: center middle;
|
|
400
|
+
color: $foreground-darken-2;
|
|
401
|
+
background: transparent;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/* ============================================
|
|
405
|
+
Confirm Modal Screen
|
|
406
|
+
============================================ */
|
|
407
|
+
|
|
408
|
+
ConfirmScreen {
|
|
409
|
+
align: center middle;
|
|
410
|
+
background: transparent;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
#confirm-dialog {
|
|
414
|
+
width: auto;
|
|
415
|
+
height: auto;
|
|
416
|
+
min-width: 30;
|
|
417
|
+
max-width: 80;
|
|
418
|
+
background: transparent;
|
|
419
|
+
border: round $primary;
|
|
420
|
+
border-title-color: $primary;
|
|
421
|
+
padding: 1 2;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
#confirm-message {
|
|
425
|
+
width: auto;
|
|
426
|
+
height: auto;
|
|
427
|
+
background: transparent;
|
|
428
|
+
text-align: left;
|
|
429
|
+
margin-bottom: 1;
|
|
430
|
+
padding: 0 1;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
#confirm-buttons {
|
|
434
|
+
width: 100%;
|
|
435
|
+
height: 3;
|
|
436
|
+
align: center middle;
|
|
437
|
+
background: transparent;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
#confirm-hint {
|
|
441
|
+
width: 100%;
|
|
442
|
+
height: 1;
|
|
443
|
+
text-align: center;
|
|
444
|
+
color: $foreground-darken-2;
|
|
445
|
+
background: transparent;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
#confirm-buttons > Button {
|
|
449
|
+
margin: 0 1;
|
|
450
|
+
min-width: 10;
|
|
451
|
+
background: transparent;
|
|
452
|
+
border: round $border-blurred;
|
|
453
|
+
color: $foreground;
|
|
454
|
+
text-style: none;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
#confirm-buttons > Button:hover {
|
|
458
|
+
background: transparent;
|
|
459
|
+
border: round $border;
|
|
460
|
+
color: $primary;
|
|
461
|
+
text-style: bold;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
#confirm-buttons > Button:focus {
|
|
465
|
+
background: transparent;
|
|
466
|
+
border: round $primary;
|
|
467
|
+
color: $primary;
|
|
468
|
+
text-style: bold;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/* Confirm button - error styling only on hover/focus (destructive action) */
|
|
472
|
+
#confirm-buttons > #btn-confirm:hover {
|
|
473
|
+
border: round $error;
|
|
474
|
+
color: $error;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
#confirm-buttons > #btn-confirm:focus {
|
|
478
|
+
border: round $error;
|
|
479
|
+
color: $error;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/* ============================================
|
|
483
|
+
Log Viewer Modal
|
|
484
|
+
============================================ */
|
|
485
|
+
|
|
486
|
+
LogViewerScreen {
|
|
487
|
+
align: center middle;
|
|
488
|
+
background: transparent;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
#log-viewer-dialog {
|
|
492
|
+
width: 90%;
|
|
493
|
+
height: 90%;
|
|
494
|
+
background: transparent;
|
|
495
|
+
border: round $primary;
|
|
496
|
+
border-title-color: $primary;
|
|
497
|
+
padding: 0 1;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
#log-viewer-path {
|
|
501
|
+
width: 100%;
|
|
502
|
+
height: 1;
|
|
503
|
+
background: transparent;
|
|
504
|
+
color: $foreground-darken-1;
|
|
505
|
+
text-style: italic;
|
|
506
|
+
padding: 0 1;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
#log-viewer-content {
|
|
510
|
+
width: 100%;
|
|
511
|
+
height: 1fr;
|
|
512
|
+
background: transparent;
|
|
513
|
+
border: none;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/* TextArea internal styling */
|
|
517
|
+
#log-viewer-content > .text-area--cursor {
|
|
518
|
+
background: $primary;
|
|
519
|
+
color: $background;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
#log-viewer-hint {
|
|
523
|
+
width: 100%;
|
|
524
|
+
height: 1;
|
|
525
|
+
text-align: center;
|
|
526
|
+
color: $foreground-darken-2;
|
|
527
|
+
background: transparent;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/* ============================================
|
|
531
|
+
Job Details Modal
|
|
532
|
+
============================================ */
|
|
533
|
+
|
|
534
|
+
JobDetailsScreen {
|
|
535
|
+
align: center middle;
|
|
536
|
+
background: transparent;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
#job-details-dialog {
|
|
540
|
+
width: 80%;
|
|
541
|
+
height: 80%;
|
|
542
|
+
background: transparent;
|
|
543
|
+
border: round $primary;
|
|
544
|
+
border-title-color: $primary;
|
|
545
|
+
padding: 0 1;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
#job-details-content {
|
|
549
|
+
width: 100%;
|
|
550
|
+
height: 1fr;
|
|
551
|
+
background: transparent;
|
|
552
|
+
border: none;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/* TextArea internal styling */
|
|
556
|
+
#job-details-content > .text-area--cursor {
|
|
557
|
+
background: $primary;
|
|
558
|
+
color: $background;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
#job-details-hint {
|
|
562
|
+
width: 100%;
|
|
563
|
+
height: 1;
|
|
564
|
+
text-align: center;
|
|
565
|
+
color: $foreground-darken-2;
|
|
566
|
+
background: transparent;
|
|
567
|
+
}
|