qtimetrap 0.1.1

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 (130) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +25 -0
  3. data/README.md +92 -0
  4. data/Rakefile +105 -0
  5. data/app/assets/icons/qtimetrap-icon-128.png +0 -0
  6. data/app/assets/icons/qtimetrap-icon-256.png +0 -0
  7. data/app/assets/icons/qtimetrap-icon-512.png +0 -0
  8. data/app/assets/icons/qtimetrap-icon.svg +123 -0
  9. data/app/components/entries/branch_hierarchy_helpers.rb +41 -0
  10. data/app/components/entries/leaf_archive_helpers.rb +23 -0
  11. data/app/components/entries/leaf_note_helpers.rb +118 -0
  12. data/app/components/entries/leaf_task_helpers.rb +81 -0
  13. data/app/components/entries/leaf_time_helpers.rb +105 -0
  14. data/app/components/entries/list_component.rb +118 -0
  15. data/app/components/entries/list_host_helpers.rb +27 -0
  16. data/app/components/entries/list_state_helpers.rb +59 -0
  17. data/app/components/entries/node_presentation_helpers.rb +29 -0
  18. data/app/components/entries/render_helpers.rb +25 -0
  19. data/app/components/entries/tree_helpers.rb +133 -0
  20. data/app/components/entries/tree_toolbar_helpers.rb +98 -0
  21. data/app/components/project_sidebar/archive_toggle_helpers.rb +22 -0
  22. data/app/components/project_sidebar/component.rb +125 -0
  23. data/app/components/project_sidebar/logo_helpers.rb +53 -0
  24. data/app/components/project_sidebar/project_button_helpers.rb +72 -0
  25. data/app/components/project_sidebar/project_selection_helpers.rb +94 -0
  26. data/app/components/project_sidebar/task_helpers.rb +94 -0
  27. data/app/components/project_sidebar/task_selection_helpers.rb +72 -0
  28. data/app/components/qt_ui_helpers.rb +27 -0
  29. data/app/components/tracker_controls/component.rb +80 -0
  30. data/app/components/tracker_controls/layout_builder.rb +100 -0
  31. data/app/components/tracker_controls/layout_helpers.rb +88 -0
  32. data/app/models/null_settings_store.rb +12 -0
  33. data/app/models/time_entry.rb +59 -0
  34. data/app/services/archived_entries_store.rb +71 -0
  35. data/app/services/formatters.rb +29 -0
  36. data/app/services/settings_store.rb +83 -0
  37. data/app/services/timetrap_gateway.rb +89 -0
  38. data/app/services/timetrap_gateway_logger.rb +54 -0
  39. data/app/services/timetrap_gateway_query_helpers.rb +102 -0
  40. data/app/services/timetrap_gateway_start_helpers.rb +28 -0
  41. data/app/services/timetrap_gateway_update_note_helpers.rb +48 -0
  42. data/app/services/timetrap_gateway_update_task_helpers.rb +47 -0
  43. data/app/services/timetrap_gateway_update_time_helpers.rb +50 -0
  44. data/app/styles/theme.rb +61 -0
  45. data/app/styles/themes/dark/application.qss +8 -0
  46. data/app/styles/themes/dark/entries_list.qss +235 -0
  47. data/app/styles/themes/dark/project_sidebar.qss +99 -0
  48. data/app/styles/themes/dark/snippets/app_background.qss +2 -0
  49. data/app/styles/themes/dark/snippets/button_ghost.qss +5 -0
  50. data/app/styles/themes/dark/snippets/button_start.qss +5 -0
  51. data/app/styles/themes/dark/snippets/button_stop.qss +5 -0
  52. data/app/styles/themes/dark/snippets/entries_host.qss +2 -0
  53. data/app/styles/themes/dark/snippets/entries_scroll.qss +16 -0
  54. data/app/styles/themes/dark/snippets/entry_row_day.qss +6 -0
  55. data/app/styles/themes/dark/snippets/entry_row_detail.qss +5 -0
  56. data/app/styles/themes/dark/snippets/entry_row_project.qss +6 -0
  57. data/app/styles/themes/dark/snippets/project_button.qss +5 -0
  58. data/app/styles/themes/dark/snippets/project_button_active.qss +5 -0
  59. data/app/styles/themes/dark/snippets/project_sidebar_heading.qss +2 -0
  60. data/app/styles/themes/dark/snippets/project_sidebar_logo.qss +3 -0
  61. data/app/styles/themes/dark/snippets/project_sidebar_panel.qss +2 -0
  62. data/app/styles/themes/dark/snippets/tracker_clock.qss +2 -0
  63. data/app/styles/themes/dark/snippets/tracker_input.qss +5 -0
  64. data/app/styles/themes/dark/snippets/tracker_project_label.qss +5 -0
  65. data/app/styles/themes/dark/snippets/tracker_row.qss +3 -0
  66. data/app/styles/themes/dark/snippets/tracker_summary.qss +3 -0
  67. data/app/styles/themes/dark/snippets/tracker_timer.qss +3 -0
  68. data/app/styles/themes/dark/snippets/tracker_title.qss +3 -0
  69. data/app/styles/themes/dark/snippets/tracker_topbar.qss +2 -0
  70. data/app/styles/themes/dark/tracker_controls.qss +84 -0
  71. data/app/styles/themes/light/application.qss +8 -0
  72. data/app/styles/themes/light/entries_list.qss +235 -0
  73. data/app/styles/themes/light/project_sidebar.qss +99 -0
  74. data/app/styles/themes/light/snippets/app_background.qss +2 -0
  75. data/app/styles/themes/light/snippets/button_ghost.qss +5 -0
  76. data/app/styles/themes/light/snippets/button_start.qss +5 -0
  77. data/app/styles/themes/light/snippets/button_stop.qss +5 -0
  78. data/app/styles/themes/light/snippets/entries_host.qss +2 -0
  79. data/app/styles/themes/light/snippets/entries_scroll.qss +16 -0
  80. data/app/styles/themes/light/snippets/entry_row_day.qss +6 -0
  81. data/app/styles/themes/light/snippets/entry_row_detail.qss +5 -0
  82. data/app/styles/themes/light/snippets/entry_row_project.qss +6 -0
  83. data/app/styles/themes/light/snippets/project_button.qss +5 -0
  84. data/app/styles/themes/light/snippets/project_button_active.qss +5 -0
  85. data/app/styles/themes/light/snippets/project_sidebar_heading.qss +2 -0
  86. data/app/styles/themes/light/snippets/project_sidebar_logo.qss +3 -0
  87. data/app/styles/themes/light/snippets/project_sidebar_panel.qss +2 -0
  88. data/app/styles/themes/light/snippets/tracker_clock.qss +2 -0
  89. data/app/styles/themes/light/snippets/tracker_input.qss +5 -0
  90. data/app/styles/themes/light/snippets/tracker_project_label.qss +5 -0
  91. data/app/styles/themes/light/snippets/tracker_row.qss +3 -0
  92. data/app/styles/themes/light/snippets/tracker_summary.qss +3 -0
  93. data/app/styles/themes/light/snippets/tracker_timer.qss +3 -0
  94. data/app/styles/themes/light/snippets/tracker_title.qss +3 -0
  95. data/app/styles/themes/light/snippets/tracker_topbar.qss +2 -0
  96. data/app/styles/themes/light/tracker_controls.qss +84 -0
  97. data/app/view_models/entry_nodes_builder.rb +109 -0
  98. data/app/view_models/main_view_model.rb +135 -0
  99. data/app/view_models/main_view_model_archive_mode_helpers.rb +102 -0
  100. data/app/view_models/main_view_model_entry_note_helpers.rb +30 -0
  101. data/app/view_models/main_view_model_entry_task_helpers.rb +39 -0
  102. data/app/view_models/main_view_model_entry_time_helpers.rb +45 -0
  103. data/app/view_models/main_view_model_sheet_helpers.rb +74 -0
  104. data/app/view_models/main_view_model_task_filter_helpers.rb +58 -0
  105. data/app/view_models/main_view_model_time_range_filter_helpers.rb +23 -0
  106. data/app/views/main_window.rb +126 -0
  107. data/app/views/main_window_layout_builder.rb +114 -0
  108. data/app/views/main_window_runtime.rb +123 -0
  109. data/app/views/main_window_runtime_archive_helpers.rb +26 -0
  110. data/app/views/main_window_runtime_entry_task_helpers.rb +21 -0
  111. data/app/views/main_window_runtime_entry_time_helpers.rb +17 -0
  112. data/app/views/main_window_runtime_key_helpers.rb +55 -0
  113. data/app/views/main_window_runtime_render_helpers.rb +50 -0
  114. data/app/views/main_window_splitter_toggle_bootstrap_helpers.rb +34 -0
  115. data/app/views/main_window_splitter_toggle_helpers.rb +103 -0
  116. data/app/views/main_window_splitter_toggle_hover_helpers.rb +71 -0
  117. data/app/views/main_window_splitter_toggle_layout_helpers.rb +24 -0
  118. data/app/views/main_window_ui_helpers.rb +45 -0
  119. data/app/views/window_icon_loader.rb +37 -0
  120. data/bin/qtimetrap +7 -0
  121. data/config/application.rb +87 -0
  122. data/config/environments/development.rb +5 -0
  123. data/config/environments/production.rb +5 -0
  124. data/config/initializers/theme.rb +5 -0
  125. data/config/initializers/timetrap.rb +5 -0
  126. data/lib/qtimetrap/configuration.rb +15 -0
  127. data/lib/qtimetrap/container.rb +57 -0
  128. data/lib/qtimetrap/version.rb +5 -0
  129. data/lib/qtimetrap.rb +25 -0
  130. metadata +207 -0
