strix-agent 0.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. strix/__init__.py +0 -0
  2. strix/agents/StrixAgent/__init__.py +4 -0
  3. strix/agents/StrixAgent/strix_agent.py +89 -0
  4. strix/agents/StrixAgent/system_prompt.jinja +404 -0
  5. strix/agents/__init__.py +10 -0
  6. strix/agents/base_agent.py +518 -0
  7. strix/agents/state.py +163 -0
  8. strix/interface/__init__.py +4 -0
  9. strix/interface/assets/tui_styles.tcss +694 -0
  10. strix/interface/cli.py +230 -0
  11. strix/interface/main.py +500 -0
  12. strix/interface/tool_components/__init__.py +39 -0
  13. strix/interface/tool_components/agents_graph_renderer.py +123 -0
  14. strix/interface/tool_components/base_renderer.py +62 -0
  15. strix/interface/tool_components/browser_renderer.py +120 -0
  16. strix/interface/tool_components/file_edit_renderer.py +99 -0
  17. strix/interface/tool_components/finish_renderer.py +31 -0
  18. strix/interface/tool_components/notes_renderer.py +108 -0
  19. strix/interface/tool_components/proxy_renderer.py +255 -0
  20. strix/interface/tool_components/python_renderer.py +34 -0
  21. strix/interface/tool_components/registry.py +72 -0
  22. strix/interface/tool_components/reporting_renderer.py +53 -0
  23. strix/interface/tool_components/scan_info_renderer.py +64 -0
  24. strix/interface/tool_components/terminal_renderer.py +131 -0
  25. strix/interface/tool_components/thinking_renderer.py +29 -0
  26. strix/interface/tool_components/user_message_renderer.py +43 -0
  27. strix/interface/tool_components/web_search_renderer.py +28 -0
  28. strix/interface/tui.py +1274 -0
  29. strix/interface/utils.py +559 -0
  30. strix/llm/__init__.py +15 -0
  31. strix/llm/config.py +20 -0
  32. strix/llm/llm.py +465 -0
  33. strix/llm/memory_compressor.py +212 -0
  34. strix/llm/request_queue.py +87 -0
  35. strix/llm/utils.py +87 -0
  36. strix/prompts/README.md +64 -0
  37. strix/prompts/__init__.py +109 -0
  38. strix/prompts/cloud/.gitkeep +0 -0
  39. strix/prompts/coordination/root_agent.jinja +41 -0
  40. strix/prompts/custom/.gitkeep +0 -0
  41. strix/prompts/frameworks/fastapi.jinja +142 -0
  42. strix/prompts/frameworks/nextjs.jinja +126 -0
  43. strix/prompts/protocols/graphql.jinja +215 -0
  44. strix/prompts/reconnaissance/.gitkeep +0 -0
  45. strix/prompts/technologies/firebase_firestore.jinja +177 -0
  46. strix/prompts/technologies/supabase.jinja +189 -0
  47. strix/prompts/vulnerabilities/authentication_jwt.jinja +147 -0
  48. strix/prompts/vulnerabilities/broken_function_level_authorization.jinja +146 -0
  49. strix/prompts/vulnerabilities/business_logic.jinja +171 -0
  50. strix/prompts/vulnerabilities/csrf.jinja +174 -0
  51. strix/prompts/vulnerabilities/idor.jinja +195 -0
  52. strix/prompts/vulnerabilities/information_disclosure.jinja +222 -0
  53. strix/prompts/vulnerabilities/insecure_file_uploads.jinja +188 -0
  54. strix/prompts/vulnerabilities/mass_assignment.jinja +141 -0
  55. strix/prompts/vulnerabilities/open_redirect.jinja +177 -0
  56. strix/prompts/vulnerabilities/path_traversal_lfi_rfi.jinja +142 -0
  57. strix/prompts/vulnerabilities/race_conditions.jinja +164 -0
  58. strix/prompts/vulnerabilities/rce.jinja +154 -0
  59. strix/prompts/vulnerabilities/sql_injection.jinja +151 -0
  60. strix/prompts/vulnerabilities/ssrf.jinja +135 -0
  61. strix/prompts/vulnerabilities/subdomain_takeover.jinja +155 -0
  62. strix/prompts/vulnerabilities/xss.jinja +169 -0
  63. strix/prompts/vulnerabilities/xxe.jinja +184 -0
  64. strix/runtime/__init__.py +19 -0
  65. strix/runtime/docker_runtime.py +399 -0
  66. strix/runtime/runtime.py +29 -0
  67. strix/runtime/tool_server.py +205 -0
  68. strix/telemetry/__init__.py +4 -0
  69. strix/telemetry/tracer.py +337 -0
  70. strix/tools/__init__.py +64 -0
  71. strix/tools/agents_graph/__init__.py +16 -0
  72. strix/tools/agents_graph/agents_graph_actions.py +621 -0
  73. strix/tools/agents_graph/agents_graph_actions_schema.xml +226 -0
  74. strix/tools/argument_parser.py +121 -0
  75. strix/tools/browser/__init__.py +4 -0
  76. strix/tools/browser/browser_actions.py +236 -0
  77. strix/tools/browser/browser_actions_schema.xml +183 -0
  78. strix/tools/browser/browser_instance.py +533 -0
  79. strix/tools/browser/tab_manager.py +342 -0
  80. strix/tools/executor.py +305 -0
  81. strix/tools/file_edit/__init__.py +4 -0
  82. strix/tools/file_edit/file_edit_actions.py +141 -0
  83. strix/tools/file_edit/file_edit_actions_schema.xml +128 -0
  84. strix/tools/finish/__init__.py +4 -0
  85. strix/tools/finish/finish_actions.py +174 -0
  86. strix/tools/finish/finish_actions_schema.xml +45 -0
  87. strix/tools/notes/__init__.py +14 -0
  88. strix/tools/notes/notes_actions.py +191 -0
  89. strix/tools/notes/notes_actions_schema.xml +150 -0
  90. strix/tools/proxy/__init__.py +20 -0
  91. strix/tools/proxy/proxy_actions.py +101 -0
  92. strix/tools/proxy/proxy_actions_schema.xml +267 -0
  93. strix/tools/proxy/proxy_manager.py +785 -0
  94. strix/tools/python/__init__.py +4 -0
  95. strix/tools/python/python_actions.py +47 -0
  96. strix/tools/python/python_actions_schema.xml +131 -0
  97. strix/tools/python/python_instance.py +172 -0
  98. strix/tools/python/python_manager.py +131 -0
  99. strix/tools/registry.py +196 -0
  100. strix/tools/reporting/__init__.py +6 -0
  101. strix/tools/reporting/reporting_actions.py +63 -0
  102. strix/tools/reporting/reporting_actions_schema.xml +30 -0
  103. strix/tools/terminal/__init__.py +4 -0
  104. strix/tools/terminal/terminal_actions.py +35 -0
  105. strix/tools/terminal/terminal_actions_schema.xml +146 -0
  106. strix/tools/terminal/terminal_manager.py +151 -0
  107. strix/tools/terminal/terminal_session.py +447 -0
  108. strix/tools/thinking/__init__.py +4 -0
  109. strix/tools/thinking/thinking_actions.py +18 -0
  110. strix/tools/thinking/thinking_actions_schema.xml +52 -0
  111. strix/tools/web_search/__init__.py +4 -0
  112. strix/tools/web_search/web_search_actions.py +80 -0
  113. strix/tools/web_search/web_search_actions_schema.xml +83 -0
  114. strix_agent-0.4.0.dist-info/LICENSE +201 -0
  115. strix_agent-0.4.0.dist-info/METADATA +282 -0
  116. strix_agent-0.4.0.dist-info/RECORD +118 -0
  117. strix_agent-0.4.0.dist-info/WHEEL +4 -0
  118. strix_agent-0.4.0.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,694 @@
