@exoscient/control-panel 0.1.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 (77) hide show
  1. package/README.md +14 -0
  2. package/dist/AppControlPanel.d.ts +77 -0
  3. package/dist/AppControlPanel.d.ts.map +1 -0
  4. package/dist/AppControlPanel.js +1625 -0
  5. package/dist/AppControlPanel.js.map +1 -0
  6. package/dist/ControlPanelShell.d.ts +39 -0
  7. package/dist/ControlPanelShell.d.ts.map +1 -0
  8. package/dist/ControlPanelShell.js +152 -0
  9. package/dist/ControlPanelShell.js.map +1 -0
  10. package/dist/ExoLauncherSimulator.d.ts +36 -0
  11. package/dist/ExoLauncherSimulator.d.ts.map +1 -0
  12. package/dist/ExoLauncherSimulator.js +253 -0
  13. package/dist/ExoLauncherSimulator.js.map +1 -0
  14. package/dist/TaskDetail.d.ts +180 -0
  15. package/dist/TaskDetail.d.ts.map +1 -0
  16. package/dist/TaskDetail.js +889 -0
  17. package/dist/TaskDetail.js.map +1 -0
  18. package/dist/TaskListPage.d.ts +28 -0
  19. package/dist/TaskListPage.d.ts.map +1 -0
  20. package/dist/TaskListPage.js +16 -0
  21. package/dist/TaskListPage.js.map +1 -0
  22. package/dist/TaskWorkspace.d.ts +62 -0
  23. package/dist/TaskWorkspace.d.ts.map +1 -0
  24. package/dist/TaskWorkspace.js +592 -0
  25. package/dist/TaskWorkspace.js.map +1 -0
  26. package/dist/ai-plane.d.ts +75 -0
  27. package/dist/ai-plane.d.ts.map +1 -0
  28. package/dist/ai-plane.js +124 -0
  29. package/dist/ai-plane.js.map +1 -0
  30. package/dist/browser-icons.d.ts +25 -0
  31. package/dist/browser-icons.d.ts.map +1 -0
  32. package/dist/browser-icons.js +125 -0
  33. package/dist/browser-icons.js.map +1 -0
  34. package/dist/client-actions.d.ts +45 -0
  35. package/dist/client-actions.d.ts.map +1 -0
  36. package/dist/client-actions.js +48 -0
  37. package/dist/client-actions.js.map +1 -0
  38. package/dist/control-panel-shared.d.ts +58 -0
  39. package/dist/control-panel-shared.d.ts.map +1 -0
  40. package/dist/control-panel-shared.js +79 -0
  41. package/dist/control-panel-shared.js.map +1 -0
  42. package/dist/control-panel.css +4156 -0
  43. package/dist/index.d.ts +30 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +16 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/repository-workflow.d.ts +27 -0
  48. package/dist/repository-workflow.d.ts.map +1 -0
  49. package/dist/repository-workflow.js +24 -0
  50. package/dist/repository-workflow.js.map +1 -0
  51. package/dist/result.d.ts +6 -0
  52. package/dist/result.d.ts.map +1 -0
  53. package/dist/result.js +77 -0
  54. package/dist/result.js.map +1 -0
  55. package/dist/task-consistency.d.ts +28 -0
  56. package/dist/task-consistency.d.ts.map +1 -0
  57. package/dist/task-consistency.js +25 -0
  58. package/dist/task-consistency.js.map +1 -0
  59. package/dist/task-detail.browser.js +2709 -0
  60. package/dist/task-detail.css +1601 -0
  61. package/dist/task-state.d.ts +11 -0
  62. package/dist/task-state.d.ts.map +1 -0
  63. package/dist/task-state.js +103 -0
  64. package/dist/task-state.js.map +1 -0
  65. package/dist/telemetry.d.ts +39 -0
  66. package/dist/telemetry.d.ts.map +1 -0
  67. package/dist/telemetry.js +106 -0
  68. package/dist/telemetry.js.map +1 -0
  69. package/dist/trace.d.ts +80 -0
  70. package/dist/trace.d.ts.map +1 -0
  71. package/dist/trace.js +694 -0
  72. package/dist/trace.js.map +1 -0
  73. package/dist/updates.d.ts +72 -0
  74. package/dist/updates.d.ts.map +1 -0
  75. package/dist/updates.js +269 -0
  76. package/dist/updates.js.map +1 -0
  77. package/package.json +58 -0