@@ -0,0 +1,3 @@
1
+ background-color: #0f172a;
2
+ border: 1px solid #2b3b4f;
3
+ color: #e2e8f0;
@@ -0,0 +1,3 @@
1
+ background-color: #111827;
2
+ border: 1px solid #334155;
3
+ color: #e2e8f0;
@@ -0,0 +1,3 @@
1
+ color: #e2e8f0;
2
+ font-size: 18px;
3
+ font-weight: 800;
@@ -0,0 +1,2 @@
1
+ background-color: #111827;
2
+ border: 1px solid #2b3b4f;
@@ -0,0 +1,84 @@
1
+ QWidget#topbar {
2
+ background-color: #111827;
3
+ border: 1px solid #2b3b4f;
4
+ border-radius: 10px;
5
+ }
6
+
7
+ QLabel#title_label {
8
+ color: #e2e8f0;
9
+ font-size: 18px;
10
+ font-weight: 800;
11
+ }
12
+
13
+ QLabel#clock_label {
14
+ color: #9ca3af;
15
+ font-size: 12px;
16
+ }
17
+
18
+ QWidget#tracker_row {
19
+ background-color: #0f172a;
20
+ border: 1px solid #2b3b4f;
21
+ border-radius: 10px;
22
+ color: #e2e8f0;
23
+ }
24
+
25
+ QLineEdit#task_input {
26
+ background-color: #111827;
27
+ border: 1px solid #334155;
28
+ border-radius: 8px;
29
+ color: #e2e8f0;
30
+ font-size: 14px;
31
+ padding-left: 8px;
32
+ }
33
+
34
+ QLineEdit#project_input {
35
+ background-color: #111827;
36
+ border: 1px solid #334155;
37
+ border-radius: 8px;
38
+ color: #e2e8f0;
39
+ font-size: 14px;
40
+ padding-left: 8px;
41
+ }
42
+
43
+ QLabel#timer_label {
44
+ background-color: #111827;
45
+ border: 1px solid #334155;
46
+ border-radius: 8px;
47
+ color: #e2e8f0;
48
+ }
49
+
50
+ QPushButton#start_button {
51
+ background-color: #0ea5e9;
52
+ border: 1px solid #0284c7;
53
+ border-radius: 8px;
54
+ color: #ffffff;
55
+ font-size: 14px;
56
+ font-weight: 800;
57
+ }
58
+
59
+ QPushButton#stop_button {
60
+ background-color: #ef4444;
61
+ border: 1px solid #dc2626;
62
+ border-radius: 8px;
63
+ color: #ffffff;
64
+ font-size: 14px;
65
+ font-weight: 800;
66
+ }
67
+
68
+ QPushButton#theme_button,
69
+ QPushButton#refresh_button {
70
+ background-color: #111827;
71
+ border: 1px solid #334155;
72
+ border-radius: 8px;
73
+ color: #cbd5e1;
74
+ font-size: 13px;
75
+ font-weight: 700;
76
+ }
77
+
78
+ QLabel#summary_label {
79
+ background-color: #0f172a;
80
+ border: 1px solid #2b3b4f;
81
+ border-radius: 8px;
82
+ color: #e2e8f0;
83
+ padding: 0 10px;
84
+ }
@@ -0,0 +1,8 @@
1
+ QWidget#main_window {
2
+ background-color: #eef2f5;
3
+ }
4
+
5
+ QLabel#app_background {
6
+ background-color: #eef2f5;
7
+ border: 1px solid #d6dde5;
8
+ }
@@ -0,0 +1,235 @@
1
+ QScrollArea#entries_scroll {
2
+ background-color: #f3f6fa;
3
+ border: 1px solid #d9e0e7;
4
+ border-radius: 10px;
5
+ }
6
+
7
+ QScrollArea#entries_scroll QScrollBar:vertical {
8
+ background: #eef2f6;
9
+ width: 12px;
10
+ margin: 2px;
11
+ border: 1px solid #d5dde7;
12
+ border-radius: 6px;
13
+ }
14
+
15
+ QScrollArea#entries_scroll QScrollBar::handle:vertical {
16
+ background: #9aa8b8;
17
+ min-height: 28px;
18
+ border-radius: 5px;
19
+ }
20
+
21
+ QWidget#entries_host {
22
+ background-color: #f3f6fa;
23
+ border: 0px;
24
+ }
25
+
26
+ QWidget#entries_toolbar {
27
+ background-color: #f3f6fa;
28
+ border: 0px;
29
+ }
30
+
31
+ QPushButton#entries_expand_all,
32
+ QPushButton#entries_collapse_all {
33
+ background-color: #ffffff;
34
+ border: 1px solid #cfd8e3;
35
+ border-radius: 8px;
36
+ color: #0f172a;
37
+ font-size: 12px;
38
+ font-weight: 700;
39
+ }
40
+
41
+ QCheckBox#entries_time_filter_from_toggle,
42
+ QCheckBox#entries_time_filter_to_toggle {
43
+ background-color: #ffffff;
44
+ border: 1px solid #cfd8e3;
45
+ border-radius: 8px;
46
+ color: #0f172a;
47
+ font-size: 12px;
48
+ font-weight: 700;
49
+ }
50
+
51
+ QCheckBox#entries_time_filter_from_toggle:checked,
52
+ QCheckBox#entries_time_filter_to_toggle:checked {
53
+ background-color: #dbeafe;
54
+ border: 1px solid #93c5fd;
55
+ }
56
+
57
+ QDateTimeEdit#entries_time_filter_from,
58
+ QDateTimeEdit#entries_time_filter_to {
59
+ background-color: #ffffff;
60
+ border: 1px solid #cfd8e3;
61
+ border-radius: 8px;
62
+ color: #1e293b;
63
+ font-size: 12px;
64
+ padding-left: 4px;
65
+ }
66
+
67
+ QPushButton#entry_node_week {
68
+ background-color: #2563eb;
69
+ border: 1px solid #1d4ed8;
70
+ border-radius: 8px;
71
+ color: #eff6ff;
72
+ font-size: 15px;
73
+ font-weight: 800;
74
+ text-align: left;
75
+ padding-left: 8px;
76
+ }
77
+
78
+ QPushButton#entry_node_week:hover {
79
+ background-color: #1d4ed8;
80
+ }
81
+
82
+ QPushButton#entry_node_week:pressed {
83
+ background-color: #1e40af;
84
+ }
85
+
86
+ QPushButton#entry_node_week:focus {
87
+ border: 2px solid #93c5fd;
88
+ }
89
+
90
+ QPushButton#entry_node_day {
91
+ background-color: #ecf1f6;
92
+ border: 1px solid #d5dee8;
93
+ border-radius: 8px;
94
+ color: #5b6776;
95
+ font-size: 14px;
96
+ font-weight: 700;
97
+ text-align: left;
98
+ padding-left: 8px;
99
+ }
100
+
101
+ QPushButton#entry_node_day:hover {
102
+ background-color: #e5ebf2;
103
+ }
104
+
105
+ QPushButton#entry_node_day:pressed {
106
+ background-color: #dfe6ee;
107
+ }
108
+
109
+ QPushButton#entry_node_day:focus {
110
+ border: 2px solid #93c5fd;
111
+ }
112
+
113
+ QPushButton#entry_node_project {
114
+ background-color: #ffffff;
115
+ border: 1px solid #d8e0ea;
116
+ border-radius: 8px;
117
+ color: #0f172a;
118
+ font-size: 13px;
119
+ font-weight: 700;
120
+ text-align: left;
121
+ padding-left: 8px;
122
+ }
123
+
124
+ QPushButton#entry_node_project:hover {
125
+ background-color: #f8fafc;
126
+ }
127
+
128
+ QPushButton#entry_node_project:pressed {
129
+ background-color: #f1f5f9;
130
+ }
131
+
132
+ QPushButton#entry_node_project:focus {
133
+ border: 2px solid #60a5fa;
134
+ }
135
+
136
+ QWidget#entry_node_entry_row {
137
+ background-color: #f9fbfd;
138
+ border: 1px solid #e3e8ef;
139
+ border-radius: 8px;
140
+ }
141
+
142
+ QLabel#entry_node_entry_prefix {
143
+ color: #334155;
144
+ font-size: 12px;
145
+ }
146
+
147
+ QLabel#entry_node_entry_time_sep {
148
+ color: #64748b;
149
+ font-size: 12px;
150
+ }
151
+
152
+ QLineEdit#entry_node_entry_start,
153
+ QLineEdit#entry_node_entry_end {
154
+ color: #334155;
155
+ font-size: 12px;
156
+ background: transparent;
157
+ border: 0px;
158
+ }
159
+
160
+ QLineEdit#entry_node_entry_start:read-only,
161
+ QLineEdit#entry_node_entry_end:read-only {
162
+ background: transparent;
163
+ border: 0px;
164
+ }
165
+
166
+ QLineEdit#entry_node_entry_start:focus,
167
+ QLineEdit#entry_node_entry_end:focus {
168
+ background-color: #ffffff;
169
+ border: 1px solid #d8e0ea;
170
+ border-radius: 6px;
171
+ }
172
+
173
+ QLineEdit#entry_node_entry_note {
174
+ color: #334155;
175
+ font-size: 12px;
176
+ background: transparent;
177
+ border: 0px;
178
+ padding-left: 2px;
179
+ }
180
+
181
+ QLineEdit#entry_node_entry_note:read-only {
182
+ background: transparent;
183
+ border: 0px;
184
+ }
185
+
186
+ QLineEdit#entry_node_entry_note:focus {
187
+ background-color: #ffffff;
188
+ border: 1px solid #d8e0ea;
189
+ border-radius: 6px;
190
+ padding-left: 6px;
191
+ }
192
+
193
+ QComboBox#entry_node_entry_task {
194
+ color: #334155;
195
+ font-size: 12px;
196
+ background: transparent;
197
+ border: 0px;
198
+ padding-left: 2px;
199
+ }
200
+
201
+ QComboBox#entry_node_entry_task:focus {
202
+ background-color: #ffffff;
203
+ border: 1px solid #d8e0ea;
204
+ border-radius: 6px;
205
+ }
206
+
207
+ QComboBox#entry_node_entry_task QAbstractItemView {
208
+ background-color: #ffffff;
209
+ color: #334155;
210
+ border: 1px solid #d8e0ea;
211
+ selection-background-color: #dbeafe;
212
+ selection-color: #1e293b;
213
+ }
214
+
215
+ QPushButton#entry_node_entry_archive {
216
+ background-color: #ffffff;
217
+ border: 1px solid #cfd8e3;
218
+ border-radius: 6px;
219
+ color: #475569;
220
+ font-size: 12px;
221
+ font-weight: 700;
222
+ }
223
+
224
+ QPushButton#entry_node_entry_archive:hover {
225
+ background-color: #f8fafc;
226
+ }
227
+
228
+ QLabel#entry_node_empty {
229
+ background-color: #f9fbfd;
230
+ border: 1px solid #e3e8ef;
231
+ border-radius: 8px;
232
+ color: #334155;
233
+ font-size: 12px;
234
+ padding-left: 8px;
235
+ }
@@ -0,0 +1,99 @@
1
+ QWidget#sidebar_panel {
2
+ background-color: #f7f9fb;
3
+ border-right: 1px solid #d9e0e7;
4
+ border-top-right-radius: 10px;
5
+ border-bottom-right-radius: 10px;
6
+ }
7
+
8
+ QWidget#sidebar_logo {
9
+ background-color: transparent;
10
+ }
11
+
12
+ QLabel#sidebar_logo_text {
13
+ color: #111827;
14
+ font-size: 18px;
15
+ font-weight: 800;
16
+ }
17
+
18
+ QLabel#sidebar_heading {
19
+ color: #6b7280;
20
+ font-size: 12px;
21
+ }
22
+
23
+ QLabel#sidebar_tasks_heading {
24
+ color: #6b7280;
25
+ font-size: 11px;
26
+ margin-top: 8px;
27
+ }
28
+
29
+ QPushButton#project_button {
30
+ background-color: #f7f9fb;
31
+ border: 1px solid #e2e8f0;
32
+ border-radius: 8px;
33
+ color: #334155;
34
+ font-size: 12px;
35
+ font-weight: 700;
36
+ text-align: left;
37
+ padding-left: 10px;
38
+ }
39
+
40
+ QPushButton#project_button:checked {
41
+ background-color: #dbeafe;
42
+ border: 2px solid #60a5fa;
43
+ color: #0f172a;
44
+ font-weight: 800;
45
+ }
46
+
47
+ QPushButton#project_button:disabled {
48
+ color: #94a3b8;
49
+ }
50
+
51
+ QPushButton#task_button {
52
+ background-color: #ffffff;
53
+ border: 1px solid #d7e0ea;
54
+ border-radius: 8px;
55
+ color: #334155;
56
+ font-size: 11px;
57
+ text-align: left;
58
+ padding-left: 10px;
59
+ }
60
+
61
+ QPushButton#task_button:checked {
62
+ background-color: #e2e8f0;
63
+ border: 2px solid #93c5fd;
64
+ color: #0f172a;
65
+ }
66
+
67
+ QPushButton#sidebar_toggle_button {
68
+ background-color: #ffffff;
69
+ border: 1px solid #cbd5e1;
70
+ border-radius: 8px;
71
+ color: #1e3a8a;
72
+ font-size: 13px;
73
+ font-weight: 700;
74
+ }
75
+
76
+ QPushButton#sidebar_toggle_button:hover {
77
+ background-color: #eff6ff;
78
+ border: 1px solid #93c5fd;
79
+ }
80
+
81
+ QPushButton#sidebar_archive_toggle {
82
+ background-color: #ffffff;
83
+ border: 1px solid #d7e0ea;
84
+ border-radius: 8px;
85
+ color: #64748b;
86
+ font-size: 16px;
87
+ font-weight: 700;
88
+ }
89
+
90
+ QPushButton#sidebar_archive_toggle:hover {
91
+ border: 1px solid #f59e0b;
92
+ color: #b45309;
93
+ }
94
+
95
+ QPushButton#sidebar_archive_toggle:checked {
96
+ background-color: #ffedd5;
97
+ border: 2px solid #f59e0b;
98
+ color: #92400e;
99
+ }
@@ -0,0 +1,2 @@
1
+ background-color: #eef2f5;
2
+ border: 1px solid #d6dde5;
@@ -0,0 +1,5 @@
1
+ background-color: #ffffff;
2
+ border: 1px solid #cfd8e3;
3
+ color: #0f172a;
4
+ font-size: 13px;
5
+ font-weight: 700;
@@ -0,0 +1,5 @@
1
+ background-color: #0ea5e9;
2
+ border: 1px solid #0284c7;
3
+ color: #ffffff;
4
+ font-size: 14px;
5
+ font-weight: 800;
@@ -0,0 +1,5 @@
1
+ background-color: #ef4444;
2
+ border: 1px solid #dc2626;
3
+ color: #ffffff;
4
+ font-size: 14px;
5
+ font-weight: 800;
@@ -0,0 +1,2 @@
1
+ background-color: #f3f6fa;
2
+ border: 0px;
@@ -0,0 +1,16 @@
1
+ QScrollArea {
2
+ background-color: #f3f6fa;
3
+ border: 1px solid #d9e0e7;
4
+ }
5
+ QScrollBar:vertical {
6
+ background: #eef2f6;
7
+ width: 12px;
8
+ margin: 2px;
9
+ border: 1px solid #d5dde7;
10
+ border-radius: 6px;
11
+ }
12
+ QScrollBar::handle:vertical {
13
+ background: #9aa8b8;
14
+ min-height: 28px;
15
+ border-radius: 5px;
16
+ }
@@ -0,0 +1,6 @@
1
+ background-color: #ecf1f6;
2
+ border: 1px solid #d5dee8;
3
+ color: #5b6776;
4
+ font-size: 13px;
5
+ font-weight: 700;
6
+ padding-left: 12px;
@@ -0,0 +1,5 @@
1
+ background-color: #f9fbfd;
2
+ border: 1px solid #e3e8ef;
3
+ color: #334155;
4
+ font-size: 12px;
5
+ padding-left: 24px;
@@ -0,0 +1,6 @@
1
+ background-color: #ffffff;
2
+ border: 1px solid #d8e0ea;
3
+ color: #0f172a;
4
+ font-size: 14px;
5
+ font-weight: 700;
6
+ padding-left: 12px;
@@ -0,0 +1,5 @@
1
+ background-color: #f7f9fb;
2
+ border: 1px solid #e2e8f0;
3
+ color: #334155;
4
+ font-size: 12px;
5
+ font-weight: 700;
@@ -0,0 +1,5 @@
1
+ background-color: #dbeafe;
2
+ border: 2px solid #60a5fa;
3
+ color: #0f172a;
4
+ font-size: 12px;
5
+ font-weight: 800;
@@ -0,0 +1,2 @@
1
+ color: #6b7280;
2
+ font-size: 12px;
@@ -0,0 +1,3 @@
1
+ color: #111827;
2
+ font-size: 18px;
3
+ font-weight: 800;
@@ -0,0 +1,2 @@
1
+ background-color: #f7f9fb;
2
+ border-right: 1px solid #d9e0e7;
@@ -0,0 +1,2 @@
1
+ color: #6b7280;
2
+ font-size: 12px;
@@ -0,0 +1,5 @@
1
+ background-color: #ffffff;
2
+ border: 1px solid #cfd8e3;
3
+ color: #111827;
4
+ font-size: 14px;
5
+ padding-left: 8px;
@@ -0,0 +1,5 @@
1
+ background-color: #ffffff;
2
+ border: 1px solid #cfd8e3;
3
+ color: #0f172a;
4
+ font-size: 13px;
5
+ font-weight: 700;
@@ -0,0 +1,3 @@
1
+ background-color: #ffffff;
2
+ border: 1px solid #d9e0e7;
3
+ color: #111827;
@@ -0,0 +1,3 @@
1
+ background-color: #ffffff;
2
+ border: 1px solid #d9e0e7;
3
+ color: #111827;
@@ -0,0 +1,3 @@
1
+ background-color: #ffffff;
2
+ border: 1px solid #d9e0e7;
3
+ color: #111827;
@@ -0,0 +1,3 @@
1
+ color: #111827;
2
+ font-size: 18px;
3
+ font-weight: 800;
@@ -0,0 +1,2 @@
1
+ background-color: #ffffff;
2
+ border: 1px solid #d9e0e7;
@@ -0,0 +1,84 @@
1
+ QWidget#topbar {
2
+ background-color: #ffffff;
3
+ border: 1px solid #d9e0e7;
4
+ border-radius: 10px;
5
+ }
6
+
7
+ QLabel#title_label {
8
+ color: #111827;
9
+ font-size: 18px;
10
+ font-weight: 800;
11
+ }
12
+
13
+ QLabel#clock_label {
14
+ color: #6b7280;
15
+ font-size: 12px;
16
+ }
17
+
18
+ QWidget#tracker_row {
19
+ background-color: #ffffff;
20
+ border: 1px solid #d9e0e7;
21
+ border-radius: 10px;
22
+ color: #111827;
23
+ }
24
+
25
+ QLineEdit#task_input {
26
+ background-color: #ffffff;
27
+ border: 1px solid #cfd8e3;
28
+ border-radius: 8px;
29
+ color: #111827;
30
+ font-size: 14px;
31
+ padding-left: 8px;
32
+ }
33
+
34
+ QLineEdit#project_input {
35
+ background-color: #ffffff;
36
+ border: 1px solid #cfd8e3;
37
+ border-radius: 8px;
38
+ color: #111827;
39
+ font-size: 14px;
40
+ padding-left: 8px;
41
+ }
42
+
43
+ QLabel#timer_label {
44
+ background-color: #ffffff;
45
+ border: 1px solid #d9e0e7;
46
+ border-radius: 8px;
47
+ color: #111827;
48
+ }
49
+
50
+ QPushButton#start_button {
51
+ background-color: #0ea5e9;
52
+ border: 1px solid #0284c7;
53
+ border-radius: 8px;
54
+ color: #ffffff;
55
+ font-size: 14px;
56
+ font-weight: 800;
57
+ }
58
+
59
+ QPushButton#stop_button {
60
+ background-color: #ef4444;
61
+ border: 1px solid #dc2626;
62
+ border-radius: 8px;
63
+ color: #ffffff;
64
+ font-size: 14px;
65
+ font-weight: 800;
66
+ }
67
+
68
+ QPushButton#theme_button,
69
+ QPushButton#refresh_button {
70
+ background-color: #ffffff;
71
+ border: 1px solid #cfd8e3;
72
+ border-radius: 8px;
73
+ color: #0f172a;
74
+ font-size: 13px;
75
+ font-weight: 700;
76
+ }
77
+
78
+ QLabel#summary_label {
79
+ background-color: #ffffff;
80
+ border: 1px solid #d9e0e7;
81
+ border-radius: 8px;
82
+ color: #111827;
83
+ padding: 0 10px;
84
+ }