1
+ Screen {
2
+ background: #1a1a1a;
3
+ color: #d4d4d4;
4
+ }
5
+
6
+ #splash_screen {
7
+ height: 100%;
8
+ width: 100%;
9
+ background: #1a1a1a;
10
+ color: #22c55e;
11
+ content-align: center middle;
12
+ text-align: center;
13
+ }
14
+
15
+ #splash_content {
16
+ width: auto;
17
+ height: auto;
18
+ background: transparent;
19
+ text-align: center;
20
+ padding: 2;
21
+ }
22
+
23
+ #main_container {
24
+ height: 100%;
25
+ padding: 0;
26
+ margin: 0;
27
+ background: #1a1a1a;
28
+ }
29
+
30
+ #content_container {
31
+ height: 1fr;
32
+ padding: 0;
33
+ background: transparent;
34
+ }
35
+
36
+ #sidebar {
37
+ width: 25%;
38
+ background: transparent;
39
+ margin-left: 1;
40
+ }
41
+
42
+ #agents_tree {
43
+ height: 1fr;
44
+ background: transparent;
45
+ border: round #262626;
46
+ border-title-color: #a8a29e;
47
+ border-title-style: bold;
48
+ padding: 1;
49
+ margin-bottom: 0;
50
+ }
51
+
52
+ #stats_display {
53
+ height: auto;
54
+ max-height: 15;
55
+ background: transparent;
56
+ padding: 0;
57
+ margin: 0;
58
+ }
59
+
60
+ #chat_area_container {
61
+ width: 75%;
62
+ background: transparent;
63
+ }
64
+
65
+ #chat_history {
66
+ height: 1fr;
67
+ background: transparent;
68
+ border: round #1a1a1a;
69
+ padding: 0;
70
+ margin-bottom: 0;
71
+ margin-right: 0;
72
+ scrollbar-background: #0f0f0f;
73
+ scrollbar-color: #262626;
74
+ scrollbar-corner-color: #0f0f0f;
75
+ scrollbar-size: 1 1;
76
+ }
77
+
78
+ #agent_status_display {
79
+ height: 1;
80
+ background: transparent;
81
+ margin: 0;
82
+ padding: 0 1;
83
+ }
84
+
85
+ #agent_status_display.hidden {
86
+ display: none;
87
+ }
88
+
89
+ #status_text {
90
+ width: 1fr;
91
+ height: 100%;
92
+ background: transparent;
93
+ color: #a3a3a3;
94
+ text-align: left;
95
+ content-align: left middle;
96
+ text-style: italic;
97
+ margin: 0;
98
+ padding: 0;
99
+ }
100
+
101
+ #keymap_indicator {
102
+ width: auto;
103
+ height: 100%;
104
+ background: transparent;
105
+ color: #737373;
106
+ text-align: right;
107
+ content-align: right middle;
108
+ text-style: none;
109
+ margin: 0;
110
+ padding: 0;
111
+ }
112
+
113
+ #chat_input_container {
114
+ height: 3;
115
+ background: transparent;
116
+ border: round #525252;
117
+ margin-right: 0;
118
+ padding: 0;
119
+ layout: horizontal;
120
+ align-vertical: middle;
121
+ }
122
+
123
+ #chat_input_container:focus-within {
124
+ border: round #22c55e;
125
+ }
126
+
127
+ #chat_input_container:focus-within #chat_prompt {
128
+ color: #22c55e;
129
+ text-style: bold;
130
+ }
131
+
132
+ #chat_prompt {
133
+ width: auto;
134
+ height: 100%;
135
+ padding: 0 0 0 1;
136
+ color: #737373;
137
+ content-align-vertical: middle;
138
+ }
139
+
140
+ #chat_history:focus {
141
+ border: round #22c55e;
142
+ }
143
+
144
+ #chat_input {
145
+ width: 1fr;
146
+ height: 100%;
147
+ background: #121212;
148
+ border: none;
149
+ color: #d4d4d4;
150
+ padding: 0;
151
+ margin: 0;
152
+ }
153
+
154
+ #chat_input:focus {
155
+ border: none;
156
+ }
157
+
158
+ #chat_input > .text-area--placeholder {
159
+ color: #525252;
160
+ text-style: italic;
161
+ }
162
+
163
+ #chat_input > .text-area--cursor {
164
+ color: #22c55e;
165
+ background: #22c55e;
166
+ }
167
+
168
+ .chat-placeholder {
169
+ width: 100%;
170
+ height: 100%;
171
+ content-align: center middle;
172
+ text-align: center;
173
+ color: #737373;
174
+ text-style: italic;
175
+ }
176
+
177
+ .chat-content {
178
+ margin: 0 !important;
179
+ margin-top: 0 !important;
180
+ margin-bottom: 0 !important;
181
+ padding: 0 1;
182
+ background: transparent;
183
+ width: 100%;
184
+ }
185
+
186
+ .chat-message {
187
+ margin-bottom: 0;
188
+ padding: 0;
189
+ background: transparent;
190
+ width: 100%;
191
+ }
192
+
193
+ .user-message {
194
+ color: #e5e5e5;
195
+ border-left: thick #3b82f6;
196
+ padding-left: 1;
197
+ margin-bottom: 1;
198
+ }
199
+
200
+ .tool-call {
201
+ margin: 0 !important;
202
+ margin-top: 0 !important;
203
+ margin-bottom: 0 !important;
204
+ padding: 0 1;
205
+ background: #0a0a0a;
206
+ border: round #1a1a1a;
207
+ border-left: thick #f59e0b;
208
+ width: 100%;
209
+ }
210
+
211
+ .tool-call.status-completed {
212
+ border-left: thick #22c55e;
213
+ background: #0d1f12;
214
+ margin: 0 !important;
215
+ margin-top: 0 !important;
216
+ margin-bottom: 0 !important;
217
+ }
218
+
219
+ .tool-call.status-running {
220
+ border-left: thick #f59e0b;
221
+ background: #1f1611;
222
+ margin: 0 !important;
223
+ margin-top: 0 !important;
224
+ margin-bottom: 0 !important;
225
+ }
226
+
227
+ .tool-call.status-failed,
228
+ .tool-call.status-error {
229
+ border-left: thick #ef4444;
230
+ background: #1f0d0d;
231
+ margin: 0 !important;
232
+ margin-top: 0 !important;
233
+ margin-bottom: 0 !important;
234
+ }
235
+
236
+ .browser-tool,
237
+ .terminal-tool,
238
+ .python-tool,
239
+ .agents-graph-tool,
240
+ .file-edit-tool,
241
+ .proxy-tool,
242
+ .notes-tool,
243
+ .thinking-tool,
244
+ .web-search-tool,
245
+ .finish-tool,
246
+ .reporting-tool,
247
+ .scan-info-tool,
248
+ .subagent-info-tool {
249
+ margin: 0 !important;
250
+ margin-top: 0 !important;
251
+ margin-bottom: 0 !important;
252
+ }
253
+
254
+ .browser-tool {
255
+ border-left: thick #06b6d4;
256
+ }
257
+
258
+ .browser-tool.status-completed {
259
+ border-left: thick #06b6d4;
260
+ background: transparent;
261
+ margin: 0 !important;
262
+ margin-top: 0 !important;
263
+ margin-bottom: 0 !important;
264
+ }
265
+
266
+ .browser-tool.status-running {
267
+ border-left: thick #0891b2;
268
+ background: transparent;
269
+ margin: 0 !important;
270
+ margin-top: 0 !important;
271
+ margin-bottom: 0 !important;
272
+ }
273
+
274
+ .terminal-tool {
275
+ border-left: thick #22c55e;
276
+ }
277
+
278
+ .terminal-tool.status-completed {
279
+ border-left: thick #22c55e;
280
+ background: transparent;
281
+ }
282
+
283
+ .terminal-tool.status-running {
284
+ border-left: thick #16a34a;
285
+ background: transparent;
286
+ }
287
+
288
+ .python-tool {
289
+ border-left: thick #3b82f6;
290
+ }
291
+
292
+ .python-tool.status-completed {
293
+ border-left: thick #3b82f6;
294
+ background: transparent;
295
+ }
296
+
297
+ .python-tool.status-running {
298
+ border-left: thick #2563eb;
299
+ background: transparent;
300
+ }
301
+
302
+ .agents-graph-tool {
303
+ border-left: thick #fbbf24;
304
+ }
305
+
306
+ .agents-graph-tool.status-completed {
307
+ border-left: thick #fbbf24;
308
+ background: transparent;
309
+ }
310
+
311
+ .agents-graph-tool.status-running {
312
+ border-left: thick #f59e0b;
313
+ background: transparent;
314
+ }
315
+
316
+ .file-edit-tool {
317
+ border-left: thick #10b981;
318
+ }
319
+
320
+ .file-edit-tool.status-completed {
321
+ border-left: thick #10b981;
322
+ background: transparent;
323
+ }
324
+
325
+ .file-edit-tool.status-running {
326
+ border-left: thick #059669;
327
+ background: transparent;
328
+ }
329
+
330
+ .proxy-tool {
331
+ border-left: thick #06b6d4;
332
+ }
333
+
334
+ .proxy-tool.status-completed {
335
+ border-left: thick #06b6d4;
336
+ background: transparent;
337
+ }
338
+
339
+ .proxy-tool.status-running {
340
+ border-left: thick #0891b2;
341
+ background: transparent;
342
+ }
343
+
344
+ .notes-tool {
345
+ border-left: thick #fbbf24;
346
+ }
347
+
348
+ .notes-tool.status-completed {
349
+ border-left: thick #fbbf24;
350
+ background: transparent;
351
+ }
352
+
353
+ .notes-tool.status-running {
354
+ border-left: thick #f59e0b;
355
+ background: transparent;
356
+ }
357
+
358
+ .thinking-tool {
359
+ border-left: thick #a855f7;
360
+ }
361
+
362
+ .thinking-tool.status-completed {
363
+ border-left: thick #a855f7;
364
+ background: transparent;
365
+ }
366
+
367
+ .thinking-tool.status-running {
368
+ border-left: thick #9333ea;
369
+ background: transparent;
370
+ }
371
+
372
+ .web-search-tool {
373
+ border-left: thick #22c55e;
374
+ }
375
+
376
+ .web-search-tool.status-completed {
377
+ border-left: thick #22c55e;
378
+ background: transparent;
379
+ }
380
+
381
+ .web-search-tool.status-running {
382
+ border-left: thick #16a34a;
383
+ background: transparent;
384
+ }
385
+
386
+ .finish-tool {
387
+ border-left: thick #dc2626;
388
+ }
389
+
390
+ .finish-tool.status-completed {
391
+ border-left: thick #dc2626;
392
+ background: transparent;
393
+ }
394
+
395
+ .finish-tool.status-running {
396
+ border-left: thick #b91c1c;
397
+ background: transparent;
398
+ }
399
+
400
+ .reporting-tool {
401
+ border-left: thick #ea580c;
402
+ }
403
+
404
+ .reporting-tool.status-completed {
405
+ border-left: thick #ea580c;
406
+ background: transparent;
407
+ }
408
+
409
+ .reporting-tool.status-running {
410
+ border-left: thick #c2410c;
411
+ background: transparent;
412
+ }
413
+
414
+ .scan-info-tool {
415
+ border-left: thick #22c55e;
416
+ background: transparent;
417
+ margin: 0 !important;
418
+ margin-top: 0 !important;
419
+ margin-bottom: 0 !important;
420
+ }
421
+
422
+ .scan-info-tool.status-completed {
423
+ border-left: thick #22c55e;
424
+ background: transparent;
425
+ }
426
+
427
+ .scan-info-tool.status-running {
428
+ border-left: thick #16a34a;
429
+ background: transparent;
430
+ }
431
+
432
+ .subagent-info-tool {
433
+ border-left: thick #22c55e;
434
+ background: transparent;
435
+ margin: 0 !important;
436
+ margin-top: 0 !important;
437
+ margin-bottom: 0 !important;
438
+ }
439
+
440
+ .subagent-info-tool.status-completed {
441
+ border-left: thick #22c55e;
442
+ background: transparent;
443
+ }
444
+
445
+ .subagent-info-tool.status-running {
446
+ border-left: thick #16a34a;
447
+ background: transparent;
448
+ }
449
+
450
+ Tree {
451
+ background: transparent;
452
+ color: #e7e5e4;
453
+ scrollbar-background: transparent;
454
+ scrollbar-color: #404040;
455
+ scrollbar-corner-color: transparent;
456
+ scrollbar-size: 1 1;
457
+ }
458
+
459
+ Tree > .tree--label {
460
+ text-style: bold;
461
+ color: #a8a29e;
462
+ background: transparent;
463
+ padding: 0 1;
464
+ margin-bottom: 1;
465
+ border-bottom: solid #262626;
466
+ text-align: center;
467
+ }
468
+
469
+ .tree--node {
470
+ height: 1;
471
+ padding: 0;
472
+ margin: 0;
473
+ }
474
+
475
+ .tree--node-label {
476
+ color: #d6d3d1;
477
+ background: transparent;
478
+ text-style: none;
479
+ padding: 0 1;
480
+ margin: 0 1;
481
+ }
482
+
483
+ .tree--node:hover .tree--node-label {
484
+ background: transparent;
485
+ color: #fafaf9;
486
+ text-style: bold;
487
+ border-left: solid #a8a29e;
488
+ }
489
+
490
+ .tree--node.-selected .tree--node-label {
491
+ background: transparent;
492
+ color: #fafaf9;
493
+ text-style: bold;
494
+ border-left: heavy #d6d3d1;
495
+ }
496
+
497
+ .tree--node.-expanded .tree--node-label {
498
+ text-style: bold;
499
+ color: #fafaf9;
500
+ background: transparent;
501
+ border-left: solid #78716c;
502
+ }
503
+
504
+ Tree:focus {
505
+ border: round #262626;
506
+ }
507
+
508
+ Tree:focus > .tree--label {
509
+ color: #fafaf9;
510
+ text-style: bold;
511
+ background: transparent;
512
+ }
513
+
514
+ .tree--node .tree--node .tree--node-label {
515
+ color: #a8a29e;
516
+ padding-left: 2;
517
+ border: none;
518
+ background: transparent;
519
+ margin-left: 1;
520
+ }
521
+
522
+ .tree--node .tree--node:hover .tree--node-label {
523
+ background: transparent;
524
+ color: #e7e5e4;
525
+ }
526
+
527
+ .tree--node .tree--node .tree--node .tree--node-label {
528
+ color: #78716c;
529
+ padding-left: 3;
530
+ text-style: none;
531
+ border: none;
532
+ background: transparent;
533
+ margin-left: 2;
534
+ }
535
+
536
+ StopAgentScreen {
537
+ align: center middle;
538
+ background: $background 0%;
539
+ }
540
+
541
+ #stop_agent_dialog {
542
+ grid-size: 1;
543
+ grid-gutter: 1;
544
+ grid-rows: auto auto;
545
+ padding: 1;
546
+ width: 30;
547
+ height: auto;
548
+ border: round #a3a3a3;
549
+ background: #1a1a1a 98%;
550
+ }
551
+
552
+ #stop_agent_title {
553
+ color: #a3a3a3;
554
+ text-style: bold;
555
+ text-align: center;
556
+ width: 100%;
557
+ margin-bottom: 0;
558
+ }
559
+
560
+ #stop_agent_buttons {
561
+ grid-size: 2;
562
+ grid-gutter: 1;
563
+ grid-columns: 1fr 1fr;
564
+ width: 100%;
565
+ height: 1;
566
+ }
567
+
568
+ #stop_agent_buttons Button {
569
+ height: 1;
570
+ min-height: 1;
571
+ border: none;
572
+ text-style: bold;
573
+ }
574
+
575
+ #stop_agent {
576
+ background: transparent;
577
+ color: #ef4444;
578
+ border: none;
579
+ }
580
+
581
+ #stop_agent:hover, #stop_agent:focus {
582
+ background: #ef4444;
583
+ color: #ffffff;
584
+ border: none;
585
+ }
586
+
587
+ #cancel_stop {
588
+ background: transparent;
589
+ color: #737373;
590
+ border: none;
591
+ }
592
+
593
+ #cancel_stop:hover, #cancel_stop:focus {
594
+ background:rgb(54, 54, 54);
595
+ color: #ffffff;
596
+ border: none;
597
+ }
598
+
599
+ QuitScreen {
600
+ align: center middle;
601
+ background: $background 0%;
602
+ }
603
+
604
+ #quit_dialog {
605
+ grid-size: 1;
606
+ grid-gutter: 1;
607
+ grid-rows: auto auto;
608
+ padding: 1;
609
+ width: 24;
610
+ height: auto;
611
+ border: round #525252;
612
+ background: #1a1a1a 98%;
613
+ }
614
+
615
+ #quit_title {
616
+ color: #d4d4d4;
617
+ text-style: bold;
618
+ text-align: center;
619
+ width: 100%;
620
+ margin-bottom: 0;
621
+ }
622
+
623
+ #quit_buttons {
624
+ grid-size: 2;
625
+ grid-gutter: 1;
626
+ grid-columns: 1fr 1fr;
627
+ width: 100%;
628
+ height: 1;
629
+ }
630
+
631
+ #quit_buttons Button {
632
+ height: 1;
633
+ min-height: 1;
634
+ border: none;
635
+ text-style: bold;
636
+ }
637
+
638
+ #quit {
639
+ background: transparent;
640
+ color: #ef4444;
641
+ border: none;
642
+ }
643
+
644
+ #quit:hover, #quit:focus {
645
+ background: #ef4444;
646
+ color: #ffffff;
647
+ border: none;
648
+ }
649
+
650
+ #cancel {
651
+ background: transparent;
652
+ color: #737373;
653
+ border: none;
654
+ }
655
+
656
+ #cancel:hover, #cancel:focus {
657
+ background:rgb(54, 54, 54);
658
+ color: #ffffff;
659
+ border: none;
660
+ }
661
+
662
+ HelpScreen {
663
+ align: center middle;
664
+ background: $background 0%;
665
+ }
666
+
667
+ #dialog {
668
+ grid-size: 1;
669
+ grid-gutter: 0 1;
670
+ grid-rows: auto auto;
671
+ padding: 1 2;
672
+ width: 40;
673
+ height: auto;
674
+ border: round #22c55e;
675
+ background: #1a1a1a 98%;
676
+ }
677
+
678
+ #help_title {
679
+ color: #22c55e;
680
+ text-style: bold;
681
+ text-align: center;
682
+ width: 100%;
683
+ margin-bottom: 1;
684
+ }
685
+
686
+ #help_content {
687
+ color: #d4d4d4;
688
+ text-align: left;
689
+ width: 100%;
690
+ margin-bottom: 1;
691
+ padding: 0;
692
+ background: transparent;
693
+ text-style: none;
694
+ }