@@ -0,0 +1,4156 @@
1
+ :root {
2
+ --bg: #fafbfc;
3
+ --surface: #ffffff;
4
+ --surface-2: #f4f5f7;
5
+ --surface-3: #eceef1;
6
+ --border: #e6e8ec;
7
+ --border-strong: #d4d7dd;
8
+ --text: #14181f;
9
+ --text-2: #5b626c;
10
+ --text-3: #8b929c;
11
+ --accent: #2f6feb;
12
+ --accent-fg: #ffffff;
13
+ --accent-soft: #eaf0fe;
14
+ --accent-strong: #2356c7;
15
+ --success: #168a4b;
16
+ --success-soft: #e3f5ea;
17
+ --warning: #b86e00;
18
+ --warning-soft: #fdf2dd;
19
+ --danger: #c2261d;
20
+ --danger-soft: #fbe7e5;
21
+ --selected: #f0f4ff;
22
+ --shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.05);
23
+ --shadow-md: 0 4px 12px rgba(15, 23, 42, 0.08);
24
+ --shadow-modal: 0 16px 48px rgba(15, 23, 42, 0.18);
25
+ --radius: 6px;
26
+ --ring: 0 0 0 2px rgba(47, 111, 235, 0.18);
27
+ --sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
28
+ --mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
29
+ --exo-task-detail-reserved-left: 236px;
30
+ color: var(--text);
31
+ background: var(--bg);
32
+ font-family: var(--sans);
33
+ font-size: 14px;
34
+ line-height: 1.45;
35
+ -webkit-font-smoothing: antialiased;
36
+ -moz-osx-font-smoothing: grayscale;
37
+ }
38
+
39
+ body {
40
+ margin: 0;
41
+ background: var(--bg);
42
+ color: var(--text);
43
+ }
44
+
45
+ h1, h2, h3, h4 {
46
+ margin: 0;
47
+ color: var(--text);
48
+ font-weight: 600;
49
+ letter-spacing: 0;
50
+ }
51
+
52
+ h1 { font-size: 17px; }
53
+ h2 { font-size: 14px; }
54
+ h3 { font-size: 13px; }
55
+ h4 {
56
+ color: var(--text-2);
57
+ font-size: 12px;
58
+ letter-spacing: 0.06em;
59
+ text-transform: uppercase;
60
+ }
61
+
62
+ p { margin: 0; }
63
+ button { cursor: pointer; }
64
+ svg { width: 14px; height: 14px; }
65
+
66
+ .shell {
67
+ --control-panel-nav-width: 236px;
68
+ position: relative;
69
+ display: grid;
70
+ grid-template-columns: var(--control-panel-nav-width) minmax(0, 1fr);
71
+ height: 100vh;
72
+ height: 100dvh;
73
+ min-height: 0;
74
+ overflow: hidden;
75
+ }
76
+
77
+ nav {
78
+ display: flex;
79
+ flex-direction: column;
80
+ gap: 2px;
81
+ min-height: 0;
82
+ height: 100%;
83
+ box-sizing: border-box;
84
+ padding: 10px 8px;
85
+ overflow-x: hidden;
86
+ overflow-y: auto;
87
+ scrollbar-gutter: stable;
88
+ border-right: 1px solid var(--border);
89
+ background: var(--surface);
90
+ }
91
+
92
+ nav button {
93
+ gap: 8px;
94
+ height: 30px;
95
+ min-height: 30px;
96
+ margin: 0;
97
+ padding: 0 8px;
98
+ border-radius: 5px;
99
+ color: var(--text);
100
+ font-size: 13.5px;
101
+ font-weight: 400;
102
+ transition: background 0.08s ease, color 0.08s ease;
103
+ }
104
+
105
+ nav button:hover { background: var(--surface-2); }
106
+ nav button.active {
107
+ background: var(--surface-2);
108
+ color: var(--text);
109
+ font-weight: 500;
110
+ box-shadow: inset 2px 0 0 var(--accent);
111
+ }
112
+
113
+ nav button svg {
114
+ width: 15px;
115
+ height: 15px;
116
+ color: var(--text-2);
117
+ }
118
+
119
+ nav button.active svg { color: var(--text); }
120
+
121
+ .nav-custom-group {
122
+ display: grid;
123
+ gap: 2px;
124
+ }
125
+
126
+ .nav-custom-group.child-active > button {
127
+ background: var(--surface-2);
128
+ color: var(--text);
129
+ font-weight: 500;
130
+ }
131
+
132
+ .nav-subitems {
133
+ display: grid;
134
+ gap: 2px;
135
+ margin: 0 0 2px 23px;
136
+ padding-left: 9px;
137
+ border-left: 1px solid var(--border);
138
+ }
139
+
140
+ .nav-subitems button {
141
+ height: 26px;
142
+ min-height: 26px;
143
+ padding: 0 7px;
144
+ color: var(--text-2);
145
+ font-size: 12.5px;
146
+ }
147
+
148
+ .nav-subitems button.active {
149
+ color: var(--text);
150
+ }
151
+
152
+ .brand {
153
+ grid-template-columns: 26px minmax(0, 1fr);
154
+ column-gap: 10px;
155
+ row-gap: 0;
156
+ margin: 0 4px 12px;
157
+ }
158
+
159
+ .brand-logo {
160
+ width: 26px;
161
+ height: 26px;
162
+ border-radius: 5px;
163
+ object-fit: cover;
164
+ }
165
+
166
+ .brand-title {
167
+ color: var(--text);
168
+ font-size: 14px;
169
+ font-weight: 600;
170
+ letter-spacing: 0;
171
+ }
172
+
173
+ .brand-subtitle {
174
+ color: var(--text-3);
175
+ font-size: 11px;
176
+ font-weight: 500;
177
+ letter-spacing: 0.06em;
178
+ }
179
+
180
+ .nav-links {
181
+ margin-top: 14px;
182
+ padding-top: 10px;
183
+ border-top: 1px solid var(--border);
184
+ }
185
+
186
+ .nav-links p {
187
+ margin: 0 0 4px;
188
+ padding: 0 8px;
189
+ color: var(--text-3);
190
+ font-size: 11px;
191
+ font-weight: 600;
192
+ letter-spacing: 0.06em;
193
+ }
194
+
195
+ .nav-links a {
196
+ gap: 8px;
197
+ min-height: 28px;
198
+ margin: 0 0 2px;
199
+ padding: 0 8px;
200
+ border-radius: 5px;
201
+ color: var(--text);
202
+ font-size: 13px;
203
+ }
204
+
205
+ .nav-links a:hover {
206
+ background: var(--surface-2);
207
+ text-decoration: none;
208
+ }
209
+
210
+ .nav-links a .trailing-icon {
211
+ width: 12px;
212
+ height: 12px;
213
+ color: var(--text-3);
214
+ }
215
+
216
+ main {
217
+ width: 100%;
218
+ max-width: none;
219
+ min-width: 0;
220
+ min-height: 0;
221
+ height: 100%;
222
+ box-sizing: border-box;
223
+ padding: 0;
224
+ overflow: auto;
225
+ }
226
+
227
+ .main-content {
228
+ width: 100%;
229
+ max-width: 1080px;
230
+ box-sizing: border-box;
231
+ padding: 16px 20px 24px;
232
+ }
233
+
234
+ .nav-resize-handle {
235
+ position: absolute;
236
+ z-index: 20;
237
+ top: 0;
238
+ bottom: 0;
239
+ left: calc(var(--control-panel-nav-width) - 3px);
240
+ width: 6px;
241
+ cursor: col-resize;
242
+ touch-action: none;
243
+ }
244
+
245
+ .nav-resize-handle::after {
246
+ content: "";
247
+ position: absolute;
248
+ top: 0;
249
+ bottom: 0;
250
+ left: 2px;
251
+ width: 1px;
252
+ background: transparent;
253
+ transition: background 0.08s ease;
254
+ }
255
+
256
+ .nav-resize-handle:hover::after,
257
+ .nav-resize-handle:focus-visible::after {
258
+ background: var(--accent);
259
+ }
260
+
261
+ .nav-resize-handle:focus-visible {
262
+ outline: none;
263
+ box-shadow: var(--ring);
264
+ }
265
+
266
+ .page-view,
267
+ .tasks-panel,
268
+ .tasks-view {
269
+ gap: 10px;
270
+ }
271
+
272
+ .page-heading,
273
+ .page-toolbar,
274
+ .tasks-panel-title,
275
+ .repo-heading {
276
+ gap: 8px;
277
+ min-height: 30px;
278
+ margin-bottom: 0;
279
+ }
280
+
281
+ .page-title {
282
+ color: var(--text-2);
283
+ font-size: 12px;
284
+ font-weight: 600;
285
+ line-height: 30px;
286
+ letter-spacing: 0.06em;
287
+ }
288
+
289
+ .section-intro {
290
+ margin: 0 0 10px;
291
+ color: var(--text-2);
292
+ font-size: 13px;
293
+ }
294
+
295
+ .platform-banner,
296
+ .ai-creating-banner {
297
+ margin: 0 0 10px;
298
+ padding: 8px 10px;
299
+ border-radius: var(--radius);
300
+ font-size: 13px;
301
+ font-weight: 500;
302
+ }
303
+
304
+ .platform-modal-note {
305
+ color: var(--warning);
306
+ font-size: 12px;
307
+ font-weight: 500;
308
+ }
309
+
310
+ .primary,
311
+ .danger,
312
+ .secondary-button,
313
+ .filter-toggle {
314
+ height: 30px;
315
+ min-height: 30px;
316
+ padding: 0 11px;
317
+ border-radius: 5px;
318
+ font-size: 13px;
319
+ font-weight: 500;
320
+ line-height: 1;
321
+ }
322
+
323
+ .primary { margin-top: 0; }
324
+
325
+ .danger {
326
+ margin-top: 0;
327
+ border: 1px solid var(--border-strong);
328
+ color: var(--danger);
329
+ background: var(--surface);
330
+ }
331
+
332
+ .danger:hover {
333
+ border-color: var(--danger);
334
+ background: var(--danger-soft);
335
+ }
336
+
337
+ .icon-button {
338
+ width: 30px;
339
+ height: 30px;
340
+ border-radius: 5px;
341
+ }
342
+
343
+ input[type="text"],
344
+ input[type="search"],
345
+ input:not([type]),
346
+ select {
347
+ height: 30px;
348
+ padding: 0 9px;
349
+ border: 1px solid var(--border-strong);
350
+ border-radius: 5px;
351
+ background: var(--surface);
352
+ color: var(--text);
353
+ font-size: 13.5px;
354
+ }
355
+
356
+ textarea {
357
+ min-height: 84px;
358
+ padding: 8px 10px;
359
+ border-color: var(--border-strong);
360
+ border-radius: 5px;
361
+ background: var(--surface);
362
+ color: var(--text);
363
+ font-size: 13.5px;
364
+ line-height: 1.45;
365
+ }
366
+
367
+ .tasks-view {
368
+ height: calc(100vh - 32px);
369
+ height: calc(100dvh - 32px);
370
+ }
371
+
372
+ .task-row {
373
+ grid-template-columns: 16px minmax(0, 1fr);
374
+ gap: 10px;
375
+ padding: 10px 12px;
376
+ border-radius: 0;
377
+ }
378
+
379
+ .task-controls,
380
+ .task-filter-fields {
381
+ gap: 8px;
382
+ }
383
+
384
+ .task-filter-fields input,
385
+ .task-filter-fields select,
386
+ .repo-form-grid input,
387
+ .repo-form-grid select,
388
+ .repo-workflow-editor input,
389
+ .repo-workflow-editor select,
390
+ .repo-control-workflow-grid input,
391
+ .repo-control-workflow-grid select {
392
+ min-height: 30px;
393
+ border-color: var(--border-strong);
394
+ border-radius: 5px;
395
+ background: var(--surface);
396
+ color: var(--text);
397
+ }
398
+
399
+ .empty-panel {
400
+ min-height: 120px;
401
+ padding: 18px;
402
+ border: 1px dashed var(--border-strong);
403
+ border-radius: var(--radius);
404
+ }
405
+
406
+ .modal { border-radius: 8px; }
407
+ .drawer { border-radius: 0; }
408
+
409
+ .launcher-simulator-selectors select,
410
+ .launcher-field-grid input,
411
+ .launcher-field-grid select,
412
+ .launcher-event-custom input,
413
+ .launcher-event-custom textarea {
414
+ min-height: 38px;
415
+ height: auto;
416
+ border-radius: 8px;
417
+ }
418
+
419
+ .launcher-toggle-row input[type="checkbox"] {
420
+ width: 18px;
421
+ height: 18px;
422
+ }
423
+
424
+ @media (max-width: 820px) {
425
+ .shell {
426
+ grid-template-columns: 1fr;
427
+ }
428
+
429
+ nav {
430
+ position: fixed;
431
+ inset: 0 auto 0 0;
432
+ z-index: 40;
433
+ width: min(280px, 86vw);
434
+ height: 100vh;
435
+ height: 100dvh;
436
+ transform: translateX(-100%);
437
+ transition: transform 0.16s ease;
438
+ box-shadow: var(--shadow-modal);
439
+ }
440
+
441
+ nav.open {
442
+ transform: translateX(0);
443
+ }
444
+
445
+ main {
446
+ padding: 0;
447
+ }
448
+
449
+ .main-content {
450
+ padding: 12px;
451
+ }
452
+
453
+ .nav-resize-handle {
454
+ display: none;
455
+ }
456
+
457
+ .nav-menu-button,
458
+ .page-menu-button {
459
+ display: inline-flex;
460
+ }
461
+
462
+ .launcher-simulator-heading {
463
+ align-items: stretch;
464
+ }
465
+
466
+ .launcher-simulator-selectors,
467
+ .launcher-simulator-heading-actions {
468
+ width: 100%;
469
+ }
470
+
471
+ .launcher-simulator-selectors label {
472
+ flex: 1 1 140px;
473
+ }
474
+
475
+ .launcher-simulator-layout {
476
+ grid-template-columns: 1fr;
477
+ }
478
+
479
+ .launcher-simulator-stage {
480
+ padding: 14px;
481
+ }
482
+
483
+ .launcher-device-shell {
484
+ width: min(100%, 360px);
485
+ }
486
+
487
+ .launcher-field-grid,
488
+ .launcher-field-grid.compact {
489
+ grid-template-columns: 1fr;
490
+ }
491
+
492
+ .launcher-event-buttons {
493
+ grid-template-columns: 1fr;
494
+ }
495
+ }
496
+
497
+ body {
498
+ margin: 0;
499
+ background: var(--bg);
500
+ color: var(--text);
501
+ }
502
+
503
+ button, input, select, textarea {
504
+ font: inherit;
505
+ color: inherit;
506
+ }
507
+
508
+ button {
509
+ display: inline-flex;
510
+ align-items: center;
511
+ justify-content: center;
512
+ gap: 8px;
513
+ }
514
+
515
+ svg {
516
+ width: 14px;
517
+ height: 14px;
518
+ flex: 0 0 auto;
519
+ stroke-width: 2;
520
+ }
521
+
522
+ .shell {
523
+ min-height: 100vh;
524
+ min-height: 100dvh;
525
+ display: grid;
526
+ grid-template-columns: 260px 1fr;
527
+ }
528
+
529
+ nav {
530
+ border-right: 1px solid #d9e2df;
531
+ background: #fff;
532
+ padding: 20px 14px;
533
+ }
534
+
535
+ .nav-menu-button {
536
+ display: none;
537
+ }
538
+
539
+ .page-menu-button {
540
+ display: none;
541
+ }
542
+
543
+ nav button {
544
+ display: flex;
545
+ align-items: center;
546
+ gap: 10px;
547
+ width: 100%;
548
+ text-align: left;
549
+ justify-content: flex-start;
550
+ min-height: 42px;
551
+ padding: 0 12px;
552
+ margin: 0 0 6px;
553
+ border: 0;
554
+ border-radius: 8px;
555
+ background: transparent;
556
+ color: #17324d;
557
+ cursor: pointer;
558
+ }
559
+
560
+ nav button.active {
561
+ background: #e7f0ed;
562
+ font-weight: 700;
563
+ }
564
+
565
+ .nav-links {
566
+ margin-top: 22px;
567
+ padding-top: 16px;
568
+ border-top: 1px solid #d9e2df;
569
+ }
570
+
571
+ .nav-links p {
572
+ margin: 0 0 8px;
573
+ color: #60716b;
574
+ font-size: 0.78rem;
575
+ font-weight: 800;
576
+ text-transform: uppercase;
577
+ }
578
+
579
+ .nav-links a {
580
+ display: flex;
581
+ align-items: center;
582
+ gap: 10px;
583
+ min-height: 38px;
584
+ box-sizing: border-box;
585
+ padding: 9px 12px;
586
+ margin-bottom: 6px;
587
+ border-radius: 8px;
588
+ color: #17324d;
589
+ text-decoration: none;
590
+ }
591
+
592
+ .nav-links a .trailing-icon {
593
+ width: 15px;
594
+ height: 15px;
595
+ margin-left: auto;
596
+ color: #60716b;
597
+ }
598
+
599
+ .nav-links a:hover {
600
+ background: #eef4f2;
601
+ }
602
+
603
+ main {
604
+ box-sizing: border-box;
605
+ padding: 32px;
606
+ max-width: 1040px;
607
+ min-width: 0;
608
+ }
609
+
610
+ .platform-banner {
611
+ margin: 0 0 16px;
612
+ padding: 12px 14px;
613
+ border: 1px solid #f2c98d;
614
+ border-radius: 8px;
615
+ background: #fff8ec;
616
+ color: #7a4b12;
617
+ font-weight: 800;
618
+ }
619
+
620
+ .platform-modal-note {
621
+ margin: 0;
622
+ color: #7a4b12;
623
+ font-weight: 800;
624
+ }
625
+
626
+ .ai-creating-banner {
627
+ margin: 0;
628
+ padding: 12px 14px;
629
+ border: 1px solid #b9d5c6;
630
+ border-radius: 8px;
631
+ background: #f1faf5;
632
+ color: #174f38;
633
+ font-weight: 800;
634
+ }
635
+
636
+ .brand {
637
+ display: grid;
638
+ grid-template-columns: 36px minmax(0, 1fr);
639
+ gap: 2px;
640
+ column-gap: 10px;
641
+ align-items: center;
642
+ margin: 0 0 24px;
643
+ min-width: 0;
644
+ }
645
+
646
+ .brand-logo {
647
+ grid-row: 1 / span 2;
648
+ width: 36px;
649
+ height: 36px;
650
+ border-radius: 8px;
651
+ }
652
+
653
+ .brand-title {
654
+ display: block;
655
+ max-width: 100%;
656
+ overflow: hidden;
657
+ color: #17324d;
658
+ font-weight: 800;
659
+ line-height: 1.2;
660
+ white-space: nowrap;
661
+ }
662
+
663
+ .brand-title span {
664
+ display: inline-block;
665
+ min-width: max-content;
666
+ }
667
+
668
+ .brand-title.scrolling span {
669
+ animation: brand-title-scroll var(--brand-scroll-duration, 6s) ease-in-out infinite alternate;
670
+ }
671
+
672
+ .brand-subtitle {
673
+ color: #60716b;
674
+ font-size: 0.78rem;
675
+ font-weight: 800;
676
+ line-height: 1.2;
677
+ text-transform: uppercase;
678
+ }
679
+
680
+ @keyframes brand-title-scroll {
681
+ to {
682
+ transform: translateX(calc(-1 * var(--brand-scroll-distance, 0px)));
683
+ }
684
+ }
685
+
686
+ textarea {
687
+ width: 100%;
688
+ min-height: 140px;
689
+ box-sizing: border-box;
690
+ padding: 14px;
691
+ border: 1px solid #c9d5d1;
692
+ border-radius: 8px;
693
+ }
694
+
695
+ .primary {
696
+ display: inline-flex;
697
+ align-items: center;
698
+ justify-content: center;
699
+ gap: 6px;
700
+ margin-top: 12px;
701
+ height: 30px;
702
+ min-height: 30px;
703
+ padding: 0 11px;
704
+ border: 1px solid var(--accent);
705
+ border-radius: 5px;
706
+ color: var(--accent-fg);
707
+ background: var(--accent);
708
+ font-size: 13px;
709
+ font-weight: 500;
710
+ line-height: 1;
711
+ cursor: pointer;
712
+ font-family: inherit;
713
+ transition: background 0.08s ease, border-color 0.08s ease;
714
+ }
715
+
716
+ .primary:hover {
717
+ background: var(--accent-strong);
718
+ border-color: var(--accent-strong);
719
+ }
720
+
721
+ .primary:disabled {
722
+ opacity: 0.45;
723
+ cursor: not-allowed;
724
+ }
725
+
726
+ .primary svg {
727
+ width: 14px;
728
+ height: 14px;
729
+ }
730
+
731
+ .primary .working-indicator {
732
+ color: inherit;
733
+ }
734
+
735
+ .danger {
736
+ margin-top: 12px;
737
+ min-height: 44px;
738
+ padding: 0 18px;
739
+ border: 0;
740
+ border-radius: 8px;
741
+ color: white;
742
+ background: #b42318;
743
+ font-weight: 700;
744
+ cursor: pointer;
745
+ }
746
+
747
+ .danger:disabled {
748
+ background: #d8a19b;
749
+ cursor: not-allowed;
750
+ }
751
+
752
+ .danger svg,
753
+ .attachment-button svg,
754
+ .attachment-chip svg {
755
+ width: 16px;
756
+ height: 16px;
757
+ }
758
+
759
+ .tasks-panel {
760
+ display: grid;
761
+ gap: 8px;
762
+ padding: 0;
763
+ border: 0;
764
+ background: transparent;
765
+ margin-bottom: 0;
766
+ }
767
+
768
+ .tasks-view {
769
+ display: grid;
770
+ grid-template-rows: auto minmax(0, 1fr);
771
+ height: calc(100vh - 32px);
772
+ height: calc(100dvh - 32px);
773
+ min-height: 0;
774
+ gap: 10px;
775
+ }
776
+
777
+ .tasks-panel-title {
778
+ display: flex;
779
+ align-items: center;
780
+ gap: 6px;
781
+ flex-wrap: wrap;
782
+ min-height: 30px;
783
+ min-width: 0;
784
+ }
785
+
786
+ .tasks-panel-title h1 {
787
+ margin: 0;
788
+ }
789
+
790
+ .tasks-panel-title .page-title,
791
+ .page-toolbar .page-title {
792
+ margin-left: auto;
793
+ }
794
+
795
+ .page-heading {
796
+ display: flex;
797
+ align-items: center;
798
+ gap: 12px;
799
+ }
800
+
801
+ .page-heading h1 {
802
+ margin: 0;
803
+ }
804
+
805
+ .tasks-panel-title .primary {
806
+ margin-top: 0;
807
+ }
808
+
809
+ .tasks-panel-title .secondary-button {
810
+ white-space: nowrap;
811
+ }
812
+
813
+ .button-row {
814
+ display: flex;
815
+ align-items: center;
816
+ justify-content: flex-end;
817
+ gap: 10px;
818
+ flex-wrap: wrap;
819
+ }
820
+
821
+ .filter-toggle {
822
+ display: inline-flex;
823
+ align-items: center;
824
+ gap: 6px;
825
+ height: 30px;
826
+ padding: 0 11px;
827
+ border: 1px solid var(--border-strong);
828
+ border-radius: 5px;
829
+ background: var(--surface);
830
+ color: var(--text);
831
+ font-size: 13px;
832
+ font-weight: 500;
833
+ cursor: pointer;
834
+ font-family: inherit;
835
+ }
836
+
837
+ .filter-toggle.active {
838
+ border-color: var(--accent);
839
+ color: var(--accent-strong);
840
+ background: var(--accent-soft);
841
+ }
842
+
843
+ .task-controls {
844
+ display: flex;
845
+ align-items: end;
846
+ justify-content: flex-end;
847
+ gap: 8px;
848
+ flex-wrap: wrap;
849
+ }
850
+
851
+ .task-controls.open {
852
+ justify-content: space-between;
853
+ }
854
+
855
+ .task-filter-fields {
856
+ display: grid;
857
+ grid-template-columns: minmax(220px, 1fr) minmax(140px, 200px);
858
+ align-items: end;
859
+ gap: 8px;
860
+ min-width: min(100%, 420px);
861
+ flex: 1 1 420px;
862
+ }
863
+
864
+ .task-filter-fields label {
865
+ display: grid;
866
+ gap: 3px;
867
+ min-width: 0;
868
+ }
869
+
870
+ .task-filter-fields label span {
871
+ color: var(--text-3);
872
+ font-size: 11px;
873
+ font-weight: 600;
874
+ text-transform: uppercase;
875
+ letter-spacing: 0.05em;
876
+ }
877
+
878
+ .task-filter-fields input,
879
+ .task-filter-fields select {
880
+ width: 100%;
881
+ min-height: 40px;
882
+ box-sizing: border-box;
883
+ border: 1px solid #c9d5d1;
884
+ border-radius: 8px;
885
+ background: #fff;
886
+ color: #17324d;
887
+ }
888
+
889
+ .task-filter-fields input {
890
+ padding: 0 12px;
891
+ }
892
+
893
+ .task-filter-fields select {
894
+ padding: 0 36px 0 12px;
895
+ }
896
+
897
+ .task-pagination {
898
+ display: inline-flex;
899
+ align-items: center;
900
+ justify-content: flex-end;
901
+ gap: 6px;
902
+ height: 30px;
903
+ color: var(--text-3);
904
+ font-size: 12.5px;
905
+ white-space: nowrap;
906
+ font-variant-numeric: tabular-nums;
907
+ }
908
+
909
+ .task-pagination .icon-button {
910
+ width: 26px;
911
+ height: 26px;
912
+ }
913
+
914
+ .task-pagination .icon-button svg {
915
+ width: 12px;
916
+ height: 12px;
917
+ }
918
+
919
+ .muted {
920
+ color: #60716b;
921
+ }
922
+
923
+ .loading-state,
924
+ .list-loading-row {
925
+ display: flex;
926
+ align-items: center;
927
+ gap: 8px;
928
+ color: var(--text-3);
929
+ font-size: 13px;
930
+ }
931
+
932
+ .loading-state {
933
+ min-height: 96px;
934
+ justify-content: center;
935
+ background: var(--surface);
936
+ }
937
+
938
+ .list-loading-row {
939
+ position: sticky;
940
+ top: 0;
941
+ z-index: 1;
942
+ min-height: 30px;
943
+ padding: 0 12px;
944
+ background: rgba(255, 255, 255, 0.96);
945
+ border-bottom: 1px solid var(--border);
946
+ color: var(--text-3);
947
+ font-size: 12px;
948
+ }
949
+
950
+ .tasks-list {
951
+ box-sizing: border-box;
952
+ min-height: 0;
953
+ overflow-y: auto;
954
+ background: var(--surface);
955
+ border: 1px solid var(--border);
956
+ border-radius: var(--radius);
957
+ padding: 0;
958
+ scrollbar-gutter: stable;
959
+ }
960
+
961
+ .task-row {
962
+ appearance: none;
963
+ box-sizing: border-box;
964
+ width: 100%;
965
+ display: grid;
966
+ grid-template-columns: 16px minmax(0, 1fr);
967
+ align-items: start;
968
+ gap: 10px;
969
+ text-align: left;
970
+ font: inherit;
971
+ background: var(--surface);
972
+ border: 0;
973
+ border-bottom: 1px solid var(--border);
974
+ border-radius: 0;
975
+ padding: 10px 12px;
976
+ margin: 0;
977
+ color: inherit;
978
+ cursor: pointer;
979
+ transition: background 0.06s ease;
980
+ }
981
+
982
+ .task-row:last-child {
983
+ border-bottom: 0;
984
+ }
985
+
986
+ .task-row:hover {
987
+ background: var(--surface-2);
988
+ }
989
+
990
+ .task-row.selected {
991
+ background: var(--selected);
992
+ box-shadow: inset 2px 0 0 var(--accent);
993
+ }
994
+
995
+ .task-row-icon {
996
+ width: 14px;
997
+ height: 14px;
998
+ margin-top: 2px;
999
+ color: var(--text-3);
1000
+ }
1001
+
1002
+ .task-row-content {
1003
+ display: grid;
1004
+ gap: 4px;
1005
+ min-width: 0;
1006
+ }
1007
+
1008
+ .task-row-title {
1009
+ display: flex;
1010
+ align-items: baseline;
1011
+ justify-content: space-between;
1012
+ gap: 10px;
1013
+ min-width: 0;
1014
+ }
1015
+
1016
+ .task-row-title strong {
1017
+ color: var(--text);
1018
+ font-size: 13.5px;
1019
+ font-weight: 500;
1020
+ min-width: 0;
1021
+ overflow: hidden;
1022
+ text-overflow: ellipsis;
1023
+ white-space: nowrap;
1024
+ }
1025
+
1026
+ .task-row-footer {
1027
+ display: flex;
1028
+ flex-wrap: wrap;
1029
+ gap: 4px 12px;
1030
+ color: var(--text-3);
1031
+ font-size: 12px;
1032
+ line-height: 1.25;
1033
+ font-variant-numeric: tabular-nums;
1034
+ }
1035
+
1036
+ .task-row-footer time {
1037
+ font: inherit;
1038
+ }
1039
+
1040
+ .status-text {
1041
+ font-weight: 800;
1042
+ line-height: 1.2;
1043
+ }
1044
+
1045
+ .status-success {
1046
+ color: #187a3f;
1047
+ }
1048
+
1049
+ .status-active {
1050
+ color: #1f6f9f;
1051
+ }
1052
+
1053
+ .status-danger {
1054
+ color: #b42318;
1055
+ }
1056
+
1057
+ .status-muted {
1058
+ color: #60716b;
1059
+ }
1060
+
1061
+ .metric-grid {
1062
+ display: grid;
1063
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
1064
+ gap: 8px;
1065
+ margin-top: 0;
1066
+ }
1067
+
1068
+ .metric {
1069
+ background: var(--surface);
1070
+ border: 1px solid var(--border);
1071
+ border-radius: var(--radius);
1072
+ padding: 8px 10px;
1073
+ display: grid;
1074
+ grid-template-columns: max-content 1fr;
1075
+ grid-template-rows: auto auto;
1076
+ column-gap: 8px;
1077
+ row-gap: 2px;
1078
+ align-items: center;
1079
+ }
1080
+
1081
+ .metric > svg {
1082
+ width: 14px;
1083
+ height: 14px;
1084
+ color: var(--text-3);
1085
+ grid-row: 1 / span 2;
1086
+ align-self: start;
1087
+ margin-top: 2px;
1088
+ }
1089
+
1090
+ .metric > span {
1091
+ grid-column: 2;
1092
+ color: var(--text-3);
1093
+ font-size: 12px;
1094
+ letter-spacing: 0.04em;
1095
+ text-transform: uppercase;
1096
+ }
1097
+
1098
+ .metric strong {
1099
+ grid-column: 2;
1100
+ color: var(--text);
1101
+ font-size: 17px;
1102
+ font-weight: 600;
1103
+ font-variant-numeric: tabular-nums;
1104
+ letter-spacing: 0;
1105
+ line-height: 1.1;
1106
+ margin-top: 0;
1107
+ }
1108
+
1109
+ .metric small {
1110
+ grid-column: 2;
1111
+ color: var(--text-3);
1112
+ font-size: 12px;
1113
+ font-variant-numeric: tabular-nums;
1114
+ }
1115
+
1116
+ table {
1117
+ width: 100%;
1118
+ border-collapse: collapse;
1119
+ margin-top: 0;
1120
+ background: var(--surface);
1121
+ border: 1px solid var(--border);
1122
+ border-radius: var(--radius);
1123
+ color: var(--text);
1124
+ font-size: 13.5px;
1125
+ overflow: hidden;
1126
+ }
1127
+
1128
+ thead th {
1129
+ text-align: left;
1130
+ border-bottom: 1px solid var(--border);
1131
+ padding: 9px 12px;
1132
+ background: var(--surface-2);
1133
+ color: var(--text-3);
1134
+ font-size: 12px;
1135
+ font-weight: 500;
1136
+ letter-spacing: 0.04em;
1137
+ text-transform: uppercase;
1138
+ white-space: nowrap;
1139
+ }
1140
+
1141
+ tbody td {
1142
+ border-bottom: 1px solid var(--border);
1143
+ padding: 9px 12px;
1144
+ color: var(--text);
1145
+ vertical-align: middle;
1146
+ }
1147
+
1148
+ tbody tr:last-child td {
1149
+ border-bottom: 0;
1150
+ }
1151
+
1152
+ tbody tr:hover td {
1153
+ background: var(--surface-2);
1154
+ }
1155
+
1156
+ table code {
1157
+ padding: 1px 5px;
1158
+ border: 1px solid var(--border);
1159
+ border-radius: 3px;
1160
+ background: var(--surface-2);
1161
+ font-family: var(--mono);
1162
+ font-size: 12px;
1163
+ }
1164
+
1165
+ .info-panel {
1166
+ display: grid;
1167
+ gap: 18px;
1168
+ margin-top: 16px;
1169
+ padding: 18px;
1170
+ border: 1px solid #d9e2df;
1171
+ border-radius: 8px;
1172
+ background: #fff;
1173
+ }
1174
+
1175
+ .info-panel dl {
1176
+ display: grid;
1177
+ gap: 14px;
1178
+ margin: 0;
1179
+ }
1180
+
1181
+ .info-panel dt {
1182
+ color: #60716b;
1183
+ font-size: 0.78rem;
1184
+ font-weight: 800;
1185
+ text-transform: uppercase;
1186
+ }
1187
+
1188
+ .info-panel dd {
1189
+ margin: 4px 0 0;
1190
+ white-space: pre-wrap;
1191
+ overflow-wrap: anywhere;
1192
+ }
1193
+
1194
+ .info-panel .primary {
1195
+ justify-self: start;
1196
+ margin-top: 0;
1197
+ }
1198
+
1199
+ .section-intro {
1200
+ max-width: 720px;
1201
+ margin: 8px 0 18px;
1202
+ color: #60716b;
1203
+ }
1204
+
1205
+ .empty-panel {
1206
+ display: grid;
1207
+ place-items: center;
1208
+ gap: 8px;
1209
+ margin-top: 16px;
1210
+ padding: 34px 18px;
1211
+ border: 1px solid #d9e2df;
1212
+ border-radius: 8px;
1213
+ background: #fff;
1214
+ text-align: center;
1215
+ }
1216
+
1217
+ .empty-panel svg {
1218
+ width: 32px;
1219
+ height: 32px;
1220
+ color: #22577a;
1221
+ }
1222
+
1223
+ .empty-panel h2,
1224
+ .empty-panel p {
1225
+ margin: 0;
1226
+ }
1227
+
1228
+ .empty-panel p {
1229
+ max-width: 520px;
1230
+ color: #60716b;
1231
+ }
1232
+
1233
+ .outlet-grid {
1234
+ display: grid;
1235
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1236
+ gap: 14px;
1237
+ }
1238
+
1239
+ .outlet-card {
1240
+ position: relative;
1241
+ min-width: 0;
1242
+ padding: 16px;
1243
+ border: 1px solid #d9e2df;
1244
+ border-radius: 8px;
1245
+ background: #fff;
1246
+ transition: border-color 140ms ease, box-shadow 140ms ease, transform 140ms ease;
1247
+ }
1248
+
1249
+ .outlet-card.clickable {
1250
+ cursor: pointer;
1251
+ }
1252
+
1253
+ .outlet-card.clickable:hover,
1254
+ .outlet-card.clickable:focus-within {
1255
+ border-color: #9fb5ad;
1256
+ box-shadow: 0 12px 30px rgba(23, 50, 77, 0.12);
1257
+ transform: translateY(-1px);
1258
+ outline: none;
1259
+ }
1260
+
1261
+ .outlet-card-hit-area {
1262
+ position: absolute;
1263
+ inset: 0;
1264
+ z-index: 1;
1265
+ border-radius: 8px;
1266
+ }
1267
+
1268
+ .outlet-card-main {
1269
+ position: relative;
1270
+ z-index: 2;
1271
+ display: grid;
1272
+ grid-template-columns: minmax(0, 1fr) auto;
1273
+ align-items: start;
1274
+ gap: 16px;
1275
+ pointer-events: none;
1276
+ }
1277
+
1278
+ .outlet-title {
1279
+ display: flex;
1280
+ align-items: flex-start;
1281
+ min-width: 0;
1282
+ gap: 10px;
1283
+ }
1284
+
1285
+ .outlet-title > svg {
1286
+ width: 22px;
1287
+ height: 22px;
1288
+ margin-top: 1px;
1289
+ color: #22577a;
1290
+ }
1291
+
1292
+ .outlet-title > div {
1293
+ min-width: 0;
1294
+ }
1295
+
1296
+ .outlet-card h2 {
1297
+ margin: 0 0 6px;
1298
+ font-size: 1.1rem;
1299
+ }
1300
+
1301
+ .outlet-breadcrumbs {
1302
+ display: flex;
1303
+ flex-wrap: wrap;
1304
+ gap: 4px;
1305
+ align-items: center;
1306
+ color: #60716b;
1307
+ font-size: 0.84rem;
1308
+ font-weight: 700;
1309
+ }
1310
+
1311
+ .outlet-breadcrumbs span {
1312
+ display: inline-flex;
1313
+ align-items: center;
1314
+ }
1315
+
1316
+ .outlet-breadcrumbs span + span::before {
1317
+ content: "/";
1318
+ margin-right: 4px;
1319
+ color: #91a09b;
1320
+ }
1321
+
1322
+ .outlet-detail {
1323
+ display: grid;
1324
+ gap: 16px;
1325
+ min-width: 0;
1326
+ }
1327
+
1328
+ .outlet-qr {
1329
+ display: flex;
1330
+ align-items: center;
1331
+ justify-content: center;
1332
+ width: 126px;
1333
+ padding: 8px;
1334
+ border: 1px solid #d9e2df;
1335
+ border-radius: 8px;
1336
+ background: #fff;
1337
+ }
1338
+
1339
+ .outlet-qr img {
1340
+ width: 108px;
1341
+ aspect-ratio: 1;
1342
+ display: block;
1343
+ }
1344
+
1345
+ .outlet-actions {
1346
+ display: flex;
1347
+ flex-wrap: wrap;
1348
+ gap: 8px;
1349
+ pointer-events: auto;
1350
+ }
1351
+
1352
+ .launcher-simulator {
1353
+ display: grid;
1354
+ gap: 16px;
1355
+ }
1356
+
1357
+ .launcher-simulator-heading {
1358
+ display: flex;
1359
+ align-items: center;
1360
+ justify-content: space-between;
1361
+ gap: 14px;
1362
+ flex-wrap: wrap;
1363
+ }
1364
+
1365
+ .launcher-simulator-selectors,
1366
+ .launcher-simulator-heading-actions {
1367
+ display: flex;
1368
+ align-items: center;
1369
+ gap: 10px;
1370
+ flex-wrap: wrap;
1371
+ }
1372
+
1373
+ .launcher-simulator-selectors label {
1374
+ display: grid;
1375
+ gap: 5px;
1376
+ }
1377
+
1378
+ .launcher-simulator-selectors span,
1379
+ .launcher-field-grid span,
1380
+ .launcher-event-custom span {
1381
+ color: #60716b;
1382
+ font-size: 0.73rem;
1383
+ font-weight: 800;
1384
+ text-transform: uppercase;
1385
+ }
1386
+
1387
+ .launcher-simulator-selectors select,
1388
+ .launcher-field-grid input,
1389
+ .launcher-field-grid select,
1390
+ .launcher-event-custom input,
1391
+ .launcher-event-custom textarea {
1392
+ min-height: 38px;
1393
+ box-sizing: border-box;
1394
+ padding: 0 10px;
1395
+ border: 1px solid #c9d5d1;
1396
+ border-radius: 8px;
1397
+ background: #fff;
1398
+ color: #17324d;
1399
+ font: inherit;
1400
+ }
1401
+
1402
+ .launcher-event-custom textarea {
1403
+ min-height: 84px;
1404
+ padding: 9px 10px;
1405
+ resize: vertical;
1406
+ }
1407
+
1408
+ .launcher-simulator-layout {
1409
+ display: grid;
1410
+ grid-template-columns: minmax(280px, 1fr) minmax(320px, 420px);
1411
+ gap: 16px;
1412
+ align-items: start;
1413
+ }
1414
+
1415
+ .launcher-simulator-stage {
1416
+ min-width: 0;
1417
+ display: grid;
1418
+ justify-items: center;
1419
+ padding: 22px;
1420
+ border: 1px solid #d9e2df;
1421
+ border-radius: 8px;
1422
+ background:
1423
+ linear-gradient(135deg, rgba(34, 87, 122, 0.08), transparent 34%),
1424
+ linear-gradient(315deg, rgba(47, 133, 90, 0.10), transparent 38%),
1425
+ #eef4f2;
1426
+ }
1427
+
1428
+ .launcher-device-shell {
1429
+ width: min(100%, 390px);
1430
+ min-width: 260px;
1431
+ aspect-ratio: 9 / 18.5;
1432
+ display: grid;
1433
+ grid-template-rows: 42px minmax(0, 1fr);
1434
+ overflow: hidden;
1435
+ border: 12px solid #15232f;
1436
+ border-radius: 34px;
1437
+ background: #15232f;
1438
+ box-shadow: 0 22px 54px rgba(23, 50, 77, 0.24);
1439
+ }
1440
+
1441
+ .launcher-device-status {
1442
+ display: grid;
1443
+ grid-template-columns: 1fr auto 1fr;
1444
+ align-items: center;
1445
+ gap: 8px;
1446
+ min-width: 0;
1447
+ padding: 0 14px;
1448
+ background: #15232f;
1449
+ color: #dce7e3;
1450
+ font-size: 0.72rem;
1451
+ text-transform: uppercase;
1452
+ }
1453
+
1454
+ .launcher-device-status strong {
1455
+ min-width: 0;
1456
+ overflow: hidden;
1457
+ color: #fff;
1458
+ font-size: 0.78rem;
1459
+ text-overflow: ellipsis;
1460
+ text-transform: none;
1461
+ white-space: nowrap;
1462
+ }
1463
+
1464
+ .launcher-device-status span:last-child {
1465
+ text-align: right;
1466
+ }
1467
+
1468
+ .launcher-device-shell iframe {
1469
+ width: 100%;
1470
+ height: 100%;
1471
+ border: 0;
1472
+ background: #fff;
1473
+ }
1474
+
1475
+ .launcher-simulator-tools {
1476
+ display: grid;
1477
+ gap: 12px;
1478
+ min-width: 0;
1479
+ }
1480
+
1481
+ .launcher-simulator-panel {
1482
+ display: grid;
1483
+ gap: 12px;
1484
+ min-width: 0;
1485
+ padding: 14px;
1486
+ border: 1px solid #d9e2df;
1487
+ border-radius: 8px;
1488
+ background: #fff;
1489
+ }
1490
+
1491
+ .panel-title-row {
1492
+ display: flex;
1493
+ align-items: center;
1494
+ gap: 8px;
1495
+ min-width: 0;
1496
+ }
1497
+
1498
+ .panel-title-row h2 {
1499
+ margin: 0;
1500
+ font-size: 1rem;
1501
+ }
1502
+
1503
+ .panel-title-row > svg {
1504
+ width: 18px;
1505
+ height: 18px;
1506
+ color: #22577a;
1507
+ }
1508
+
1509
+ .panel-title-row .icon-button,
1510
+ .panel-title-row .icon-file-button {
1511
+ margin-left: auto;
1512
+ }
1513
+
1514
+ .launcher-field-grid {
1515
+ display: grid;
1516
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1517
+ gap: 10px;
1518
+ }
1519
+
1520
+ .launcher-field-grid.compact {
1521
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1522
+ }
1523
+
1524
+ .launcher-field-grid label,
1525
+ .launcher-event-custom label {
1526
+ display: grid;
1527
+ gap: 5px;
1528
+ min-width: 0;
1529
+ }
1530
+
1531
+ .launcher-toggle-row {
1532
+ display: grid;
1533
+ gap: 8px;
1534
+ }
1535
+
1536
+ .launcher-toggle-row label {
1537
+ display: flex;
1538
+ align-items: center;
1539
+ gap: 9px;
1540
+ color: #17324d;
1541
+ font-weight: 700;
1542
+ }
1543
+
1544
+ .launcher-toggle-row input {
1545
+ width: 18px;
1546
+ height: 18px;
1547
+ }
1548
+
1549
+ .launcher-capability-list {
1550
+ display: flex;
1551
+ flex-wrap: wrap;
1552
+ gap: 6px;
1553
+ }
1554
+
1555
+ .launcher-capability-list span {
1556
+ display: inline-flex;
1557
+ align-items: center;
1558
+ min-height: 24px;
1559
+ padding: 2px 8px;
1560
+ border: 1px solid #d1ddd9;
1561
+ border-radius: 999px;
1562
+ background: #eef4f2;
1563
+ color: #40534d;
1564
+ font-size: 0.75rem;
1565
+ font-weight: 800;
1566
+ }
1567
+
1568
+ .icon-file-button {
1569
+ position: relative;
1570
+ display: inline-flex;
1571
+ align-items: center;
1572
+ justify-content: center;
1573
+ gap: 7px;
1574
+ min-height: 32px;
1575
+ padding: 0 10px;
1576
+ overflow: hidden;
1577
+ border: 1px solid #c9d5d1;
1578
+ border-radius: 8px;
1579
+ background: #fff;
1580
+ color: #17324d;
1581
+ cursor: pointer;
1582
+ font-size: 0.85rem;
1583
+ font-weight: 800;
1584
+ }
1585
+
1586
+ .icon-file-button svg {
1587
+ width: 15px;
1588
+ height: 15px;
1589
+ }
1590
+
1591
+ .icon-file-button input {
1592
+ position: absolute;
1593
+ inset: 0;
1594
+ opacity: 0;
1595
+ cursor: pointer;
1596
+ }
1597
+
1598
+ .launcher-photo-preview {
1599
+ display: grid;
1600
+ grid-template-columns: 82px minmax(0, 1fr);
1601
+ gap: 12px;
1602
+ align-items: center;
1603
+ }
1604
+
1605
+ .launcher-photo-preview img {
1606
+ width: 82px;
1607
+ height: 82px;
1608
+ object-fit: cover;
1609
+ border: 1px solid #d9e2df;
1610
+ border-radius: 8px;
1611
+ background: #eef4f2;
1612
+ }
1613
+
1614
+ .launcher-photo-preview dl {
1615
+ display: grid;
1616
+ gap: 6px;
1617
+ min-width: 0;
1618
+ margin: 0;
1619
+ }
1620
+
1621
+ .launcher-photo-preview div {
1622
+ min-width: 0;
1623
+ }
1624
+
1625
+ .launcher-photo-preview dt {
1626
+ color: #60716b;
1627
+ font-size: 0.72rem;
1628
+ font-weight: 800;
1629
+ text-transform: uppercase;
1630
+ }
1631
+
1632
+ .launcher-photo-preview dd {
1633
+ min-width: 0;
1634
+ margin: 1px 0 0;
1635
+ overflow: hidden;
1636
+ color: #17324d;
1637
+ font-size: 0.84rem;
1638
+ font-weight: 700;
1639
+ text-overflow: ellipsis;
1640
+ white-space: nowrap;
1641
+ }
1642
+
1643
+ .launcher-event-buttons {
1644
+ display: grid;
1645
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1646
+ gap: 8px;
1647
+ }
1648
+
1649
+ .launcher-event-custom {
1650
+ display: grid;
1651
+ gap: 10px;
1652
+ }
1653
+
1654
+ .launcher-event-custom .primary-button {
1655
+ justify-self: start;
1656
+ }
1657
+
1658
+ .launcher-log-empty {
1659
+ display: grid;
1660
+ place-items: center;
1661
+ min-height: 72px;
1662
+ border: 1px dashed #c9d5d1;
1663
+ border-radius: 8px;
1664
+ color: #60716b;
1665
+ font-weight: 700;
1666
+ }
1667
+
1668
+ .launcher-log-list {
1669
+ display: grid;
1670
+ gap: 8px;
1671
+ max-height: 360px;
1672
+ overflow: auto;
1673
+ }
1674
+
1675
+ .launcher-log-entry {
1676
+ display: grid;
1677
+ grid-template-columns: minmax(0, 1fr) auto;
1678
+ gap: 8px;
1679
+ padding: 10px;
1680
+ border: 1px solid #d9e2df;
1681
+ border-radius: 8px;
1682
+ background: #f7faf9;
1683
+ }
1684
+
1685
+ .launcher-log-entry.event {
1686
+ background: #f6f8fb;
1687
+ }
1688
+
1689
+ .launcher-log-entry > div {
1690
+ display: grid;
1691
+ gap: 3px;
1692
+ min-width: 0;
1693
+ }
1694
+
1695
+ .launcher-log-entry strong {
1696
+ min-width: 0;
1697
+ overflow: hidden;
1698
+ text-overflow: ellipsis;
1699
+ white-space: nowrap;
1700
+ }
1701
+
1702
+ .launcher-log-entry div span {
1703
+ color: #60716b;
1704
+ font-size: 0.75rem;
1705
+ font-weight: 700;
1706
+ }
1707
+
1708
+ .launcher-log-entry pre {
1709
+ grid-column: 1 / -1;
1710
+ max-height: 140px;
1711
+ margin: 0;
1712
+ overflow: auto;
1713
+ color: #40534d;
1714
+ font-size: 0.74rem;
1715
+ white-space: pre-wrap;
1716
+ word-break: break-word;
1717
+ }
1718
+
1719
+ .access-login {
1720
+ min-height: 100vh;
1721
+ display: grid;
1722
+ place-items: center;
1723
+ padding: 24px;
1724
+ background: #f4f7f6;
1725
+ }
1726
+
1727
+ .access-login-card {
1728
+ width: min(100%, 420px);
1729
+ display: grid;
1730
+ gap: 16px;
1731
+ padding: 28px;
1732
+ border: 1px solid #d8e1de;
1733
+ border-radius: 8px;
1734
+ background: #fff;
1735
+ }
1736
+
1737
+ .access-login-card h1 {
1738
+ margin: 0;
1739
+ font-size: 1.7rem;
1740
+ }
1741
+
1742
+ .access-login-card p {
1743
+ margin: 0;
1744
+ color: #5b6b78;
1745
+ }
1746
+
1747
+ .access-login-card label {
1748
+ display: grid;
1749
+ gap: 6px;
1750
+ font-weight: 700;
1751
+ }
1752
+
1753
+ .access-login-card input {
1754
+ min-height: 42px;
1755
+ border: 1px solid #c9d5d1;
1756
+ border-radius: 8px;
1757
+ padding: 0 12px;
1758
+ font: inherit;
1759
+ }
1760
+
1761
+ .access-login-card .form-error {
1762
+ color: #b42318;
1763
+ }
1764
+
1765
+ .access-login-card .link-button {
1766
+ border: 0;
1767
+ background: transparent;
1768
+ color: #22577a;
1769
+ cursor: pointer;
1770
+ }
1771
+
1772
+ .install-link-row {
1773
+ display: flex;
1774
+ align-items: center;
1775
+ justify-content: flex-start;
1776
+ gap: 8px;
1777
+ min-width: 0;
1778
+ max-width: 100%;
1779
+ padding: 7px 8px;
1780
+ border: 1px solid #d9e2df;
1781
+ border-radius: 8px;
1782
+ background: #f7faf9;
1783
+ }
1784
+
1785
+ .install-link-text {
1786
+ min-width: 0;
1787
+ overflow: hidden;
1788
+ color: #17324d;
1789
+ font-size: 0.76rem;
1790
+ text-overflow: ellipsis;
1791
+ white-space: nowrap;
1792
+ text-decoration: none;
1793
+ }
1794
+
1795
+ .icon-button {
1796
+ display: inline-flex;
1797
+ align-items: center;
1798
+ justify-content: center;
1799
+ flex: 0 0 auto;
1800
+ width: 30px;
1801
+ min-height: 30px;
1802
+ padding: 0;
1803
+ border: 1px solid #c9d5d1;
1804
+ border-radius: 8px;
1805
+ background: #fff;
1806
+ color: #17324d;
1807
+ cursor: pointer;
1808
+ pointer-events: auto;
1809
+ }
1810
+
1811
+ .icon-button svg {
1812
+ width: 16px;
1813
+ height: 16px;
1814
+ }
1815
+
1816
+ .secondary-button,
1817
+ .secondary-link-button {
1818
+ display: inline-flex;
1819
+ align-items: center;
1820
+ justify-content: center;
1821
+ gap: 8px;
1822
+ min-height: 38px;
1823
+ box-sizing: border-box;
1824
+ padding: 0 12px;
1825
+ border: 1px solid #c9d5d1;
1826
+ border-radius: 8px;
1827
+ background: #fff;
1828
+ color: #17324d;
1829
+ font-weight: 800;
1830
+ text-decoration: none;
1831
+ cursor: pointer;
1832
+ }
1833
+
1834
+ .status-pill {
1835
+ display: inline-flex;
1836
+ align-items: center;
1837
+ gap: 7px;
1838
+ font-weight: 700;
1839
+ }
1840
+
1841
+ .status-pill svg {
1842
+ width: 16px;
1843
+ height: 16px;
1844
+ }
1845
+
1846
+ .status-pill.created {
1847
+ color: #28724f;
1848
+ }
1849
+
1850
+ .status-pill.missing {
1851
+ color: #697873;
1852
+ }
1853
+
1854
+ .status-pill.pending {
1855
+ color: #8a5a00;
1856
+ }
1857
+
1858
+ .repo-heading {
1859
+ display: flex;
1860
+ align-items: center;
1861
+ justify-content: space-between;
1862
+ gap: 12px;
1863
+ }
1864
+
1865
+ .repo-view {
1866
+ display: grid;
1867
+ gap: 16px;
1868
+ }
1869
+
1870
+ .repo-heading-actions,
1871
+ .repo-form-actions {
1872
+ display: flex;
1873
+ flex-wrap: wrap;
1874
+ gap: 10px;
1875
+ justify-content: flex-end;
1876
+ }
1877
+
1878
+ .repo-panel {
1879
+ display: grid;
1880
+ gap: 14px;
1881
+ padding: 18px;
1882
+ border: 1px solid #d9e2df;
1883
+ border-radius: 8px;
1884
+ background: #fff;
1885
+ }
1886
+
1887
+ .repo-attach-panel {
1888
+ margin-bottom: 16px;
1889
+ }
1890
+
1891
+ .repo-panel h2,
1892
+ .repo-panel h3 {
1893
+ margin: 0;
1894
+ }
1895
+
1896
+ .repo-form-grid {
1897
+ display: grid;
1898
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1899
+ gap: 12px;
1900
+ }
1901
+
1902
+ .repo-form-grid label {
1903
+ display: grid;
1904
+ gap: 6px;
1905
+ }
1906
+
1907
+ .repo-form-grid label span {
1908
+ color: #60716b;
1909
+ font-size: 0.78rem;
1910
+ font-weight: 800;
1911
+ text-transform: uppercase;
1912
+ }
1913
+
1914
+ .repo-form-grid input,
1915
+ .repo-form-grid select,
1916
+ .repo-workflow-editor input,
1917
+ .repo-workflow-editor select {
1918
+ width: 100%;
1919
+ min-width: 0;
1920
+ border: 1px solid #ccd9d4;
1921
+ border-radius: 8px;
1922
+ padding: 10px 11px;
1923
+ background: #fff;
1924
+ color: #18231f;
1925
+ }
1926
+
1927
+ .repo-workflow-editor {
1928
+ display: grid;
1929
+ grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
1930
+ gap: 12px;
1931
+ align-items: end;
1932
+ padding: 12px;
1933
+ border: 1px solid #d9e2df;
1934
+ border-radius: 8px;
1935
+ background: #f7faf9;
1936
+ }
1937
+
1938
+ .repo-warning {
1939
+ margin: 0 0 12px;
1940
+ padding: 10px 12px;
1941
+ border: 1px solid #f0c36d;
1942
+ border-radius: 8px;
1943
+ background: #fff7df;
1944
+ color: #704f00;
1945
+ font-weight: 700;
1946
+ }
1947
+
1948
+ .repo-control-workflow-grid {
1949
+ display: grid;
1950
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
1951
+ gap: 10px;
1952
+ align-items: end;
1953
+ margin: 12px 0;
1954
+ }
1955
+
1956
+ .repo-control-workflow-grid label {
1957
+ display: grid;
1958
+ gap: 4px;
1959
+ min-width: 0;
1960
+ }
1961
+
1962
+ .repo-control-workflow-grid label > span:first-child {
1963
+ font-size: 11px;
1964
+ font-weight: 800;
1965
+ text-transform: uppercase;
1966
+ color: #60716b;
1967
+ }
1968
+
1969
+ .repo-control-workflow-grid input,
1970
+ .repo-control-workflow-grid select {
1971
+ width: 100%;
1972
+ min-height: 36px;
1973
+ border: 1px solid #ccd9d4;
1974
+ border-radius: 8px;
1975
+ padding: 7px 9px;
1976
+ background: #fff;
1977
+ color: #18231f;
1978
+ }
1979
+
1980
+ .repo-control-workflow-state {
1981
+ min-height: 36px;
1982
+ display: grid;
1983
+ place-items: center;
1984
+ color: #60716b;
1985
+ }
1986
+
1987
+ .repo-dirty {
1988
+ margin: 0 0 12px;
1989
+ padding: 10px 12px;
1990
+ border: 1px solid #f1b4ad;
1991
+ border-radius: 8px;
1992
+ background: #fff2f0;
1993
+ }
1994
+
1995
+ .repo-dirty summary {
1996
+ color: #8f1d14;
1997
+ cursor: pointer;
1998
+ font-weight: 800;
1999
+ }
2000
+
2001
+ .repo-dirty ul,
2002
+ .repo-reset-summary ul {
2003
+ margin: 8px 0 0;
2004
+ padding-left: 18px;
2005
+ }
2006
+
2007
+ .repo-dirty li,
2008
+ .repo-reset-summary li {
2009
+ overflow-wrap: anywhere;
2010
+ }
2011
+
2012
+ .repo-dirty p {
2013
+ margin: 8px 0 0;
2014
+ color: #704f00;
2015
+ font-weight: 700;
2016
+ }
2017
+
2018
+ .repo-active-task {
2019
+ display: flex;
2020
+ flex-wrap: wrap;
2021
+ gap: 8px 12px;
2022
+ align-items: center;
2023
+ margin: 0 0 12px;
2024
+ padding: 10px 12px;
2025
+ border: 1px solid #d9e2df;
2026
+ border-radius: 8px;
2027
+ background: #f7faf9;
2028
+ color: #33443e;
2029
+ font-weight: 700;
2030
+ }
2031
+
2032
+ .repo-active-task a {
2033
+ color: #235c4a;
2034
+ font-weight: 800;
2035
+ }
2036
+
2037
+ .secondary-button.danger {
2038
+ margin-top: 0;
2039
+ border-color: #f1b4ad;
2040
+ color: #b42318;
2041
+ background: #fff;
2042
+ }
2043
+
2044
+ .repo-workflow-editor label {
2045
+ display: grid;
2046
+ gap: 6px;
2047
+ }
2048
+
2049
+ .repo-workflow-field {
2050
+ display: grid;
2051
+ gap: 6px;
2052
+ min-width: 0;
2053
+ }
2054
+
2055
+ .repo-workflow-field strong {
2056
+ min-height: 42px;
2057
+ display: flex;
2058
+ align-items: center;
2059
+ overflow-wrap: anywhere;
2060
+ }
2061
+
2062
+ .repo-workflow-editor label span,
2063
+ .repo-workflow-field span {
2064
+ color: #60716b;
2065
+ font-size: 0.78rem;
2066
+ font-weight: 800;
2067
+ text-transform: uppercase;
2068
+ }
2069
+
2070
+ .repo-key-box {
2071
+ display: grid;
2072
+ gap: 8px;
2073
+ border: 1px solid #d9e2df;
2074
+ border-radius: 8px;
2075
+ padding: 12px;
2076
+ background: #f7faf9;
2077
+ }
2078
+
2079
+ .repo-key-box p {
2080
+ margin: 0;
2081
+ color: #60716b;
2082
+ font-weight: 700;
2083
+ }
2084
+
2085
+ .repo-key-box pre {
2086
+ margin: 0;
2087
+ overflow-x: auto;
2088
+ white-space: pre-wrap;
2089
+ word-break: break-word;
2090
+ }
2091
+
2092
+ .repo-meta {
2093
+ display: grid;
2094
+ gap: 10px;
2095
+ margin: 0;
2096
+ }
2097
+
2098
+ .repo-meta div {
2099
+ display: grid;
2100
+ grid-template-columns: 120px minmax(0, 1fr);
2101
+ gap: 12px;
2102
+ align-items: start;
2103
+ }
2104
+
2105
+ .repo-meta dt {
2106
+ color: #60716b;
2107
+ font-weight: 800;
2108
+ }
2109
+
2110
+ .repo-meta dd {
2111
+ min-width: 0;
2112
+ margin: 0;
2113
+ overflow-wrap: anywhere;
2114
+ }
2115
+
2116
+ .repo-inline-control {
2117
+ display: inline-flex;
2118
+ max-width: 100%;
2119
+ align-items: center;
2120
+ gap: 12px;
2121
+ }
2122
+
2123
+ .repo-inline-control > span {
2124
+ min-width: 0;
2125
+ overflow-wrap: anywhere;
2126
+ }
2127
+
2128
+ .repo-inline-control .icon-button {
2129
+ width: 30px;
2130
+ height: 30px;
2131
+ flex: 0 0 auto;
2132
+ }
2133
+
2134
+ .repo-inline-menu {
2135
+ position: relative;
2136
+ }
2137
+
2138
+ .repo-inline-menu summary {
2139
+ list-style: none;
2140
+ }
2141
+
2142
+ .repo-inline-menu summary[aria-disabled="true"] {
2143
+ opacity: 0.45;
2144
+ pointer-events: none;
2145
+ }
2146
+
2147
+ .repo-inline-menu summary::-webkit-details-marker {
2148
+ display: none;
2149
+ }
2150
+
2151
+ .repo-inline-menu-panel {
2152
+ position: absolute;
2153
+ right: 0;
2154
+ z-index: 4;
2155
+ display: grid;
2156
+ width: min(260px, 80vw);
2157
+ gap: 8px;
2158
+ margin-top: 6px;
2159
+ padding: 10px;
2160
+ border: 1px solid #d9e2df;
2161
+ border-radius: 8px;
2162
+ background: #fff;
2163
+ box-shadow: 0 14px 32px rgba(24, 35, 31, 0.16);
2164
+ }
2165
+
2166
+ .repo-inline-menu-panel select {
2167
+ width: 100%;
2168
+ min-width: 0;
2169
+ border: 1px solid #ccd9d4;
2170
+ border-radius: 8px;
2171
+ padding: 10px 11px;
2172
+ background: #fff;
2173
+ color: #18231f;
2174
+ }
2175
+
2176
+ .repo-inline-menu-panel .form-error {
2177
+ margin: 0;
2178
+ }
2179
+
2180
+ .deployment-notes {
2181
+ margin: 0;
2182
+ padding-left: 20px;
2183
+ color: #60716b;
2184
+ }
2185
+
2186
+ .repo-section-title {
2187
+ display: flex;
2188
+ align-items: center;
2189
+ justify-content: space-between;
2190
+ gap: 12px;
2191
+ }
2192
+
2193
+ .repo-submodule-list {
2194
+ display: grid;
2195
+ gap: 10px;
2196
+ }
2197
+
2198
+ .repo-submodule {
2199
+ display: grid;
2200
+ grid-template-columns: minmax(0, 1fr) auto;
2201
+ gap: 12px;
2202
+ align-items: start;
2203
+ padding: 12px;
2204
+ border: 1px solid #d9e2df;
2205
+ border-radius: 8px;
2206
+ background: #f7faf9;
2207
+ }
2208
+
2209
+ .repo-submodule p {
2210
+ margin: 5px 0 0;
2211
+ overflow-wrap: anywhere;
2212
+ }
2213
+
2214
+ .repo-submodule-meta {
2215
+ display: flex;
2216
+ flex-wrap: wrap;
2217
+ gap: 8px;
2218
+ margin-top: 8px;
2219
+ color: #60716b;
2220
+ font-size: 0.84rem;
2221
+ font-weight: 700;
2222
+ }
2223
+
2224
+ .repo-error {
2225
+ border: 1px solid #f2c98d;
2226
+ border-radius: 8px;
2227
+ background: #fff8ec;
2228
+ }
2229
+
2230
+ .repo-error summary {
2231
+ padding: 10px 12px;
2232
+ color: #7a4b12;
2233
+ cursor: pointer;
2234
+ font-weight: 800;
2235
+ }
2236
+
2237
+ .repo-error pre {
2238
+ max-height: 260px;
2239
+ margin: 0;
2240
+ overflow: auto;
2241
+ padding: 0 12px 12px;
2242
+ white-space: pre-wrap;
2243
+ }
2244
+
2245
+ .overlay {
2246
+ position: fixed;
2247
+ inset: 0;
2248
+ background: rgba(23, 50, 77, 0.18);
2249
+ opacity: 0;
2250
+ pointer-events: none;
2251
+ transition: opacity 180ms ease;
2252
+ z-index: 10;
2253
+ }
2254
+
2255
+ .overlay.open {
2256
+ opacity: 1;
2257
+ pointer-events: none;
2258
+ }
2259
+
2260
+ .drawer {
2261
+ position: fixed;
2262
+ top: 0;
2263
+ right: 0;
2264
+ height: 100vh;
2265
+ height: 100dvh;
2266
+ max-height: 100dvh;
2267
+ width: min(620px, 100vw);
2268
+ background: #f9fbfa;
2269
+ box-shadow: -18px 0 40px rgba(23, 50, 77, 0.18);
2270
+ transform: translateX(100%);
2271
+ transition: transform 220ms ease;
2272
+ display: grid;
2273
+ grid-template-rows: auto minmax(0, 1fr);
2274
+ z-index: 20;
2275
+ }
2276
+
2277
+ .drawer.open {
2278
+ transform: translateX(0);
2279
+ }
2280
+
2281
+ .drawer.maximized {
2282
+ left: 260px;
2283
+ width: calc(100vw - 260px);
2284
+ box-shadow: none;
2285
+ }
2286
+
2287
+ .task-detail-dock {
2288
+ position: fixed;
2289
+ left: max(24px, calc(260px + 24px));
2290
+ right: 24px;
2291
+ bottom: 20px;
2292
+ z-index: 24;
2293
+ display: flex;
2294
+ align-items: center;
2295
+ justify-content: space-between;
2296
+ gap: 16px;
2297
+ max-width: 760px;
2298
+ margin-left: auto;
2299
+ padding: 14px 16px;
2300
+ border: 1px solid #c9d5d1;
2301
+ border-radius: 8px;
2302
+ background: #fff;
2303
+ box-shadow: 0 16px 36px rgba(23, 50, 77, 0.2);
2304
+ }
2305
+
2306
+ .task-detail-dock-main {
2307
+ min-width: 0;
2308
+ display: grid;
2309
+ gap: 4px;
2310
+ }
2311
+
2312
+ .task-detail-dock-main strong {
2313
+ overflow: hidden;
2314
+ text-overflow: ellipsis;
2315
+ white-space: nowrap;
2316
+ }
2317
+
2318
+ .task-detail-dock-main > span {
2319
+ color: #60716b;
2320
+ font-size: 0.92rem;
2321
+ }
2322
+
2323
+ .task-detail-dock-actions {
2324
+ display: flex;
2325
+ flex: 0 0 auto;
2326
+ gap: 8px;
2327
+ }
2328
+
2329
+ .drawer header {
2330
+ padding: 22px;
2331
+ border-bottom: 1px solid #d9e2df;
2332
+ display: grid;
2333
+ gap: 10px;
2334
+ text-align: left;
2335
+ }
2336
+
2337
+ .drawer-heading {
2338
+ display: flex;
2339
+ align-items: center;
2340
+ justify-content: space-between;
2341
+ gap: 16px;
2342
+ min-width: 0;
2343
+ }
2344
+
2345
+ .drawer header h2 {
2346
+ margin: 0;
2347
+ max-width: 100%;
2348
+ }
2349
+
2350
+ .drawer header p {
2351
+ margin: 0;
2352
+ color: #60716b;
2353
+ min-width: 0;
2354
+ max-width: 100%;
2355
+ }
2356
+
2357
+ .drawer-content {
2358
+ position: relative;
2359
+ display: grid;
2360
+ grid-template-rows: minmax(0, 1fr) auto;
2361
+ min-height: 0;
2362
+ overflow: hidden;
2363
+ }
2364
+
2365
+ .drawer-tools {
2366
+ flex: 0 0 auto;
2367
+ display: flex;
2368
+ gap: 8px;
2369
+ }
2370
+
2371
+ .icon-button {
2372
+ display: inline-flex;
2373
+ align-items: center;
2374
+ justify-content: center;
2375
+ width: 30px;
2376
+ height: 30px;
2377
+ padding: 0;
2378
+ border: 1px solid var(--border-strong);
2379
+ border-radius: 5px;
2380
+ background: var(--surface);
2381
+ color: var(--text-2);
2382
+ cursor: pointer;
2383
+ font-family: inherit;
2384
+ transition: background 0.08s ease, color 0.08s ease;
2385
+ }
2386
+
2387
+ .icon-button:hover {
2388
+ background: var(--surface-2);
2389
+ color: var(--text);
2390
+ }
2391
+
2392
+ .icon-button:disabled {
2393
+ opacity: 0.45;
2394
+ cursor: not-allowed;
2395
+ }
2396
+
2397
+ .icon-button svg {
2398
+ width: 14px;
2399
+ height: 14px;
2400
+ }
2401
+
2402
+ .modal-layer {
2403
+ position: fixed;
2404
+ inset: 0;
2405
+ z-index: 40;
2406
+ display: grid;
2407
+ place-items: center;
2408
+ padding: 24px;
2409
+ box-sizing: border-box;
2410
+ background: rgba(23, 50, 77, 0.25);
2411
+ }
2412
+
2413
+ .modal {
2414
+ width: min(680px, 100%);
2415
+ max-height: min(720px, 100%);
2416
+ display: grid;
2417
+ grid-template-rows: auto 1fr;
2418
+ background: #fff;
2419
+ border: 1px solid #d9e2df;
2420
+ border-radius: 8px;
2421
+ box-shadow: 0 24px 70px rgba(23, 50, 77, 0.22);
2422
+ }
2423
+
2424
+ .modal header {
2425
+ padding: 18px 20px;
2426
+ border-bottom: 1px solid #d9e2df;
2427
+ display: flex;
2428
+ align-items: center;
2429
+ justify-content: space-between;
2430
+ gap: 16px;
2431
+ }
2432
+
2433
+ .modal h2 {
2434
+ margin: 0;
2435
+ font-size: 1.15rem;
2436
+ }
2437
+
2438
+ .modal form {
2439
+ min-height: 0;
2440
+ padding: 20px;
2441
+ display: grid;
2442
+ grid-template-rows: minmax(220px, 1fr) auto;
2443
+ }
2444
+
2445
+ .attachment-picker {
2446
+ display: grid;
2447
+ gap: 10px;
2448
+ margin-top: 10px;
2449
+ }
2450
+
2451
+ .attachment-picker input[type='file'] {
2452
+ display: none;
2453
+ }
2454
+
2455
+ .attachment-button {
2456
+ justify-self: start;
2457
+ display: inline-flex;
2458
+ align-items: center;
2459
+ gap: 8px;
2460
+ min-height: 36px;
2461
+ padding: 0 12px;
2462
+ border: 1px solid #c9d5d1;
2463
+ border-radius: 8px;
2464
+ background: #fff;
2465
+ color: #17324d;
2466
+ font-weight: 700;
2467
+ cursor: pointer;
2468
+ }
2469
+
2470
+ .attachment-button:disabled {
2471
+ color: #94a39e;
2472
+ background: #f4f7f6;
2473
+ cursor: not-allowed;
2474
+ }
2475
+
2476
+ .attachment-status {
2477
+ display: inline-flex;
2478
+ align-items: center;
2479
+ gap: 8px;
2480
+ color: #48635c;
2481
+ font-size: 0.85rem;
2482
+ font-weight: 700;
2483
+ }
2484
+
2485
+ .attachment-list {
2486
+ display: flex;
2487
+ flex-wrap: wrap;
2488
+ gap: 8px;
2489
+ }
2490
+
2491
+ .attachment-chip {
2492
+ display: inline-flex;
2493
+ align-items: center;
2494
+ gap: 6px;
2495
+ max-width: 100%;
2496
+ padding: 5px 8px;
2497
+ border: 1px solid #d9e2df;
2498
+ border-radius: 999px;
2499
+ background: #eef4f2;
2500
+ color: #17324d;
2501
+ font-size: 0.82rem;
2502
+ font-weight: 700;
2503
+ }
2504
+
2505
+ .attachment-chip small {
2506
+ color: #48635c;
2507
+ font-size: 0.72rem;
2508
+ font-weight: 700;
2509
+ }
2510
+
2511
+ .attachment-chip button {
2512
+ display: inline-flex;
2513
+ align-items: center;
2514
+ justify-content: center;
2515
+ width: 22px;
2516
+ height: 22px;
2517
+ padding: 0;
2518
+ border: 0;
2519
+ border-radius: 50%;
2520
+ background: transparent;
2521
+ color: inherit;
2522
+ cursor: pointer;
2523
+ }
2524
+
2525
+ .modal .app-info-form {
2526
+ gap: 14px;
2527
+ }
2528
+
2529
+ .modal .api-token-panel {
2530
+ display: grid;
2531
+ padding: 20px;
2532
+ }
2533
+
2534
+ .modal form.api-client-form {
2535
+ grid-template-rows: none;
2536
+ align-content: start;
2537
+ overflow: auto;
2538
+ }
2539
+
2540
+ .app-info-form label {
2541
+ display: grid;
2542
+ gap: 6px;
2543
+ }
2544
+
2545
+ .app-info-form label span {
2546
+ color: #60716b;
2547
+ font-size: 0.78rem;
2548
+ font-weight: 800;
2549
+ text-transform: uppercase;
2550
+ }
2551
+
2552
+ .app-info-form input {
2553
+ min-height: 42px;
2554
+ box-sizing: border-box;
2555
+ padding: 0 12px;
2556
+ border: 1px solid #c9d5d1;
2557
+ border-radius: 8px;
2558
+ }
2559
+
2560
+ .app-info-form input[type="checkbox"] {
2561
+ min-height: 0;
2562
+ width: 18px;
2563
+ height: 18px;
2564
+ padding: 0;
2565
+ }
2566
+
2567
+ .app-info-form input:disabled {
2568
+ background: #eef3f0;
2569
+ color: #81918b;
2570
+ }
2571
+
2572
+ .outlet-settings-form {
2573
+ display: grid;
2574
+ gap: 12px;
2575
+ }
2576
+
2577
+ .outlet-settings-form .checkbox-row {
2578
+ display: flex;
2579
+ align-items: center;
2580
+ gap: 10px;
2581
+ }
2582
+
2583
+ .checkbox-group {
2584
+ display: grid;
2585
+ gap: 8px;
2586
+ padding: 12px;
2587
+ border: 1px solid #d9e2df;
2588
+ border-radius: 8px;
2589
+ }
2590
+
2591
+ .checkbox-group legend {
2592
+ padding: 0 6px;
2593
+ color: #40534d;
2594
+ font-weight: 800;
2595
+ }
2596
+
2597
+ .app-info-form .checkbox-group label {
2598
+ display: flex;
2599
+ align-items: center;
2600
+ gap: 10px;
2601
+ }
2602
+
2603
+ .app-info-form .checkbox-group label span {
2604
+ color: #17324d;
2605
+ font-size: 0.9rem;
2606
+ font-weight: 700;
2607
+ text-transform: none;
2608
+ }
2609
+
2610
+ .api-client-form textarea {
2611
+ min-height: 88px;
2612
+ }
2613
+
2614
+ .app-info-form select {
2615
+ min-height: 42px;
2616
+ box-sizing: border-box;
2617
+ padding: 0 12px;
2618
+ border: 1px solid #c9d5d1;
2619
+ border-radius: 8px;
2620
+ background: #fff;
2621
+ }
2622
+
2623
+ .editable-info-line {
2624
+ display: flex;
2625
+ align-items: flex-start;
2626
+ justify-content: space-between;
2627
+ gap: 12px;
2628
+ }
2629
+
2630
+ .editable-info-line > span {
2631
+ min-width: 0;
2632
+ overflow-wrap: anywhere;
2633
+ }
2634
+
2635
+ .brand-graphics-heading {
2636
+ display: flex;
2637
+ align-items: center;
2638
+ justify-content: space-between;
2639
+ gap: 12px;
2640
+ margin-top: 28px;
2641
+ }
2642
+
2643
+ .brand-graphics-heading h2 {
2644
+ margin: 0;
2645
+ font-size: 1.05rem;
2646
+ }
2647
+
2648
+ .brand-graphics-heading > div {
2649
+ display: flex;
2650
+ gap: 8px;
2651
+ flex-wrap: wrap;
2652
+ }
2653
+
2654
+ .brand-graphics-grid {
2655
+ display: grid;
2656
+ grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
2657
+ gap: 14px;
2658
+ margin-top: 14px;
2659
+ }
2660
+
2661
+ .brand-graphic-card {
2662
+ display: grid;
2663
+ grid-template-columns: 72px minmax(0, 1fr);
2664
+ gap: 12px;
2665
+ align-items: center;
2666
+ padding: 12px;
2667
+ border: 1px solid #d9e2df;
2668
+ border-radius: 8px;
2669
+ background: #fff;
2670
+ }
2671
+
2672
+ .brand-graphic-card img {
2673
+ width: 72px;
2674
+ height: 72px;
2675
+ object-fit: contain;
2676
+ border: 1px solid #edf2f0;
2677
+ border-radius: 8px;
2678
+ background: #f8faf9;
2679
+ }
2680
+
2681
+ .brand-graphic-card strong,
2682
+ .brand-graphic-card span {
2683
+ display: block;
2684
+ min-width: 0;
2685
+ overflow-wrap: anywhere;
2686
+ }
2687
+
2688
+ .brand-graphic-card span {
2689
+ color: #60716b;
2690
+ font-size: 0.82rem;
2691
+ }
2692
+
2693
+ .brand-graphic-actions {
2694
+ grid-column: 1 / -1;
2695
+ display: flex;
2696
+ justify-content: flex-end;
2697
+ gap: 8px;
2698
+ }
2699
+
2700
+ .empty-brand-graphics {
2701
+ display: flex;
2702
+ align-items: center;
2703
+ gap: 10px;
2704
+ min-height: 88px;
2705
+ padding: 16px;
2706
+ border: 1px dashed #c9d5d1;
2707
+ border-radius: 8px;
2708
+ color: #60716b;
2709
+ background: #f8faf9;
2710
+ }
2711
+
2712
+ .file-drop {
2713
+ position: relative;
2714
+ min-height: 90px;
2715
+ place-items: center;
2716
+ border: 1px dashed #aabbb5;
2717
+ border-radius: 8px;
2718
+ background: #f8faf9;
2719
+ color: #17324d;
2720
+ cursor: pointer;
2721
+ }
2722
+
2723
+ .file-drop input {
2724
+ position: absolute;
2725
+ inset: 0;
2726
+ opacity: 0;
2727
+ cursor: pointer;
2728
+ }
2729
+
2730
+ .brand-graphic-preview {
2731
+ width: 128px;
2732
+ height: 128px;
2733
+ object-fit: contain;
2734
+ border: 1px solid #d9e2df;
2735
+ border-radius: 8px;
2736
+ background: #f8faf9;
2737
+ }
2738
+
2739
+ .modal textarea {
2740
+ min-height: 220px;
2741
+ resize: vertical;
2742
+ }
2743
+
2744
+ .modal .app-info-form textarea {
2745
+ min-height: 180px;
2746
+ }
2747
+
2748
+ .modal-actions {
2749
+ display: flex;
2750
+ align-items: flex-end;
2751
+ justify-content: flex-end;
2752
+ gap: 10px;
2753
+ margin-top: 14px;
2754
+ }
2755
+
2756
+ .task-model-selector {
2757
+ display: grid;
2758
+ gap: 4px;
2759
+ min-width: 210px;
2760
+ margin-left: auto;
2761
+ }
2762
+
2763
+ .task-model-selector span {
2764
+ color: var(--text-3);
2765
+ font-size: 10.5px;
2766
+ font-weight: 700;
2767
+ letter-spacing: 0.06em;
2768
+ line-height: 1;
2769
+ text-transform: uppercase;
2770
+ }
2771
+
2772
+ .task-model-selector select {
2773
+ min-height: 44px;
2774
+ width: 100%;
2775
+ border: 1px solid #c9d5d1;
2776
+ border-radius: 8px;
2777
+ background: #fff;
2778
+ color: #17324d;
2779
+ font: inherit;
2780
+ font-weight: 700;
2781
+ padding: 0 34px 0 12px;
2782
+ }
2783
+
2784
+ .task-model-selector select:disabled {
2785
+ cursor: not-allowed;
2786
+ opacity: 0.72;
2787
+ }
2788
+
2789
+ .modal-actions button {
2790
+ min-height: 44px;
2791
+ padding: 0 18px;
2792
+ border: 1px solid #c9d5d1;
2793
+ border-radius: 8px;
2794
+ background: #fff;
2795
+ color: #17324d;
2796
+ font-weight: 700;
2797
+ cursor: pointer;
2798
+ }
2799
+
2800
+ .modal-actions button:disabled {
2801
+ cursor: not-allowed;
2802
+ opacity: 0.72;
2803
+ }
2804
+
2805
+ .modal-actions .primary {
2806
+ margin-top: 0;
2807
+ border: 0;
2808
+ color: #fff;
2809
+ background: #22577a;
2810
+ }
2811
+
2812
+ .modal-actions .danger {
2813
+ margin-top: 0;
2814
+ border: 0;
2815
+ color: #fff;
2816
+ background: #b42318;
2817
+ }
2818
+
2819
+ .danger-note {
2820
+ margin: 0;
2821
+ padding: 12px;
2822
+ border: 1px solid #f1b4ad;
2823
+ border-radius: 8px;
2824
+ background: #fff2f0;
2825
+ color: #8f1d14;
2826
+ font-weight: 800;
2827
+ }
2828
+
2829
+ .repo-reset-summary {
2830
+ display: grid;
2831
+ gap: 8px;
2832
+ padding: 12px;
2833
+ border: 1px solid #e2e8f0;
2834
+ border-radius: 8px;
2835
+ background: #f8fafc;
2836
+ }
2837
+
2838
+ .drawer-body {
2839
+ overflow: auto;
2840
+ padding: 22px;
2841
+ }
2842
+
2843
+ .turn {
2844
+ padding-bottom: 18px;
2845
+ margin-bottom: 18px;
2846
+ border-bottom: 1px solid #d9e2df;
2847
+ }
2848
+
2849
+ .turn:last-child {
2850
+ padding-bottom: 0;
2851
+ margin-bottom: 0;
2852
+ border-bottom: 0;
2853
+ }
2854
+
2855
+ .turn-panel {
2856
+ background: #fff;
2857
+ border: 1px solid #d9e2df;
2858
+ border-radius: 8px;
2859
+ padding: 12px 14px;
2860
+ }
2861
+
2862
+ .turn-panel + .turn-panel {
2863
+ margin-top: 8px;
2864
+ }
2865
+
2866
+ .turn-panel h3 {
2867
+ margin: 0;
2868
+ font-size: 0.78rem;
2869
+ line-height: 1.2;
2870
+ }
2871
+
2872
+ .request-panel {
2873
+ background: #f8fbfd;
2874
+ }
2875
+
2876
+ .request-panel h3 {
2877
+ color: #22577a;
2878
+ }
2879
+
2880
+ .request-panel p {
2881
+ margin: 8px 0 0;
2882
+ white-space: pre-wrap;
2883
+ overflow-wrap: anywhere;
2884
+ font-size: 0.88rem;
2885
+ line-height: 1.45;
2886
+ }
2887
+
2888
+ .steering-panel {
2889
+ display: grid;
2890
+ gap: 8px;
2891
+ min-height: auto;
2892
+ padding: 10px;
2893
+ }
2894
+
2895
+ .steering-message {
2896
+ display: grid;
2897
+ grid-template-columns: 18px minmax(0, 1fr);
2898
+ gap: 8px;
2899
+ align-items: start;
2900
+ padding: 9px 10px;
2901
+ border: 1px solid #d7e2f8;
2902
+ border-radius: 6px;
2903
+ background: #f2f6ff;
2904
+ color: #274c83;
2905
+ }
2906
+
2907
+ .steering-message svg {
2908
+ width: 15px;
2909
+ height: 15px;
2910
+ margin-top: 2px;
2911
+ }
2912
+
2913
+ .steering-message-title {
2914
+ display: flex;
2915
+ flex-wrap: wrap;
2916
+ gap: 8px;
2917
+ align-items: baseline;
2918
+ color: #24446f;
2919
+ font-size: 0.75rem;
2920
+ font-weight: 700;
2921
+ }
2922
+
2923
+ .steering-message-title time {
2924
+ color: #60758e;
2925
+ font-size: 0.72rem;
2926
+ font-weight: 500;
2927
+ }
2928
+
2929
+ .steering-message p {
2930
+ margin-top: 4px;
2931
+ color: #1f3556;
2932
+ font-size: 0.84rem;
2933
+ }
2934
+
2935
+ .output-panel {
2936
+ min-height: 76px;
2937
+ }
2938
+
2939
+ .output-panel-actions {
2940
+ display: flex;
2941
+ justify-content: flex-end;
2942
+ margin-top: 12px;
2943
+ padding-top: 10px;
2944
+ border-top: 1px solid #edf2f0;
2945
+ }
2946
+
2947
+ .technical-summary {
2948
+ margin-top: 14px;
2949
+ border-top: 1px solid #edf2f0;
2950
+ padding-top: 10px;
2951
+ }
2952
+
2953
+ .technical-summary summary {
2954
+ color: #60716b;
2955
+ font-size: 0.82rem;
2956
+ font-weight: 800;
2957
+ }
2958
+
2959
+ .technical-summary-body {
2960
+ margin-top: 10px;
2961
+ padding: 12px;
2962
+ border: 1px solid #d9e2df;
2963
+ border-radius: 8px;
2964
+ background: #f8fbfd;
2965
+ }
2966
+
2967
+ .technical-summary-body .formatted-text p {
2968
+ font-size: 0.88rem;
2969
+ }
2970
+
2971
+ .turn-title {
2972
+ display: grid;
2973
+ grid-template-columns: auto minmax(0, 1fr);
2974
+ align-items: baseline;
2975
+ gap: 12px;
2976
+ min-height: 18px;
2977
+ }
2978
+
2979
+ .turn-title time {
2980
+ justify-self: end;
2981
+ color: #60716b;
2982
+ font-size: 0.76rem;
2983
+ line-height: 1.2;
2984
+ text-align: right;
2985
+ white-space: nowrap;
2986
+ }
2987
+
2988
+ .output-title h3 {
2989
+ color: #22577a;
2990
+ font-weight: 800;
2991
+ }
2992
+
2993
+ .output-title {
2994
+ grid-template-columns: auto minmax(0, 1fr);
2995
+ }
2996
+
2997
+ .result {
2998
+ margin-top: 10px;
2999
+ white-space: pre-wrap;
3000
+ }
3001
+
3002
+ .result .formatted-text p {
3003
+ margin-bottom: 8px;
3004
+ }
3005
+
3006
+ .working-indicator {
3007
+ display: inline-flex;
3008
+ align-items: center;
3009
+ gap: 8px;
3010
+ color: #22577a;
3011
+ font-weight: 800;
3012
+ }
3013
+
3014
+ .inline-spinner {
3015
+ width: 16px;
3016
+ height: 16px;
3017
+ border: 2px solid #c9d5d1;
3018
+ border-top-color: #22577a;
3019
+ border-radius: 999px;
3020
+ animation: spinner-rotate 760ms linear infinite;
3021
+ }
3022
+
3023
+ .working-result-body {
3024
+ min-height: 1.45em;
3025
+ color: #1c2e35;
3026
+ white-space: normal;
3027
+ }
3028
+
3029
+ .working-dots {
3030
+ display: inline-flex;
3031
+ gap: 4px;
3032
+ align-items: center;
3033
+ }
3034
+
3035
+ .working-dots span {
3036
+ width: 6px;
3037
+ height: 6px;
3038
+ border-radius: 999px;
3039
+ background: currentColor;
3040
+ animation: working-pulse 900ms ease-in-out infinite;
3041
+ }
3042
+
3043
+ .working-dots span:nth-child(2) {
3044
+ animation-delay: 150ms;
3045
+ }
3046
+
3047
+ .working-dots span:nth-child(3) {
3048
+ animation-delay: 300ms;
3049
+ }
3050
+
3051
+ .trace-open-button {
3052
+ min-height: 30px;
3053
+ padding: 0 10px;
3054
+ border: 1px solid #c9d5d1;
3055
+ border-radius: 8px;
3056
+ background: transparent;
3057
+ color: #60716b;
3058
+ font-size: 0.8rem;
3059
+ font-weight: 700;
3060
+ cursor: pointer;
3061
+ }
3062
+
3063
+ .trace-open-button:hover {
3064
+ border-color: #9eb0aa;
3065
+ background: #f7faf9;
3066
+ color: #22577a;
3067
+ }
3068
+
3069
+ @keyframes working-pulse {
3070
+ 0%, 80%, 100% {
3071
+ opacity: 0.35;
3072
+ transform: translateY(0);
3073
+ }
3074
+
3075
+ 40% {
3076
+ opacity: 1;
3077
+ transform: translateY(-3px);
3078
+ }
3079
+ }
3080
+
3081
+ @keyframes spinner-rotate {
3082
+ to {
3083
+ transform: rotate(360deg);
3084
+ }
3085
+ }
3086
+
3087
+ details {
3088
+ margin-top: 12px;
3089
+ }
3090
+
3091
+ summary {
3092
+ cursor: pointer;
3093
+ color: #22577a;
3094
+ font-weight: 700;
3095
+ }
3096
+
3097
+ pre {
3098
+ background: white;
3099
+ border: 1px solid #dde5e2;
3100
+ border-radius: 8px;
3101
+ padding: 16px;
3102
+ white-space: pre-wrap;
3103
+ }
3104
+
3105
+ .trace-list {
3106
+ border: 1px solid #dde5e2;
3107
+ border-radius: 8px;
3108
+ background: #fbfcfc;
3109
+ overflow: auto;
3110
+ min-height: 0;
3111
+ max-height: none;
3112
+ }
3113
+
3114
+ .task-trace-overlay {
3115
+ position: absolute;
3116
+ inset: 0;
3117
+ z-index: 3;
3118
+ display: grid;
3119
+ min-width: 0;
3120
+ min-height: 0;
3121
+ padding: 22px;
3122
+ box-sizing: border-box;
3123
+ background: #f9fbfa;
3124
+ overflow: hidden;
3125
+ }
3126
+
3127
+ .trace-toolbar {
3128
+ position: sticky;
3129
+ top: 0;
3130
+ z-index: 1;
3131
+ display: flex;
3132
+ align-items: center;
3133
+ justify-content: space-between;
3134
+ gap: 12px;
3135
+ margin: -12px -12px 0;
3136
+ padding: 12px;
3137
+ border-bottom: 1px solid #d9e2df;
3138
+ background: #fff;
3139
+ color: #60716b;
3140
+ font-size: 0.82rem;
3141
+ }
3142
+
3143
+ .trace-toolbar-summary {
3144
+ display: flex;
3145
+ min-width: 0;
3146
+ align-items: center;
3147
+ gap: 12px;
3148
+ flex-wrap: wrap;
3149
+ }
3150
+
3151
+ .trace-toolbar-summary > span {
3152
+ min-width: 0;
3153
+ overflow-wrap: anywhere;
3154
+ font-weight: 800;
3155
+ }
3156
+
3157
+ .context-pressure {
3158
+ display: inline-flex;
3159
+ align-items: center;
3160
+ gap: 8px;
3161
+ min-width: 150px;
3162
+ color: #3d4f48;
3163
+ font-size: 0.78rem;
3164
+ font-weight: 800;
3165
+ }
3166
+
3167
+ .context-pressure-meter {
3168
+ width: 72px;
3169
+ height: 7px;
3170
+ overflow: hidden;
3171
+ border-radius: 999px;
3172
+ background: #e6eeeb;
3173
+ }
3174
+
3175
+ .context-pressure-fill {
3176
+ height: 100%;
3177
+ border-radius: inherit;
3178
+ background: #2f855a;
3179
+ }
3180
+
3181
+ .context-pressure-medium .context-pressure-fill {
3182
+ background: #b7791f;
3183
+ }
3184
+
3185
+ .context-pressure-high .context-pressure-fill {
3186
+ background: #c05621;
3187
+ }
3188
+
3189
+ .context-pressure-critical .context-pressure-fill {
3190
+ background: #c53030;
3191
+ }
3192
+
3193
+ .trace-toolbar-actions {
3194
+ display: inline-flex;
3195
+ align-items: center;
3196
+ gap: 10px;
3197
+ }
3198
+
3199
+ .trace-shell {
3200
+ display: grid;
3201
+ grid-template-rows: auto auto minmax(0, 1fr);
3202
+ gap: 0;
3203
+ min-width: 0;
3204
+ min-height: 0;
3205
+ padding: 12px;
3206
+ border: 1px solid #d9e2df;
3207
+ border-radius: 8px;
3208
+ background: #fff;
3209
+ }
3210
+
3211
+ .trace-filter-bar {
3212
+ display: flex;
3213
+ flex-wrap: wrap;
3214
+ gap: 8px;
3215
+ padding: 10px 0;
3216
+ background: #fff;
3217
+ }
3218
+
3219
+ .trace-filter-button {
3220
+ display: inline-flex;
3221
+ align-items: center;
3222
+ justify-content: center;
3223
+ min-height: 30px;
3224
+ padding: 0 12px;
3225
+ border: 1px solid #c9d5d1;
3226
+ border-radius: 999px;
3227
+ background: #fff;
3228
+ color: #60716b;
3229
+ font-size: 0.82rem;
3230
+ font-weight: 800;
3231
+ cursor: pointer;
3232
+ }
3233
+
3234
+ .trace-filter-button.active {
3235
+ border-color: #22577a;
3236
+ background: #17324d;
3237
+ color: #fff;
3238
+ }
3239
+
3240
+ .trace-filter-button:hover {
3241
+ background: #eef4f2;
3242
+ color: #17324d;
3243
+ }
3244
+
3245
+ .trace-filter-button.active:hover {
3246
+ background: #22577a;
3247
+ color: #fff;
3248
+ }
3249
+
3250
+ .trace-toggle-button,
3251
+ .trace-collapse-button {
3252
+ display: inline-flex;
3253
+ align-items: center;
3254
+ justify-content: center;
3255
+ min-height: 32px;
3256
+ padding: 0 10px;
3257
+ border: 1px solid #c9d5d1;
3258
+ border-radius: 8px;
3259
+ background: #fff;
3260
+ color: #17324d;
3261
+ font-weight: 800;
3262
+ cursor: pointer;
3263
+ }
3264
+
3265
+ .trace-toggle-button {
3266
+ min-width: 72px;
3267
+ color: #60716b;
3268
+ }
3269
+
3270
+ .trace-toggle-button.active {
3271
+ border-color: #22577a;
3272
+ background: #e7f0ed;
3273
+ color: #17324d;
3274
+ }
3275
+
3276
+ .trace-collapse-button {
3277
+ width: 32px;
3278
+ padding: 0;
3279
+ }
3280
+
3281
+ .trace-toggle-button:hover,
3282
+ .trace-collapse-button:hover {
3283
+ background: #eef4f2;
3284
+ }
3285
+
3286
+ .trace-collapse-button svg {
3287
+ width: 17px;
3288
+ height: 17px;
3289
+ }
3290
+
3291
+ .trace-event {
3292
+ display: block;
3293
+ padding: 10px 12px;
3294
+ border-bottom: 1px solid #e6ecea;
3295
+ }
3296
+
3297
+ .trace-event:last-child {
3298
+ border-bottom: 0;
3299
+ }
3300
+
3301
+ .trace-event-header {
3302
+ display: flex;
3303
+ align-items: center;
3304
+ gap: 10px;
3305
+ min-height: 18px;
3306
+ margin-bottom: 6px;
3307
+ }
3308
+
3309
+ .trace-event-header span {
3310
+ color: #60716b;
3311
+ font-size: 0.82rem;
3312
+ line-height: 1;
3313
+ white-space: nowrap;
3314
+ }
3315
+
3316
+ .trace-event-header strong {
3317
+ text-transform: uppercase;
3318
+ font-size: 0.72rem;
3319
+ letter-spacing: 0;
3320
+ color: #22577a;
3321
+ line-height: 1;
3322
+ overflow-wrap: anywhere;
3323
+ }
3324
+
3325
+ .trace-event.error .trace-event-header strong {
3326
+ color: #9f2d20;
3327
+ }
3328
+
3329
+ .trace-event.assistant,
3330
+ .trace-event.result {
3331
+ background: #f7fbf9;
3332
+ }
3333
+
3334
+ .trace-event.command {
3335
+ background: #fbfaf6;
3336
+ }
3337
+
3338
+ .trace-event.tool {
3339
+ background: #f8fbfd;
3340
+ }
3341
+
3342
+ .trace-event.file {
3343
+ background: #f9fbf8;
3344
+ }
3345
+
3346
+ .trace-event.raw {
3347
+ background: #fff;
3348
+ }
3349
+
3350
+ .trace-event pre {
3351
+ margin: 0;
3352
+ padding: 0;
3353
+ border: 0;
3354
+ background: transparent;
3355
+ font-size: 0.85rem;
3356
+ overflow-wrap: anywhere;
3357
+ }
3358
+
3359
+ .trace-body {
3360
+ min-width: 0;
3361
+ }
3362
+
3363
+ .trace-body pre {
3364
+ margin-top: 8px;
3365
+ }
3366
+
3367
+ .trace-body pre:first-child {
3368
+ margin-top: 0;
3369
+ }
3370
+
3371
+ .trace-meta {
3372
+ margin: 0;
3373
+ color: #60716b;
3374
+ font-size: 0.84rem;
3375
+ overflow-wrap: anywhere;
3376
+ }
3377
+
3378
+ .trace-command {
3379
+ color: #17324d;
3380
+ font-weight: 700;
3381
+ }
3382
+
3383
+ .raw-details {
3384
+ margin-top: 8px;
3385
+ }
3386
+
3387
+ .raw-details summary {
3388
+ color: #60716b;
3389
+ font-size: 0.82rem;
3390
+ }
3391
+
3392
+ .raw-details pre {
3393
+ margin-top: 8px;
3394
+ color: #4c5e58;
3395
+ }
3396
+
3397
+ .json-tree {
3398
+ display: grid;
3399
+ gap: 5px;
3400
+ margin: 8px 0 0;
3401
+ padding-left: 16px;
3402
+ color: #17324d;
3403
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
3404
+ font-size: 0.84rem;
3405
+ list-style: none;
3406
+ overflow-wrap: anywhere;
3407
+ }
3408
+
3409
+ .json-tree:first-child {
3410
+ margin-top: 0;
3411
+ }
3412
+
3413
+ .json-tree li {
3414
+ min-width: 0;
3415
+ }
3416
+
3417
+ .json-key {
3418
+ display: inline-block;
3419
+ margin-right: 8px;
3420
+ color: #60716b;
3421
+ font-weight: 800;
3422
+ }
3423
+
3424
+ .json-value {
3425
+ white-space: pre-wrap;
3426
+ }
3427
+
3428
+ .json-value.string {
3429
+ color: #174f38;
3430
+ }
3431
+
3432
+ .json-value.number,
3433
+ .json-value.boolean {
3434
+ color: #22577a;
3435
+ }
3436
+
3437
+ .json-value.null {
3438
+ color: #7a6b60;
3439
+ font-style: italic;
3440
+ }
3441
+
3442
+ .formatted-text {
3443
+ min-width: 0;
3444
+ }
3445
+
3446
+ .formatted-text p {
3447
+ margin: 0 0 10px;
3448
+ white-space: pre-wrap;
3449
+ overflow-wrap: anywhere;
3450
+ }
3451
+
3452
+ .formatted-text p:last-child {
3453
+ margin-bottom: 0;
3454
+ }
3455
+
3456
+ .formatted-text .code-block {
3457
+ margin: 8px 0;
3458
+ padding: 10px;
3459
+ border: 1px solid #d5dfdc;
3460
+ background: #f2f6f4;
3461
+ overflow-x: auto;
3462
+ white-space: pre;
3463
+ }
3464
+
3465
+ .drawer-form {
3466
+ display: grid;
3467
+ gap: 10px;
3468
+ padding: 18px 22px;
3469
+ padding-bottom: calc(18px + env(safe-area-inset-bottom, 0px));
3470
+ border-top: 1px solid #d9e2df;
3471
+ background: #fff;
3472
+ overflow: auto;
3473
+ }
3474
+
3475
+ .drawer-form-toolbar {
3476
+ display: flex;
3477
+ align-items: flex-start;
3478
+ justify-content: space-between;
3479
+ gap: 12px;
3480
+ min-width: 0;
3481
+ }
3482
+
3483
+ .drawer-form-buttons {
3484
+ display: flex;
3485
+ justify-content: flex-end;
3486
+ gap: 8px;
3487
+ flex: 0 0 auto;
3488
+ }
3489
+
3490
+ .drawer-form .primary,
3491
+ .drawer-form .danger {
3492
+ margin-top: 0;
3493
+ }
3494
+
3495
+ .drawer-form textarea {
3496
+ min-height: 96px;
3497
+ }
3498
+
3499
+ .interrupt-panel {
3500
+ display: grid;
3501
+ gap: 10px;
3502
+ }
3503
+
3504
+ @media (max-width: 760px) {
3505
+ .shell {
3506
+ grid-template-columns: minmax(0, 1fr);
3507
+ }
3508
+
3509
+ nav {
3510
+ position: fixed;
3511
+ top: 0;
3512
+ left: 0;
3513
+ z-index: 30;
3514
+ width: min(260px, calc(100vw - 16px));
3515
+ height: 100vh;
3516
+ height: 100dvh;
3517
+ box-sizing: border-box;
3518
+ overflow: hidden;
3519
+ border-right: 1px solid #d9e2df;
3520
+ border-bottom: 0;
3521
+ padding: 12px 8px;
3522
+ transform: translateX(-100%);
3523
+ transition: transform 180ms ease, box-shadow 180ms ease;
3524
+ pointer-events: none;
3525
+ }
3526
+
3527
+ nav.open,
3528
+ nav.mobile-open {
3529
+ transform: translateX(0);
3530
+ box-shadow: 14px 0 36px rgba(23, 50, 77, 0.18);
3531
+ pointer-events: auto;
3532
+ }
3533
+
3534
+ .nav-menu-button {
3535
+ display: flex;
3536
+ justify-content: center;
3537
+ width: 48px;
3538
+ margin: 0 0 12px;
3539
+ padding: 0;
3540
+ }
3541
+
3542
+ nav button {
3543
+ justify-content: flex-start;
3544
+ width: 100%;
3545
+ padding: 0 12px;
3546
+ }
3547
+
3548
+ nav .nav-links a {
3549
+ justify-content: flex-start;
3550
+ width: 100%;
3551
+ padding: 9px 12px;
3552
+ }
3553
+
3554
+ .nav-links {
3555
+ margin-top: 14px;
3556
+ }
3557
+
3558
+ main {
3559
+ width: 100%;
3560
+ padding: 16px;
3561
+ }
3562
+
3563
+ .tasks-view {
3564
+ height: calc(100vh - 32px);
3565
+ height: calc(100dvh - 32px);
3566
+ }
3567
+
3568
+ .tasks-panel-title {
3569
+ display: flex;
3570
+ align-items: center;
3571
+ gap: 6px;
3572
+ flex-wrap: wrap;
3573
+ min-height: 30px;
3574
+ min-width: 0;
3575
+ }
3576
+
3577
+ .page-menu-button {
3578
+ display: inline-flex;
3579
+ align-items: center;
3580
+ justify-content: center;
3581
+ width: 30px;
3582
+ height: 30px;
3583
+ padding: 0;
3584
+ border: 1px solid var(--border-strong);
3585
+ border-radius: 5px;
3586
+ background: var(--surface);
3587
+ color: var(--text-2);
3588
+ cursor: pointer;
3589
+ }
3590
+
3591
+ .tasks-panel-title h1 {
3592
+ min-width: 0;
3593
+ font-size: 17px;
3594
+ }
3595
+
3596
+ .page-heading h1 {
3597
+ font-size: 17px;
3598
+ }
3599
+
3600
+ .tasks-panel-title .primary {
3601
+ margin-top: 0;
3602
+ }
3603
+
3604
+ .filter-toggle {
3605
+ display: inline-flex;
3606
+ }
3607
+
3608
+ .task-controls {
3609
+ padding-top: 4px;
3610
+ }
3611
+
3612
+ .task-filter-fields {
3613
+ grid-template-columns: 1fr;
3614
+ flex-basis: 100%;
3615
+ }
3616
+
3617
+ .task-pagination {
3618
+ margin-left: auto;
3619
+ justify-content: space-between;
3620
+ }
3621
+
3622
+ .drawer.maximized {
3623
+ left: 0;
3624
+ width: 100vw;
3625
+ }
3626
+
3627
+ .drawer {
3628
+ height: 100dvh;
3629
+ max-height: 100dvh;
3630
+ width: 100vw;
3631
+ }
3632
+
3633
+ .drawer header {
3634
+ padding: 16px;
3635
+ }
3636
+
3637
+ .drawer-body {
3638
+ padding: 16px;
3639
+ }
3640
+
3641
+ .drawer-form {
3642
+ max-height: min(42dvh, 320px);
3643
+ padding: 14px 16px calc(14px + env(safe-area-inset-bottom, 0px));
3644
+ }
3645
+
3646
+ .drawer-form textarea {
3647
+ min-height: 72px;
3648
+ }
3649
+
3650
+ .task-detail-dock {
3651
+ left: 12px;
3652
+ right: 12px;
3653
+ bottom: 12px;
3654
+ max-width: none;
3655
+ margin-left: 0;
3656
+ }
3657
+
3658
+ .metric-grid {
3659
+ grid-template-columns: 1fr;
3660
+ }
3661
+
3662
+ .outlet-qr {
3663
+ width: 116px;
3664
+ }
3665
+
3666
+ .outlet-qr img {
3667
+ width: 98px;
3668
+ }
3669
+ }
3670
+
3671
+ /* ---------- Compact shared control-panel shell ----------
3672
+ * Keep these overrides last so generated app panels inherit the same compact
3673
+ * tool-style layout as the host panel even when older generated CSS is present
3674
+ * earlier in the bundle.
3675
+ */
3676
+ *, *::before, *::after {
3677
+ box-sizing: border-box;
3678
+ }
3679
+
3680
+ body {
3681
+ margin: 0;
3682
+ background: var(--bg);
3683
+ color: var(--text);
3684
+ }
3685
+
3686
+ h1, h2, h3, h4 {
3687
+ margin: 0;
3688
+ color: var(--text);
3689
+ font-weight: 600;
3690
+ letter-spacing: 0;
3691
+ }
3692
+
3693
+ h1 { font-size: 17px; }
3694
+ h2 { font-size: 14px; }
3695
+ h3 { font-size: 13px; }
3696
+ h4 {
3697
+ color: var(--text-2);
3698
+ font-size: 12px;
3699
+ letter-spacing: 0.06em;
3700
+ text-transform: uppercase;
3701
+ }
3702
+
3703
+ p { margin: 0; }
3704
+ button { cursor: pointer; }
3705
+ svg { width: 14px; height: 14px; }
3706
+
3707
+ .shell {
3708
+ --control-panel-nav-width: 236px;
3709
+ position: relative;
3710
+ display: grid;
3711
+ grid-template-columns: var(--control-panel-nav-width) minmax(0, 1fr);
3712
+ height: 100vh;
3713
+ height: 100dvh;
3714
+ min-height: 0;
3715
+ overflow: hidden;
3716
+ }
3717
+
3718
+ nav {
3719
+ display: flex;
3720
+ flex-direction: column;
3721
+ gap: 2px;
3722
+ min-height: 0;
3723
+ height: 100%;
3724
+ box-sizing: border-box;
3725
+ padding: 10px 8px;
3726
+ overflow-x: hidden;
3727
+ overflow-y: auto;
3728
+ scrollbar-gutter: stable;
3729
+ border-right: 1px solid var(--border);
3730
+ background: var(--surface);
3731
+ }
3732
+
3733
+ nav button {
3734
+ gap: 8px;
3735
+ height: 30px;
3736
+ min-height: 30px;
3737
+ margin: 0;
3738
+ padding: 0 8px;
3739
+ border-radius: 5px;
3740
+ color: var(--text);
3741
+ font-size: 13.5px;
3742
+ font-weight: 400;
3743
+ transition: background 0.08s ease, color 0.08s ease;
3744
+ }
3745
+
3746
+ nav button:hover { background: var(--surface-2); }
3747
+ nav button.active {
3748
+ background: var(--surface-2);
3749
+ color: var(--text);
3750
+ font-weight: 500;
3751
+ box-shadow: inset 2px 0 0 var(--accent);
3752
+ }
3753
+
3754
+ nav button svg {
3755
+ width: 15px;
3756
+ height: 15px;
3757
+ color: var(--text-2);
3758
+ }
3759
+
3760
+ nav button.active svg { color: var(--text); }
3761
+
3762
+ nav > button,
3763
+ .nav-item-group > button,
3764
+ .nav-item-group > a {
3765
+ text-decoration: none;
3766
+ }
3767
+
3768
+ .nav-item-group > button,
3769
+ .nav-item-group > a {
3770
+ display: inline-flex;
3771
+ align-items: center;
3772
+ justify-content: flex-start;
3773
+ gap: 8px;
3774
+ width: 100%;
3775
+ height: 30px;
3776
+ min-height: 30px;
3777
+ margin: 0;
3778
+ padding: 0 8px;
3779
+ border: 0;
3780
+ border-radius: 5px;
3781
+ background: transparent;
3782
+ color: var(--text);
3783
+ font: inherit;
3784
+ font-size: 13.5px;
3785
+ text-align: left;
3786
+ cursor: pointer;
3787
+ transition: background 0.08s ease, color 0.08s ease;
3788
+ }
3789
+
3790
+ .nav-item-group > button:hover,
3791
+ .nav-item-group > a:hover {
3792
+ background: var(--surface-2);
3793
+ text-decoration: none;
3794
+ }
3795
+
3796
+ .nav-item-group > button.active,
3797
+ .nav-item-group > a.active {
3798
+ background: var(--surface-2);
3799
+ color: var(--text);
3800
+ font-weight: 500;
3801
+ box-shadow: inset 2px 0 0 var(--accent);
3802
+ }
3803
+
3804
+ .nav-item-group > button svg,
3805
+ .nav-item-group > a svg {
3806
+ width: 15px;
3807
+ height: 15px;
3808
+ color: var(--text-2);
3809
+ }
3810
+
3811
+ .nav-item-group > button.active svg,
3812
+ .nav-item-group > a.active svg {
3813
+ color: var(--text);
3814
+ }
3815
+
3816
+ .nav-item-group > button.child-active,
3817
+ .nav-item-group > a.child-active {
3818
+ background: var(--surface);
3819
+ color: var(--text);
3820
+ font-weight: 500;
3821
+ }
3822
+
3823
+ .nav-expand-button {
3824
+ display: inline-flex;
3825
+ align-items: center;
3826
+ justify-content: center;
3827
+ width: 22px;
3828
+ height: 22px;
3829
+ min-width: 22px;
3830
+ margin-left: auto;
3831
+ cursor: pointer;
3832
+ }
3833
+
3834
+ .nav-footer {
3835
+ margin-top: auto;
3836
+ }
3837
+
3838
+ .nav-footer > button,
3839
+ .nav-footer .nav-item-group > button,
3840
+ .nav-footer .nav-item-group > a {
3841
+ display: inline-flex;
3842
+ align-items: center;
3843
+ gap: 8px;
3844
+ width: 100%;
3845
+ height: 30px;
3846
+ padding: 0 8px;
3847
+ border-radius: 5px;
3848
+ border: 1px solid var(--border-strong);
3849
+ background: var(--surface);
3850
+ color: var(--text-2);
3851
+ font-size: 13.5px;
3852
+ }
3853
+
3854
+ .nav-footer > button:hover,
3855
+ .nav-footer .nav-item-group > button:hover,
3856
+ .nav-footer .nav-item-group > a:hover {
3857
+ border-color: var(--danger);
3858
+ background: var(--danger-soft);
3859
+ color: var(--danger);
3860
+ }
3861
+
3862
+ .brand {
3863
+ grid-template-columns: 26px minmax(0, 1fr);
3864
+ column-gap: 10px;
3865
+ row-gap: 0;
3866
+ margin: 0 4px 12px;
3867
+ }
3868
+
3869
+ .brand-logo {
3870
+ width: 26px;
3871
+ height: 26px;
3872
+ border-radius: 5px;
3873
+ object-fit: cover;
3874
+ }
3875
+
3876
+ .brand-title {
3877
+ color: var(--text);
3878
+ font-size: 14px;
3879
+ font-weight: 600;
3880
+ letter-spacing: 0;
3881
+ }
3882
+
3883
+ .brand-subtitle {
3884
+ color: var(--text-3);
3885
+ font-size: 11px;
3886
+ font-weight: 500;
3887
+ letter-spacing: 0.06em;
3888
+ }
3889
+
3890
+ .nav-links {
3891
+ margin-top: 14px;
3892
+ padding-top: 10px;
3893
+ border-top: 1px solid var(--border);
3894
+ }
3895
+
3896
+ .nav-links p {
3897
+ margin: 0 0 4px;
3898
+ padding: 0 8px;
3899
+ color: var(--text-3);
3900
+ font-size: 11px;
3901
+ font-weight: 600;
3902
+ letter-spacing: 0.06em;
3903
+ }
3904
+
3905
+ .nav-links a {
3906
+ gap: 8px;
3907
+ min-height: 28px;
3908
+ margin: 0 0 2px;
3909
+ padding: 0 8px;
3910
+ border-radius: 5px;
3911
+ color: var(--text);
3912
+ font-size: 13px;
3913
+ }
3914
+
3915
+ .nav-links a:hover {
3916
+ background: var(--surface-2);
3917
+ text-decoration: none;
3918
+ }
3919
+
3920
+ .nav-links a .trailing-icon {
3921
+ width: 12px;
3922
+ height: 12px;
3923
+ color: var(--text-3);
3924
+ }
3925
+
3926
+ main {
3927
+ width: 100%;
3928
+ max-width: none;
3929
+ min-width: 0;
3930
+ min-height: 0;
3931
+ height: 100%;
3932
+ box-sizing: border-box;
3933
+ padding: 0;
3934
+ overflow: auto;
3935
+ }
3936
+
3937
+ .main-content {
3938
+ width: 100%;
3939
+ max-width: 1080px;
3940
+ box-sizing: border-box;
3941
+ padding: 16px 20px 24px;
3942
+ }
3943
+
3944
+ .nav-resize-handle {
3945
+ position: absolute;
3946
+ z-index: 20;
3947
+ top: 0;
3948
+ bottom: 0;
3949
+ left: calc(var(--control-panel-nav-width) - 3px);
3950
+ width: 6px;
3951
+ cursor: col-resize;
3952
+ touch-action: none;
3953
+ }
3954
+
3955
+ .nav-resize-handle::after {
3956
+ content: "";
3957
+ position: absolute;
3958
+ top: 0;
3959
+ bottom: 0;
3960
+ left: 2px;
3961
+ width: 1px;
3962
+ background: transparent;
3963
+ transition: background 0.08s ease;
3964
+ }
3965
+
3966
+ .nav-resize-handle:hover::after,
3967
+ .nav-resize-handle:focus-visible::after {
3968
+ background: var(--accent);
3969
+ }
3970
+
3971
+ .nav-resize-handle:focus-visible {
3972
+ outline: none;
3973
+ box-shadow: var(--ring);
3974
+ }
3975
+
3976
+ .page-view,
3977
+ .tasks-panel,
3978
+ .tasks-view {
3979
+ gap: 10px;
3980
+ }
3981
+
3982
+ .page-heading,
3983
+ .page-toolbar,
3984
+ .tasks-panel-title,
3985
+ .repo-heading {
3986
+ gap: 8px;
3987
+ min-height: 30px;
3988
+ margin-bottom: 0;
3989
+ }
3990
+
3991
+ .page-title {
3992
+ color: var(--text-2);
3993
+ font-size: 12px;
3994
+ font-weight: 600;
3995
+ line-height: 30px;
3996
+ letter-spacing: 0.06em;
3997
+ }
3998
+
3999
+ .section-intro {
4000
+ margin: 0 0 10px;
4001
+ color: var(--text-2);
4002
+ font-size: 13px;
4003
+ }
4004
+
4005
+ .platform-banner,
4006
+ .ai-creating-banner {
4007
+ margin: 0 0 10px;
4008
+ padding: 8px 10px;
4009
+ border-radius: var(--radius);
4010
+ font-size: 13px;
4011
+ font-weight: 500;
4012
+ }
4013
+
4014
+ .platform-modal-note {
4015
+ color: var(--warning);
4016
+ font-size: 12px;
4017
+ font-weight: 500;
4018
+ }
4019
+
4020
+ .primary,
4021
+ .danger,
4022
+ .secondary-button,
4023
+ .filter-toggle {
4024
+ height: 30px;
4025
+ min-height: 30px;
4026
+ padding: 0 11px;
4027
+ border-radius: 5px;
4028
+ font-size: 13px;
4029
+ font-weight: 500;
4030
+ line-height: 1;
4031
+ }
4032
+
4033
+ .primary { margin-top: 0; }
4034
+
4035
+ .danger {
4036
+ margin-top: 0;
4037
+ border: 1px solid var(--border-strong);
4038
+ color: var(--danger);
4039
+ background: var(--surface);
4040
+ }
4041
+
4042
+ .danger:hover {
4043
+ border-color: var(--danger);
4044
+ background: var(--danger-soft);
4045
+ }
4046
+
4047
+ .icon-button {
4048
+ width: 30px;
4049
+ height: 30px;
4050
+ border-radius: 5px;
4051
+ }
4052
+
4053
+ input[type="text"],
4054
+ input[type="search"],
4055
+ input:not([type]),
4056
+ select {
4057
+ height: 30px;
4058
+ padding: 0 9px;
4059
+ border: 1px solid var(--border-strong);
4060
+ border-radius: 5px;
4061
+ background: var(--surface);
4062
+ color: var(--text);
4063
+ font-size: 13.5px;
4064
+ }
4065
+
4066
+ textarea {
4067
+ min-height: 84px;
4068
+ padding: 8px 10px;
4069
+ border-color: var(--border-strong);
4070
+ border-radius: 5px;
4071
+ background: var(--surface);
4072
+ color: var(--text);
4073
+ font-size: 13.5px;
4074
+ line-height: 1.45;
4075
+ }
4076
+
4077
+ .tasks-view {
4078
+ height: calc(100vh - 32px);
4079
+ height: calc(100dvh - 32px);
4080
+ }
4081
+
4082
+ .task-row {
4083
+ grid-template-columns: 16px minmax(0, 1fr);
4084
+ gap: 10px;
4085
+ padding: 10px 12px;
4086
+ border-radius: 0;
4087
+ }
4088
+
4089
+ .task-controls,
4090
+ .task-filter-fields {
4091
+ gap: 8px;
4092
+ }
4093
+
4094
+ .task-filter-fields input,
4095
+ .task-filter-fields select,
4096
+ .repo-form-grid input,
4097
+ .repo-form-grid select,
4098
+ .repo-workflow-editor input,
4099
+ .repo-workflow-editor select,
4100
+ .repo-control-workflow-grid input,
4101
+ .repo-control-workflow-grid select {
4102
+ min-height: 30px;
4103
+ border-color: var(--border-strong);
4104
+ border-radius: 5px;
4105
+ background: var(--surface);
4106
+ color: var(--text);
4107
+ }
4108
+
4109
+ .empty-panel {
4110
+ min-height: 120px;
4111
+ padding: 18px;
4112
+ border: 1px dashed var(--border-strong);
4113
+ border-radius: var(--radius);
4114
+ }
4115
+
4116
+ .modal { border-radius: 8px; }
4117
+ .drawer { border-radius: 0; }
4118
+
4119
+ @media (max-width: 820px) {
4120
+ .shell {
4121
+ grid-template-columns: 1fr;
4122
+ }
4123
+
4124
+ nav {
4125
+ position: fixed;
4126
+ inset: 0 auto 0 0;
4127
+ z-index: 40;
4128
+ width: min(280px, 86vw);
4129
+ height: 100vh;
4130
+ height: 100dvh;
4131
+ transform: translateX(-100%);
4132
+ transition: transform 0.16s ease;
4133
+ box-shadow: var(--shadow-modal);
4134
+ }
4135
+
4136
+ nav.open {
4137
+ transform: translateX(0);
4138
+ }
4139
+
4140
+ main {
4141
+ padding: 0;
4142
+ }
4143
+
4144
+ .main-content {
4145
+ padding: 12px;
4146
+ }
4147
+
4148
+ .nav-resize-handle {
4149
+ display: none;
4150
+ }
4151
+
4152
+ .nav-menu-button,
4153
+ .page-menu-button {
4154
+ display: inline-flex;
4155
+ }
4156
+ }