libreqda 1.2.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 (255) hide show
  1. CHANGELOG.md +481 -0
  2. libreqda-1.2.0.dist-info/LICENSE.txt +28 -0
  3. libreqda-1.2.0.dist-info/METADATA +131 -0
  4. libreqda-1.2.0.dist-info/RECORD +255 -0
  5. libreqda-1.2.0.dist-info/WHEEL +4 -0
  6. libreqda-1.2.0.dist-info/entry_points.txt +4 -0
  7. scripts/babelrc +8 -0
  8. scripts/dist/LICENSE.txt +33 -0
  9. scripts/dist/RELEASE.txt +23 -0
  10. scripts/dist/macos/libreqda.icns +0 -0
  11. scripts/dist/macos/macos.spec +43 -0
  12. scripts/dist/macos/plist.patch +10 -0
  13. scripts/dist/macos/taguette.icns +0 -0
  14. scripts/dist/macos/taguette_console_wrapper +4 -0
  15. scripts/dist/macos.sh +32 -0
  16. scripts/dist/pyinstaller_entrypoint.py +19 -0
  17. scripts/dist/windows/windows-installer.iss +51 -0
  18. scripts/dist/windows/windows.spec +39 -0
  19. scripts/edugain/worker_update_edugain_idps.py +89 -0
  20. scripts/edugain/worker_update_edugain_idps.sh +9 -0
  21. scripts/make_password_reset_link.py +56 -0
  22. scripts/make_theme.py +99 -0
  23. scripts/new_db_revision.sh +8 -0
  24. scripts/register_user.py +76 -0
  25. scripts/update_pot.sh +33 -0
  26. scripts/update_translations.sh +17 -0
  27. scripts/validate.py +140 -0
  28. scripts/wipe_and_disable_user.py +90 -0
  29. taguette/__init__.py +13 -0
  30. taguette/access_control.py +145 -0
  31. taguette/convert.py +623 -0
  32. taguette/database/__init__.py +177 -0
  33. taguette/database/base.py +9 -0
  34. taguette/database/copy.py +433 -0
  35. taguette/database/models.py +920 -0
  36. taguette/demodata.py +688 -0
  37. taguette/export.py +500 -0
  38. taguette/extract.py +287 -0
  39. taguette/import_codebook.py +110 -0
  40. taguette/l10n/de_DE/LC_MESSAGES/taguette_javascript.mo +0 -0
  41. taguette/l10n/de_DE/LC_MESSAGES/taguette_main.mo +0 -0
  42. taguette/l10n/el_EL/LC_MESSAGES/taguette_javascript.mo +0 -0
  43. taguette/l10n/el_GR/LC_MESSAGES/taguette_javascript.mo +0 -0
  44. taguette/l10n/el_GR/LC_MESSAGES/taguette_main.mo +0 -0
  45. taguette/l10n/en_US/LC_MESSAGES/taguette_javascript.mo +0 -0
  46. taguette/l10n/en_US/LC_MESSAGES/taguette_main.mo +0 -0
  47. taguette/l10n/es_ES/LC_MESSAGES/taguette_javascript.mo +0 -0
  48. taguette/l10n/es_ES/LC_MESSAGES/taguette_main.mo +0 -0
  49. taguette/l10n/fr_FR/LC_MESSAGES/taguette_javascript.mo +0 -0
  50. taguette/l10n/fr_FR/LC_MESSAGES/taguette_main.mo +0 -0
  51. taguette/l10n/id_ID/LC_MESSAGES/taguette_javascript.mo +0 -0
  52. taguette/l10n/id_ID/LC_MESSAGES/taguette_main.mo +0 -0
  53. taguette/l10n/it_IT/LC_MESSAGES/taguette_javascript.mo +0 -0
  54. taguette/l10n/it_IT/LC_MESSAGES/taguette_main.mo +0 -0
  55. taguette/l10n/nl_NL/LC_MESSAGES/taguette_javascript.mo +0 -0
  56. taguette/l10n/nl_NL/LC_MESSAGES/taguette_main.mo +0 -0
  57. taguette/l10n/pt_PT/LC_MESSAGES/taguette_javascript.mo +0 -0
  58. taguette/l10n/pt_PT/LC_MESSAGES/taguette_main.mo +0 -0
  59. taguette/l10n/sv_SE/LC_MESSAGES/taguette_javascript.mo +0 -0
  60. taguette/l10n/sv_SE/LC_MESSAGES/taguette_main.mo +0 -0
  61. taguette/loki_handler.py +107 -0
  62. taguette/main.py +649 -0
  63. taguette/migrations/env.py +72 -0
  64. taguette/migrations/script.py.mako +24 -0
  65. taguette/migrations/versions/09c662cd9483_make_documents_filename_not_null.py +39 -0
  66. taguette/migrations/versions/1b29e68900c1_add_user_roles.py +55 -0
  67. taguette/migrations/versions/1b96a606551d_update_user_to_have_a_display_name.py +34 -0
  68. taguette/migrations/versions/2467bab602b7_add_color_column_to_tags_table.py +33 -0
  69. taguette/migrations/versions/382db36f20f4_add_user_disabled.py +66 -0
  70. taguette/migrations/versions/43d6c240309d_remove_document_groups.py +81 -0
  71. taguette/migrations/versions/447d636f72c5_cascades.py +40 -0
  72. taguette/migrations/versions/491de2dc7cd7_add_indexes.py +51 -0
  73. taguette/migrations/versions/4c55b3b3ff30_user_login_length.py +58 -0
  74. taguette/migrations/versions/61a4abcc8769_user_with_parent_for_permissions.py +40 -0
  75. taguette/migrations/versions/6489b5f9cfb5_increase_password_hash_size.py +34 -0
  76. taguette/migrations/versions/679f625e6e6a_fix_unique_tags.py +59 -0
  77. taguette/migrations/versions/77c4543a5b9b_add_parent_id_column_to_collection_table.py +41 -0
  78. taguette/migrations/versions/7c94b7a31e69_add_is_archived_column_to_projets.py +39 -0
  79. taguette/migrations/versions/7f56de97e3c8_change_edugain_displayname_length.py +42 -0
  80. taguette/migrations/versions/807c0cc0ecf6_remove_invalid_hltags.py +43 -0
  81. taguette/migrations/versions/80b1cc9d4c22_add_user_email.py +35 -0
  82. taguette/migrations/versions/91ade71ccf4d_add_user_language.py +28 -0
  83. taguette/migrations/versions/955db2e523d1_add_collections_tables_and_associations_.py +60 -0
  84. taguette/migrations/versions/a1b2c3d4e5f6_add_user_hide_code_counts.py +28 -0
  85. taguette/migrations/versions/b23f3b7a638e_add_user_password_change_date.py +36 -0
  86. taguette/migrations/versions/b7c1e2d3f4a5_add_project_compact_layout.py +28 -0
  87. taguette/migrations/versions/bc8e0e0677e9_rename_command_fields.py +126 -0
  88. taguette/migrations/versions/bce44849c2f2_lowercase_logins.py +96 -0
  89. taguette/migrations/versions/ca076140922f_update_user_for_external_logins.py +32 -0
  90. taguette/migrations/versions/d86c45d7aa8a_add_document_direction.py +127 -0
  91. taguette/migrations/versions/db5e31a0233d_remove_blank_highlights.py +88 -0
  92. taguette/migrations/versions/dd37d9027a24_unique_tags.py +68 -0
  93. taguette/migrations/versions/de678cef2a94_add_project_id_to_collections_and_.py +41 -0
  94. taguette/migrations/versions/e459991d960e_add_table_edugainidps.py +39 -0
  95. taguette/migrations/versions/e4cf92942271_add_index.py +29 -0
  96. taguette/migrations/versions/e4e090a5b511_remove_commands_document_id_fk.py +38 -0
  97. taguette/migrations/versions/e9a9f1c77971_add_favorite_column_to_document.py +32 -0
  98. taguette/migrations/versions/ecb4065de575_don_t_use_server_default_now_timezone_.py +44 -0
  99. taguette/migrations/versions/fbdc29566f62_edugain_fix_field_type.py +42 -0
  100. taguette/migrations/versions/fdc6eb54b034_add_parent_id_column_to_tags_table.py +31 -0
  101. taguette/static/README.md +34 -0
  102. taguette/static/alt_templates/.gitkeep +0 -0
  103. taguette/static/assets/test/logos/monsters-university-logo.png +0 -0
  104. taguette/static/css/custom.css +1696 -0
  105. taguette/static/css/fa-all.min.css +5 -0
  106. taguette/static/css/themed.css +3 -0
  107. taguette/static/css/themed.css.map +25 -0
  108. taguette/static/css/vendor/bootstrap-treeview.min.css +1 -0
  109. taguette/static/css/vendor/bootstrap.min.css +6 -0
  110. taguette/static/css/vendor/font/context-menu-icons.eot +0 -0
  111. taguette/static/css/vendor/font/context-menu-icons.ttf +0 -0
  112. taguette/static/css/vendor/font/context-menu-icons.woff +0 -0
  113. taguette/static/css/vendor/font/context-menu-icons.woff2 +0 -0
  114. taguette/static/css/vendor/hierarchy-select.min.css +1 -0
  115. taguette/static/css/vendor/introjs.min.css +2 -0
  116. taguette/static/css/vendor/jquery.contextMenu.min.css +16 -0
  117. taguette/static/favicon.ico +0 -0
  118. taguette/static/js/codebook-viz.js +428 -0
  119. taguette/static/js/collection/context-menu.js +180 -0
  120. taguette/static/js/collection/hierarchy-select.js +71 -0
  121. taguette/static/js/collection/manager.js +217 -0
  122. taguette/static/js/document/context-menu.js +92 -0
  123. taguette/static/js/document/custom-select.js +82 -0
  124. taguette/static/js/document/manager.js +943 -0
  125. taguette/static/js/document/treeview.js +593 -0
  126. taguette/static/js/highlight/README.md +18 -0
  127. taguette/static/js/highlight/crud.js +119 -0
  128. taguette/static/js/highlight/extracts.js +497 -0
  129. taguette/static/js/highlight/loader.js +109 -0
  130. taguette/static/js/highlight/renderer.js +405 -0
  131. taguette/static/js/login.js +15 -0
  132. taguette/static/js/permissions.js +153 -0
  133. taguette/static/js/polling-event.js +145 -0
  134. taguette/static/js/project/intro.js +524 -0
  135. taguette/static/js/project/manager.js +0 -0
  136. taguette/static/js/project/search.js +124 -0
  137. taguette/static/js/tag/context-menu.js +133 -0
  138. taguette/static/js/tag/explore-codes.js +400 -0
  139. taguette/static/js/tag/hierarchy-select.js +69 -0
  140. taguette/static/js/tag/manager.js +545 -0
  141. taguette/static/js/tag/treeview.js +613 -0
  142. taguette/static/js/taguette.js +1790 -0
  143. taguette/static/js/utilities.js +714 -0
  144. taguette/static/js/vendor/bootstrap-treeview-custum.js +421 -0
  145. taguette/static/js/vendor/bootstrap-treeview-custum.min.js +1 -0
  146. taguette/static/js/vendor/bootstrap-treeview-default.min.js +1 -0
  147. taguette/static/js/vendor/bootstrap.bundle.min.js +7 -0
  148. taguette/static/js/vendor/bootstrap.bundle.min.js.map +1 -0
  149. taguette/static/js/vendor/hierarchy-select.min.js +1 -0
  150. taguette/static/js/vendor/introjs.min.js +17 -0
  151. taguette/static/js/vendor/jquery-3.7.1.js +2 -0
  152. taguette/static/js/vendor/jquery.contextMenu.min.js +2 -0
  153. taguette/static/libreqda.ico +0 -0
  154. taguette/static/logo-h.png +0 -0
  155. taguette/static/logo.png +0 -0
  156. taguette/static/logo_blanc.png +0 -0
  157. taguette/static/missing.png +0 -0
  158. taguette/static/robots.txt +2 -0
  159. taguette/static/scss/components/_badge.scss +42 -0
  160. taguette/static/scss/components/_button.scss +169 -0
  161. taguette/static/scss/components/_checkbox.scss +40 -0
  162. taguette/static/scss/components/_context_menu.scss +28 -0
  163. taguette/static/scss/components/_custom_select.scss +150 -0
  164. taguette/static/scss/components/_dropdown.scss +43 -0
  165. taguette/static/scss/components/_form.scss +54 -0
  166. taguette/static/scss/components/_modal.scss +57 -0
  167. taguette/static/scss/components/_project_card.scss +163 -0
  168. taguette/static/scss/components/_tag.scss +308 -0
  169. taguette/static/scss/components/_treeview.scss +76 -0
  170. taguette/static/scss/custom.scss +809 -0
  171. taguette/static/scss/layout/_credits.scss +62 -0
  172. taguette/static/scss/layout/_footer.scss +6 -0
  173. taguette/static/scss/layout/_navigation.scss +165 -0
  174. taguette/static/scss/layout/_sidebar.scss +37 -0
  175. taguette/static/scss/themes/default/_variables.scss +103 -0
  176. taguette/static/scss/themes/default/theme.css +3 -0
  177. taguette/static/scss/themes/default/theme.css.map +26 -0
  178. taguette/static/scss/themes/default/theme.scss +4 -0
  179. taguette/static/webfonts/BadScript-OFL.txt +94 -0
  180. taguette/static/webfonts/BadScript.ttf +0 -0
  181. taguette/static/webfonts/Montserrat-Light.ttf +0 -0
  182. taguette/static/webfonts/Montserrat-OFL.txt +93 -0
  183. taguette/static/webfonts/fa-brands-400.eot +0 -0
  184. taguette/static/webfonts/fa-brands-400.svg +1184 -0
  185. taguette/static/webfonts/fa-brands-400.ttf +0 -0
  186. taguette/static/webfonts/fa-brands-400.woff +0 -0
  187. taguette/static/webfonts/fa-brands-400.woff2 +0 -0
  188. taguette/static/webfonts/fa-regular-400.eot +0 -0
  189. taguette/static/webfonts/fa-regular-400.svg +467 -0
  190. taguette/static/webfonts/fa-regular-400.ttf +0 -0
  191. taguette/static/webfonts/fa-regular-400.woff +0 -0
  192. taguette/static/webfonts/fa-regular-400.woff2 +0 -0
  193. taguette/static/webfonts/fa-solid-900.eot +0 -0
  194. taguette/static/webfonts/fa-solid-900.svg +2618 -0
  195. taguette/static/webfonts/fa-solid-900.ttf +0 -0
  196. taguette/static/webfonts/fa-solid-900.woff +0 -0
  197. taguette/static/webfonts/fa-solid-900.woff2 +0 -0
  198. taguette/templates/alt_templates/.gitkeep +0 -0
  199. taguette/templates/archived_projects.html +50 -0
  200. taguette/templates/auth/account.html +74 -0
  201. taguette/templates/auth/cilogon.login.html +89 -0
  202. taguette/templates/auth/email_reset_password.html +5 -0
  203. taguette/templates/auth/external_account.html +60 -0
  204. taguette/templates/auth/login.html +144 -0
  205. taguette/templates/auth/reset_password.html +27 -0
  206. taguette/templates/auth/token_needed.html +7 -0
  207. taguette/templates/base.html +209 -0
  208. taguette/templates/bug_report.html +158 -0
  209. taguette/templates/cookies_prompt.html +15 -0
  210. taguette/templates/downloads.html +127 -0
  211. taguette/templates/email_bug_report.txt +9 -0
  212. taguette/templates/email_reset_password.txt +5 -0
  213. taguette/templates/error.html +8 -0
  214. taguette/templates/export_codebook.html +20 -0
  215. taguette/templates/export_document.html +20 -0
  216. taguette/templates/export_highlights.html +47 -0
  217. taguette/templates/index.html +347 -0
  218. taguette/templates/maintenance.html +8 -0
  219. taguette/templates/messages.js +74 -0
  220. taguette/templates/modal/change_document.html +68 -0
  221. taguette/templates/modal/create_collection.html +100 -0
  222. taguette/templates/modal/create_document.html +84 -0
  223. taguette/templates/modal/create_highlight.html +38 -0
  224. taguette/templates/modal/create_tag.html +73 -0
  225. taguette/templates/modal/explore_codes.html +58 -0
  226. taguette/templates/modal/manage_collaborators.html +44 -0
  227. taguette/templates/modal/merge_tag.html +49 -0
  228. taguette/templates/new_password.html +32 -0
  229. taguette/templates/partials/alert.html +16 -0
  230. taguette/templates/partials/codebook_viz_modal.html +34 -0
  231. taguette/templates/partials/confirm.html +17 -0
  232. taguette/templates/partials/document_toolbar.html +37 -0
  233. taguette/templates/partials/hlinfo.html +13 -0
  234. taguette/templates/partials/project_card.html +44 -0
  235. taguette/templates/partials/project_card_archived.html +41 -0
  236. taguette/templates/partials/project_sidebar.html +99 -0
  237. taguette/templates/partials/spinner.html +11 -0
  238. taguette/templates/permissions.html +54 -0
  239. taguette/templates/project.html +288 -0
  240. taguette/templates/project_delete.html +17 -0
  241. taguette/templates/project_import.html +122 -0
  242. taguette/templates/project_import_codebook.html +34 -0
  243. taguette/templates/project_import_codebook_confirm.html +49 -0
  244. taguette/templates/project_new.html +31 -0
  245. taguette/templates/tos.html +8 -0
  246. taguette/templates/trans.js +7 -0
  247. taguette/templates/welcome.html +15 -0
  248. taguette/utils.py +177 -0
  249. taguette/validate.py +141 -0
  250. taguette/version_check.py +102 -0
  251. taguette/web/__init__.py +252 -0
  252. taguette/web/api.py +1835 -0
  253. taguette/web/base.py +864 -0
  254. taguette/web/export.py +338 -0
  255. taguette/web/views.py +1618 -0
@@ -0,0 +1,1696 @@
1
+ /* Add Taguette font */
2
+ @font-face {
3
+ font-family: BadScript;
4
+ font-display: swap;
5
+ src: url(../webfonts/BadScript.ttf);
6
+ }
7
+
8
+ /* Add body font */
9
+ @font-face {
10
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
11
+ "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji",
12
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
13
+ font-display: fallback;
14
+ src: url(../webfonts/Montserrat-Light.ttf);
15
+ }
16
+
17
+ /* Change link colors */
18
+ .container-body a:not(.btn) {
19
+ color: #005a20;
20
+ }
21
+
22
+ /* Disabled links */
23
+ #document-contents a:not([href]):not(.highlight) {
24
+ color: #216490;
25
+ }
26
+
27
+ /* Change body font */
28
+ body {
29
+ font-family: Montserrat !important;
30
+ font-size: 1.11em !important;
31
+ transition: all 0.3s ease-in-out;
32
+ }
33
+
34
+ /* Some space before content */
35
+ .container-body {
36
+ padding-top: 6.5em;
37
+ }
38
+
39
+ body.scrolled .container-body {
40
+ padding-top: 0;
41
+ }
42
+
43
+ /* Border for the tab container */
44
+ .tab-content {
45
+ border-style: solid;
46
+ border-width: 1px;
47
+ border-color: #fff #dee2e6 #dee2e6 #dee2e6;
48
+ padding: 0.4em;
49
+ }
50
+
51
+ /* Left pane scrolls on overflow */
52
+ div.sticky-top {
53
+ overflow-x: hidden;
54
+ overflow-y: auto;
55
+ height: calc(100vh - 5.25em);
56
+ top: 6.25em;
57
+ transition: all 0.3s ease-in-out;
58
+ }
59
+
60
+ body.scrolled div.sticky-top {
61
+ height: calc(100vh - 5.25em);
62
+ top: 0;
63
+ transition: all 0.3s ease-in-out;
64
+ }
65
+
66
+ /* Footer */
67
+ .footer {
68
+ font-size: 0.82em;
69
+ text-align: center;
70
+ }
71
+
72
+ /* Navigation */
73
+
74
+ .navbar.navbar-expand-lg.navbar-dark.bg-primary {
75
+ background-color: #018849 !important;
76
+ margin-bottom: 2em;
77
+ height: 3.5em;
78
+
79
+ position: fixed;
80
+ top: 0;
81
+ z-index: 100;
82
+ width: 100%;
83
+ transition: all 0.3s ease-in-out;
84
+ }
85
+
86
+ body.scrolled .navbar.navbar-expand-lg.navbar-dark.bg-primary {
87
+ overflow: hidden;
88
+ margin-bottom: 2em;
89
+ top: -5.5em;
90
+ transition: all 0.3s ease-in-out;
91
+ }
92
+
93
+ body.scrolled .navbar.navbar-expand-lg.navbar-dark.bg-primary button,
94
+ body.scrolled .navbar.navbar-expand-lg.navbar-dark.bg-primary input {
95
+ font-size: 1em;
96
+ line-height: 1;
97
+ }
98
+
99
+ body.page-index .navbar.navbar-expand-lg.navbar-dark.bg-primary {
100
+ margin-bottom: 1em;
101
+ }
102
+
103
+ #navbar {
104
+ padding-left: 115px;
105
+ }
106
+
107
+ .navbar-dark .navbar-nav .nav-link {
108
+ color: #fff !important;
109
+ }
110
+
111
+ .navbar-dark .navbar-nav .nav-link.disabled {
112
+ color: #edbd9d !important;
113
+ }
114
+
115
+ .navbar-dark .navbar-nav .nav-link.active {
116
+ color: #bcc3ac !important;
117
+ }
118
+
119
+ .navbar-dark .navbar-nav .nav-link.disabled:hover,
120
+ .navbar-dark .navbar-nav .nav-link.disabled:focus {
121
+ color: #e9ad85 !important;
122
+ }
123
+
124
+ .navbar-dark .navbar-nav .nav-link:hover,
125
+ .navbar-dark .navbar-nav .nav-link:focus {
126
+ color: #3a3a3a !important;
127
+ }
128
+
129
+ .navbar-dark .navbar-nav .dropdown-item.active {
130
+ color: #fff !important;
131
+ background-color: #6c757d !important;
132
+ }
133
+
134
+ /* Make icon lighter */
135
+ .navbar-dark .navbar-nav .nav-link .fas {
136
+ opacity: 0.7;
137
+ }
138
+
139
+ .navbar-brand {
140
+ position: absolute;
141
+ background: #fff;
142
+ display: block;
143
+ top: 0.5em;
144
+ }
145
+
146
+ .navbar-brand img.not-scrolled {
147
+ max-width: 100px;
148
+ display: block;
149
+ }
150
+
151
+ .navbar-brand img.scrolled {
152
+ display: none;
153
+ }
154
+
155
+ body.scrolled .navbar-brand {
156
+ padding: 0;
157
+ top: 0.1em;
158
+ }
159
+
160
+ .mr-auto {
161
+ margin-right: auto !important;
162
+ }
163
+
164
+ /* Tab navs for project*/
165
+
166
+ .nav-link {
167
+ padding: 0.5rem 0.5rem !important;
168
+ overflow: ellipsis;
169
+ white-space: nowrap;
170
+ }
171
+
172
+ /* Colors for button primary */
173
+
174
+ .btn.btn-primary {
175
+ background-color: #018849 !important;
176
+ border-color: #018849 !important;
177
+ }
178
+
179
+ .btn.btn-primary:hover,
180
+ .btn.btn-primary:focus,
181
+ .btn.btn-primary:active {
182
+ background-color: #4f9b4b !important;
183
+ border-color: #4f9b4b !important;
184
+ }
185
+
186
+ .btn.btn-outline-primary {
187
+ color: #018849;
188
+ background-color: transparent;
189
+ background-image: none;
190
+ border-color: #018849;
191
+ }
192
+
193
+ .btn.btn-outline-primary:hover {
194
+ color: #fff !important;
195
+ background-color: #018849 !important;
196
+ border-color: #018849 !important;
197
+ }
198
+
199
+ .btn.btn-outline-primary:focus,
200
+ .btn-outline-primary.focus {
201
+ box-shadow: none !important;
202
+ }
203
+
204
+ .btn.btn-outline-primary:not(:disabled):not(.disabled).active:focus,
205
+ .btn-outline-primary:not(:disabled):not(.disabled):active:focus,
206
+ .show > .btn-outline-primary.dropdown-toggle:focus {
207
+ box-shadow: none !important;
208
+ }
209
+
210
+ .btn.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,
211
+ .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,
212
+ .show > .btn-outline-secondary.dropdown-toggle:focus {
213
+ box-shadow: none !important;
214
+ }
215
+
216
+ .btn.btn-outline-primary:not(:disabled):not(.disabled).active:focus,
217
+ .btn-outline-primary:not(:disabled):not(.disabled):active:focus,
218
+ .show > .btn-outline-primary.dropdown-toggle:focus {
219
+ color: #fff !important;
220
+ background-color: #018849 !important;
221
+ border-color: #018849 !important;
222
+ }
223
+
224
+ .btn.btn-outline-primary.disabled,
225
+ .btn-outline-primary:disabled {
226
+ color: #018849 !important;
227
+ background-color: transparent !important;
228
+ }
229
+
230
+ .btn.btn-outline-primary:not(:disabled):not(.disabled):active,
231
+ .btn-outline-primary:not(:disabled):not(.disabled).active,
232
+ .show > .btn-outline-primary.dropdown-toggle {
233
+ color: #fff !important;
234
+ background-color: #018849 !important;
235
+ border-color: #018849 !important;
236
+ }
237
+
238
+ .btn.btn-outline-primary:not(:disabled):not(.disabled):active:focus,
239
+ .btn-outline-primary:not(:disabled):not(.disabled).active:focus,
240
+ .show > .btn-outline-primary.dropdown-toggle:focus {
241
+ box-shadow: none !important;
242
+ }
243
+
244
+ .dropdown-item:focus,
245
+ .dropdown-item:hover {
246
+ color: #fff !important;
247
+ background-color: #018849 !important;
248
+ border-color: #018849 !important;
249
+ }
250
+
251
+ /* Colors for secondary buttons */
252
+ .btn.btn-outline-secondary {
253
+ background-color: #3a3a3a;
254
+ border-color: #3a3a3a;
255
+ color: #ffffff;
256
+ }
257
+
258
+ .btn.btn-secondary {
259
+ background-color: #3a3a3a;
260
+ border-color: #3a3a3a;
261
+ color: #ffffff;
262
+ }
263
+
264
+ .btn.btn-secondary:hover,
265
+ .btn.btn-secondary:focus,
266
+ .btn.btn-secondary:active {
267
+ background-color: #6c757d;
268
+ border-color: #6c757d;
269
+ }
270
+
271
+ .btn.btn-outline-secondary:hover,
272
+ .btn.btn-outline-secondary:focus,
273
+ .btn.btn-outline-secondary:active {
274
+ background-color: #6c757d;
275
+ border-color: #6c757d;
276
+ }
277
+
278
+ .btn.btn-secondary.me-3 {
279
+ background-color: #018849 !important;
280
+ border-color: #018849 !important;
281
+ }
282
+
283
+ .btn.btn-secondary.me-3:hover,
284
+ .btn.btn-primary:focus,
285
+ .btn.btn-primary:active {
286
+ background-color: #4f9b4b !important;
287
+ border-color: #4f9b4b !important;
288
+ }
289
+
290
+ .btn-sm.btn-outline-secondary {
291
+ color: #6c757d !important;
292
+ background-color: #fff !important;
293
+ }
294
+
295
+ .btn-sm.btn-outline-secondary:hover {
296
+ color: var(--bs-btn-hover-color) !important;
297
+ background-color: var(--bs-btn-hover-bg) !important;
298
+ border-color: var(--bs-btn-hover-border-color) !important;
299
+ }
300
+
301
+ .btn-sm.btn-outline-secondary.my-2 {
302
+ color: #6c757d !important;
303
+ background-color: #fff !important;
304
+ }
305
+
306
+ .btn-sm.btn-outline-secondary.my-2:hover {
307
+ color: var(--bs-btn-hover-color) !important;
308
+ background-color: var(--bs-btn-hover-bg) !important;
309
+ border-color: var(--bs-btn-hover-border-color) !important;
310
+ }
311
+
312
+ /* Colors for button info */
313
+ .btn.btn-info {
314
+ background-color: #bcc3ac !important;
315
+ }
316
+
317
+ /* Colors for badges */
318
+ .badge-secondary {
319
+ color: #fff !important;
320
+ }
321
+
322
+ .badge-info {
323
+ color: #fff !important;
324
+ }
325
+
326
+ .badge-dark {
327
+ color: #fff !important;
328
+ }
329
+
330
+ .badge-warning {
331
+ color: #fff !important;
332
+ }
333
+
334
+ .badge-danger {
335
+ color: #fff !important;
336
+ }
337
+
338
+ .badge-secondary {
339
+ color: #fff !important;
340
+ background-color: #005a20 !important;
341
+ }
342
+
343
+ .badge-primary {
344
+ color: #fff !important;
345
+ background-color: #018849 !important;
346
+ }
347
+
348
+ .badge-primary[href]:hover,
349
+ .badge-primary[href]:focus {
350
+ color: #fff !important;
351
+ text-decoration: none !important;
352
+ background-color: #1a252f !important;
353
+ }
354
+
355
+ .badge-dark[href]:focus,
356
+ .badge-dark[href]:hover {
357
+ color: #abacaf !important;
358
+ text-decoration: none !important;
359
+ }
360
+
361
+ /* Search in document form */
362
+ form.search {
363
+ width: 40%;
364
+ position: relative;
365
+ }
366
+
367
+ form.search button {
368
+ color: #fff !important;
369
+ border: 1px solid #fff !important;
370
+ }
371
+
372
+ form.search button.btn-outline-primary:hover {
373
+ color: #3a3a3a !important;
374
+ border-color: #fff !important;
375
+ }
376
+
377
+ form.search button i.searching {
378
+ display: none;
379
+ }
380
+
381
+ form.search button i.search-icon {
382
+ display: inline-block;
383
+ }
384
+
385
+ form.search.searching button i.searching {
386
+ display: inline-block;
387
+ animation: spin 2s linear infinite;
388
+ }
389
+
390
+ form.search.searching button i.search-icon {
391
+ display: none;
392
+ }
393
+
394
+ @keyframes spin {
395
+ 0% {
396
+ transform: rotate(0deg);
397
+ }
398
+ 100% {
399
+ transform: rotate(360deg);
400
+ }
401
+ }
402
+
403
+ ul.dropdown-menu {
404
+ z-index: 1030;
405
+ max-height: 75vh;
406
+ overflow: scroll;
407
+ }
408
+
409
+ ul.dropdown-menu.show:empty {
410
+ display: none !important;
411
+ }
412
+
413
+ span.search-item {
414
+ color: #fff;
415
+ background-color: #005a20;
416
+ display: inline-block;
417
+ border-radius: 0.375rem;
418
+ padding: 0 0.2rem;
419
+ }
420
+
421
+ /* Don't show the resize control on textareas */
422
+ textarea.form-control {
423
+ resize: none;
424
+ height: 150px;
425
+ padding: 10px;
426
+ line-height: 1.5;
427
+ }
428
+
429
+ select.form-control {
430
+ -webkit-appearance: auto;
431
+ -moz-appearance: auto;
432
+ appearance: auto;
433
+ }
434
+
435
+ /* To match bs4 css, may be removed in a future release */
436
+ .form-group {
437
+ margin-bottom: 1rem;
438
+ }
439
+
440
+ /* Wrap long tag names and long doc names */
441
+ .tag-name {
442
+ word-break: break-all;
443
+ }
444
+
445
+ #tag-selection-return a {
446
+ display: none;
447
+ }
448
+
449
+ a.document-link-a {
450
+ word-break: break-all;
451
+ }
452
+
453
+ .collection-selected {
454
+ background-color: #edefe9 !important;
455
+ border-left: 3px solid #018849 !important;
456
+ }
457
+
458
+ /* Work-around to make a whole element clickable while it contains links */
459
+ .overlay-outer {
460
+ position: relative;
461
+ }
462
+
463
+ .overlay-bottom {
464
+ position: absolute;
465
+ left: 0;
466
+ top: 0;
467
+ bottom: 0;
468
+ right: 0;
469
+ }
470
+
471
+ .overlay-top {
472
+ position: relative;
473
+ pointer-events: none;
474
+ z-index: 1;
475
+ }
476
+
477
+ .overlay-top a {
478
+ pointer-events: all;
479
+ }
480
+
481
+ li.document-link-current {
482
+ background-color: #f8f9fa;
483
+ }
484
+
485
+ li.document-link-current a.document-link-a {
486
+ font-weight: bold;
487
+ }
488
+
489
+ #ul-search-results {
490
+ padding-top: 0;
491
+ }
492
+
493
+ li.disabled.sticky {
494
+ padding-top: 0.5rem;
495
+ padding-bottom: 0.5rem;
496
+ position: sticky;
497
+ top: 30px;
498
+ background-color: #ceeadd;
499
+ color: #005a20;
500
+ }
501
+
502
+ li.disabled.sticky.first {
503
+ font-weight: bold;
504
+ }
505
+
506
+ li.disabled.sticky.first {
507
+ top: 0;
508
+ }
509
+
510
+ span.pagination {
511
+ float: right;
512
+ }
513
+
514
+ button.page-selector {
515
+ display: none;
516
+ }
517
+
518
+ button.page-selector:disabled,
519
+ button.page-selector[disabled] {
520
+ color: #f8f9fa !important;
521
+ background-color: rgba(245, 245, 245, 0.75) !important;
522
+ }
523
+
524
+ .document-view {
525
+ border: 2px solid #dee2e6;
526
+ padding: 0.5em 0.5em 0.5em 0.5em;
527
+ position: relative;
528
+ text-align: initial; /* Reset alignment so RTL works */
529
+ }
530
+
531
+ li.tag-current {
532
+ background-color: #f8f9fa;
533
+ }
534
+
535
+ .backlight {
536
+ color: #bbb;
537
+ }
538
+
539
+ /*#export-button {*/
540
+ /* position: absolute;*/
541
+ /* top: .1em;*/
542
+ /* right: .5em;*/
543
+ /*}*/
544
+
545
+ #export-button .dropdown-toggle {
546
+ padding: 0.125rem 0.25rem;
547
+ }
548
+
549
+ a.dropdown-item:hover {
550
+ color: white !important;
551
+ text-decoration: none;
552
+ }
553
+
554
+ #document-view .highlight {
555
+ color: black;
556
+ text-decoration: none;
557
+ }
558
+
559
+ #document-view .flash-once {
560
+ animation: flashOnceBackground 2s;
561
+ }
562
+ @keyframes flashOnceBackground {
563
+ 0% {
564
+ background-color: #fff;
565
+ }
566
+ 50% {
567
+ background-color: #92b2cb;
568
+ }
569
+ 100% {
570
+ background-color: #fff;
571
+ }
572
+ }
573
+
574
+ #hlinfo {
575
+ display: none;
576
+ position: absolute;
577
+ background-color: white;
578
+ border: 1px solid grey;
579
+ padding: 0.2em;
580
+ z-index: 9999999;
581
+ }
582
+
583
+ #hlinfo em {
584
+ text-decoration: underline;
585
+ font-style: normal;
586
+ }
587
+
588
+ .list-group-item-primary a {
589
+ color: #404041;
590
+ }
591
+
592
+ .list-group .sublist {
593
+ padding-left: 0;
594
+ margin: 5px -20px -12px 5px;
595
+ border-top: 1px solid #dee2e6;
596
+ display: flex;
597
+ flex-direction: column;
598
+ }
599
+
600
+ .list-group .sublist li {
601
+ padding: 12px 20px;
602
+ }
603
+
604
+ .dropdown-item.active {
605
+ background-color: #e7f2ff !important;
606
+ }
607
+
608
+ .expand-marker {
609
+ width: 7px;
610
+ }
611
+
612
+ .highlight-entry {
613
+ border: 3px dotted rgba(0, 0, 0, 0.125);
614
+ margin: 1rem 0;
615
+ padding: 1rem 0.6rem 1rem 0.6rem;
616
+ border-radius: 10px;
617
+ }
618
+
619
+ /* Badge row in highlight entries: principal left, associated right */
620
+ .badge-outline-tag {
621
+ font-size: 0.85em;
622
+ }
623
+
624
+ /* SVG underlines in highlight results */
625
+ .tag-underline-svg {
626
+ position: absolute;
627
+ left: 0;
628
+ top: 0;
629
+ pointer-events: none;
630
+ overflow: visible;
631
+ }
632
+
633
+ .draggable {
634
+ /*cursor: grab;*/
635
+ user-select: none;
636
+ }
637
+
638
+ .smooth-stroke {
639
+ transition: stroke-width 0.3s ease-in-out;
640
+ }
641
+
642
+ /* Left middle right panel styles */
643
+
644
+ #middle-panel {
645
+ padding-bottom: 150px;
646
+ }
647
+
648
+ .col-md-2-5 {
649
+ width: 20.8333% !important;
650
+ transition: all 0.3s ease-in-out;
651
+ }
652
+
653
+ .col-md-7-5 {
654
+ width: calc(100% - 41.6666%) !important;
655
+ }
656
+
657
+ @media (max-width: 768px) {
658
+ .col-md-2-5,
659
+ .col-md-7-5 {
660
+ width: 100% !important;
661
+ margin-bottom: 1rem;
662
+ }
663
+
664
+ .order-1 {
665
+ margin-bottom: 2rem;
666
+ }
667
+
668
+ .row .reduced-col,
669
+ div.reduced-col {
670
+ flex: 0 0 100% !important;
671
+ max-width: 100% !important;
672
+ height: 50px !important;
673
+ width: 100% !important;
674
+ }
675
+
676
+ .bordered-container {
677
+ height: auto !important;
678
+ }
679
+
680
+ .btn-outline-secondary i {
681
+ transform: rotate(180deg);
682
+ }
683
+
684
+ .reduced-col .btn-outline-secondary i {
685
+ transform: rotate(-360deg) !important;
686
+ }
687
+ }
688
+
689
+ .btn-outline-secondary i {
690
+ transition: transform 0.3s;
691
+ }
692
+
693
+ .reduced-col .btn-outline-secondary i {
694
+ transform: rotate(180deg);
695
+ }
696
+
697
+ .reduced-col {
698
+ flex: 0 0 5% !important;
699
+ max-width: 5% !important;
700
+ overflow: hidden;
701
+ }
702
+
703
+ .reduced-col .panel-content {
704
+ display: none;
705
+ }
706
+
707
+ .expanded-col {
708
+ flex: 0 0 70% !important;
709
+ max-width: 70% !important;
710
+ }
711
+
712
+ .bordered-container {
713
+ border: 1px solid #ddd;
714
+ padding: 10px;
715
+ border-radius: 5px;
716
+ z-index: 0;
717
+ }
718
+
719
+ .dropdown-toggle {
720
+ width: 100%;
721
+ }
722
+
723
+ [contenteditable] {
724
+ outline: 0 solid transparent;
725
+ }
726
+
727
+ .tag-badges {
728
+ /*position: absolute;*/
729
+ right: 2px;
730
+ display: flex;
731
+ flex-direction: row;
732
+ align-items: center;
733
+ gap: 3px;
734
+ }
735
+
736
+ @media (max-width: 1430px) {
737
+ .tag-badges {
738
+ flex-direction: column;
739
+ }
740
+ }
741
+
742
+ #dropdownMenuButtonTag {
743
+ letter-spacing: -0.5px !important;
744
+ white-space: nowrap !important;
745
+ overflow: hidden !important;
746
+ text-overflow: ellipsis !important;
747
+ }
748
+
749
+ .expand-icon {
750
+ color: #005a20;
751
+ min-width: 22px;
752
+ padding: 2px;
753
+ border-radius: 5px;
754
+ }
755
+
756
+ .expand-icon:hover {
757
+ border: 0.25px solid #005a20;
758
+ }
759
+
760
+ .tag-text {
761
+ font-size: 1rem !important;
762
+ letter-spacing: -0.5px !important;
763
+ white-space: normal !important;
764
+ overflow: visible !important;
765
+ /*text-overflow: ellipsis !important;*/
766
+ max-width: 200px !important;
767
+ max-height: 25px !important;
768
+ display: inline-block;
769
+ padding-right: 5px;
770
+ }
771
+
772
+ /* Spinner animation */
773
+ #spinner {
774
+ border: 3vh solid #dcdcdc;
775
+ border-top: 3vh solid #018849;
776
+ border-radius: 50%;
777
+ width: 30vh;
778
+ height: 30vh;
779
+ animation: spinneranim 2s linear infinite;
780
+ }
781
+
782
+ @keyframes spinneranim {
783
+ 0% {
784
+ transform: rotate(0deg);
785
+ }
786
+ 100% {
787
+ transform: rotate(360deg);
788
+ }
789
+ }
790
+
791
+ #spinner-modal .modal-dialog {
792
+ display: table;
793
+ position: relative;
794
+ margin: 0 auto;
795
+ top: calc(50% - 15vh);
796
+ }
797
+
798
+ #spinner-modal .modal-dialog .modal-content {
799
+ background-color: transparent;
800
+ border: none;
801
+ width: 30vh;
802
+ }
803
+
804
+ #spinner-modal button.cancel {
805
+ display: none;
806
+ margin-top: 1em;
807
+ }
808
+
809
+ #progress {
810
+ margin-top: -15vh;
811
+ margin-bottom: 15vh;
812
+ width: 20vh;
813
+ text-align: center;
814
+ margin-left: 5vh;
815
+ }
816
+
817
+ .progress-bar {
818
+ background-color: #018849;
819
+ }
820
+
821
+ /* --------------------SCROLLBAR FOR MODALS--------------------------*/
822
+
823
+ .modal-body {
824
+ max-height: calc(100vh - 210px);
825
+ overflow-y: auto;
826
+ }
827
+
828
+ .modal-body.no-scroll {
829
+ max-height: calc(100vh - 210px);
830
+ overflow-y: unset;
831
+ }
832
+
833
+ /* --------------------RESPONSIVE DISPLAY HEADINGS--------------------------*/
834
+ @media (max-width: 575.98px) {
835
+ .display-1 {
836
+ font-size: 3rem;
837
+ font-weight: 300;
838
+ line-height: 1;
839
+ }
840
+ .display-2 {
841
+ font-size: 2.75rem;
842
+ font-weight: 300;
843
+ line-height: 1;
844
+ }
845
+ .display-3 {
846
+ font-size: 2.25rem;
847
+ font-weight: 300;
848
+ line-height: 1;
849
+ }
850
+ .display-4 {
851
+ font-size: 1.75rem;
852
+ font-weight: 300;
853
+ line-height: 1;
854
+ }
855
+ }
856
+
857
+ /*========================
858
+ Index project view custom
859
+ =========================*/
860
+
861
+ .main {
862
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
863
+ "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji",
864
+ "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
865
+ font-size: 1rem;
866
+ font-weight: 400;
867
+ line-height: 1.5;
868
+ color: rgb(33, 37, 41);
869
+ text-align: left;
870
+ }
871
+
872
+ /*========================
873
+ Home - Project card
874
+ =========================*/
875
+
876
+ .project-card {
877
+ display: flex;
878
+ flex-direction: column;
879
+ height: 230px;
880
+ width: 100%;
881
+ background-color: #fff;
882
+ text-align: left;
883
+ border-radius: 10px;
884
+ box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
885
+ margin-bottom: 20px;
886
+ transition: transform 0.3s ease;
887
+ }
888
+
889
+ .description-container {
890
+ flex: 1;
891
+ overflow: hidden;
892
+ min-height: 0;
893
+ text-align: left;
894
+ }
895
+
896
+ .description-container p {
897
+ margin: 0;
898
+ text-align: left;
899
+ }
900
+
901
+ .description-text {
902
+ display: -webkit-box;
903
+ -webkit-line-clamp: 3;
904
+ -webkit-box-orient: vertical;
905
+ overflow: hidden;
906
+ text-overflow: ellipsis;
907
+ margin-bottom: 0;
908
+ }
909
+
910
+ .stats-container {
911
+ z-index: 1;
912
+ }
913
+
914
+ .project-card .fas {
915
+ color: #018849;
916
+ }
917
+
918
+ .action {
919
+ background-color: #018849;
920
+ }
921
+
922
+ .project-card:hover {
923
+ transform: scale(1.05);
924
+ border: 2px solid #018849;
925
+ }
926
+
927
+ .icon-circle {
928
+ display: flex;
929
+ align-items: center;
930
+ justify-content: center;
931
+ width: 60px;
932
+ height: 60px;
933
+ border-radius: 50%;
934
+ background-color: #f8f9fa;
935
+ color: #333;
936
+ font-size: 24px;
937
+ margin-bottom: 20px;
938
+ }
939
+
940
+ .project {
941
+ text-align: center;
942
+ font-size: 22px;
943
+ font-weight: 600;
944
+ color: #fff;
945
+ }
946
+
947
+ .star {
948
+ font-size: 20px !important;
949
+ color: #b1b4b7;
950
+ }
951
+
952
+ .dot {
953
+ font-size: 20px !important;
954
+ color: #b1b4b7;
955
+ }
956
+
957
+ .project-icon {
958
+ border-radius: 50%;
959
+ background-color: #018849;
960
+ width: 70px;
961
+ height: 70px;
962
+ display: flex;
963
+ align-items: center;
964
+ justify-content: center;
965
+ margin-bottom: -10px;
966
+ }
967
+
968
+ .project-icon span {
969
+ color: #fff;
970
+ font-size: 36px;
971
+ font-weight: bold;
972
+ }
973
+
974
+ .project-card .name {
975
+ font-size: 20px;
976
+ color: #464e56;
977
+ font-weight: 600;
978
+ text-align: left;
979
+ white-space: normal;
980
+ word-wrap: break-word !important;
981
+ overflow: hidden;
982
+ text-overflow: clip;
983
+ max-width: 300px;
984
+ text-decoration: underline;
985
+ }
986
+
987
+ .empty i.fas,
988
+ .empty .project-icon {
989
+ visibility: hidden;
990
+ }
991
+
992
+ .quote {
993
+ text-align: center;
994
+ font-size: 14px;
995
+ font-weight: 400;
996
+ color: #fff;
997
+ }
998
+
999
+ .quote2 {
1000
+ font-size: 14px;
1001
+ font-weight: 500;
1002
+ color: #868e94;
1003
+ text-align: left;
1004
+ overflow: auto;
1005
+ max-height: 80px;
1006
+ margin: 0;
1007
+ }
1008
+
1009
+ .custom-hr {
1010
+ border-top: none;
1011
+ border-left: none;
1012
+ border-right: none;
1013
+ border-bottom: 3px dotted #ccc !important;
1014
+ text-align: center;
1015
+ justify-content: center;
1016
+ height: 0;
1017
+ width: 100%;
1018
+ background: transparent;
1019
+ margin: 8px 0;
1020
+ }
1021
+
1022
+ .no-underline,
1023
+ .no-underline:hover,
1024
+ .no-underline:visited,
1025
+ .no-underline:active {
1026
+ text-decoration: none;
1027
+ }
1028
+
1029
+ .tags-container {
1030
+ border: 2px solid #ccc;
1031
+ border-radius: 8px;
1032
+ padding: 10px;
1033
+ overflow: hidden;
1034
+ background-color: #fff;
1035
+ }
1036
+
1037
+ /*========================
1038
+ Document custom select
1039
+ =========================*/
1040
+
1041
+ .custom-select {
1042
+ position: relative;
1043
+ width: 90%;
1044
+ max-width: 100%;
1045
+ font-size: 1.15rem;
1046
+ color: #000;
1047
+ z-index: 1;
1048
+ }
1049
+
1050
+ @media (max-width: 768px) {
1051
+ .custom-select {
1052
+ width: 80%;
1053
+ }
1054
+ }
1055
+
1056
+ .select-button {
1057
+ width: 100%;
1058
+ height: 40px;
1059
+ font-size: 1.15rem;
1060
+ background-color: #fff;
1061
+ padding: 0.675em 1em;
1062
+ border: 1px solid #caced1;
1063
+ border-radius: 0.5rem;
1064
+ cursor: pointer;
1065
+ display: flex;
1066
+ justify-content: space-between;
1067
+ align-items: center;
1068
+ }
1069
+
1070
+ .selected-value {
1071
+ text-overflow: ellipsis;
1072
+ overflow: hidden;
1073
+ white-space: nowrap;
1074
+ text-align: left;
1075
+ flex: 1;
1076
+ margin-right: 10px;
1077
+ }
1078
+
1079
+ .custom-select.active .selected-value {
1080
+ white-space: normal;
1081
+ }
1082
+
1083
+ .arrow {
1084
+ border-left: 5px solid transparent;
1085
+ border-right: 5px solid transparent;
1086
+ border-top: 6px solid #000;
1087
+ transition: transform ease-in-out 0.3s;
1088
+ }
1089
+
1090
+ .select-dropdown {
1091
+ position: absolute;
1092
+ list-style: none;
1093
+ width: 100%;
1094
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
1095
+ background-color: #fff;
1096
+ border: 1px solid #caced1;
1097
+ border-radius: 0.5rem;
1098
+ padding: 10px;
1099
+ margin-top: 10px;
1100
+ max-height: 200px;
1101
+ overflow-y: auto;
1102
+ transition: 0.5s ease;
1103
+
1104
+ transform: scaleY(0);
1105
+ opacity: 0;
1106
+ visibility: hidden;
1107
+ }
1108
+
1109
+ .select-dropdown:focus-within {
1110
+ box-shadow: 0 10px 25px rgba(94, 108, 233, 0.6);
1111
+ }
1112
+
1113
+ .select-dropdown li {
1114
+ position: relative;
1115
+ cursor: pointer;
1116
+ display: flex;
1117
+ gap: 1rem;
1118
+ align-items: center;
1119
+ }
1120
+
1121
+ .create-document-option a {
1122
+ width: 100%;
1123
+ padding: 8px 10px;
1124
+ cursor: pointer;
1125
+ display: flex;
1126
+ gap: 1rem;
1127
+ align-items: center;
1128
+ }
1129
+
1130
+ .create-document-option a:hover {
1131
+ color: white;
1132
+ }
1133
+
1134
+ .select-dropdown li label {
1135
+ width: 100%;
1136
+ padding: 8px 10px;
1137
+ cursor: pointer;
1138
+ display: flex;
1139
+ gap: 1rem;
1140
+ align-items: center;
1141
+ }
1142
+
1143
+ .select-dropdown::-webkit-scrollbar {
1144
+ width: 7px;
1145
+ }
1146
+ .select-dropdown::-webkit-scrollbar-track {
1147
+ background: #f1f1f1;
1148
+ border-radius: 25px;
1149
+ }
1150
+
1151
+ .select-dropdown::-webkit-scrollbar-thumb {
1152
+ background: #ccc;
1153
+ border-radius: 25px;
1154
+ }
1155
+
1156
+ .select-dropdown li:hover,
1157
+ .select-dropdown input:checked ~ label {
1158
+ background-color: #018849;
1159
+ color: #f1f1f1;
1160
+ }
1161
+
1162
+ .select-dropdown input:focus ~ label {
1163
+ background-color: #dfdfdf;
1164
+ }
1165
+
1166
+ .select-dropdown input[type="radio"] {
1167
+ position: absolute;
1168
+ left: 0;
1169
+ opacity: 0;
1170
+ }
1171
+
1172
+ /* interactivity */
1173
+
1174
+ .custom-select.active .arrow {
1175
+ transform: rotate(180deg);
1176
+ }
1177
+
1178
+ .custom-select.active .select-dropdown {
1179
+ opacity: 1;
1180
+ visibility: visible;
1181
+ transform: scaleY(1);
1182
+ }
1183
+
1184
+ /* document toolbar */
1185
+
1186
+ .toolbar-container {
1187
+ position: sticky;
1188
+ top: 3.25em;
1189
+ z-index: 10;
1190
+ border: 1px solid #ccc;
1191
+ border-radius: 5px;
1192
+ background-color: #f8f9fa;
1193
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
1194
+ transition: all 0.3s ease-in-out;
1195
+ }
1196
+
1197
+ body.scrolled .toolbar-container {
1198
+ top: 0;
1199
+ transition: all 0.3s ease-in-out;
1200
+ }
1201
+
1202
+ #project-sidebar-open {
1203
+ color: white;
1204
+ cursor: pointer;
1205
+ padding-right: 10px;
1206
+ font-size: 1.5em;
1207
+ }
1208
+
1209
+ /* project sidebar */
1210
+ .project-sidebar {
1211
+ height: 100%;
1212
+ width: 0;
1213
+ position: fixed;
1214
+ z-index: 1025;
1215
+ top: 0;
1216
+ left: 0;
1217
+ background-color: #fefefe;
1218
+ overflow-x: hidden;
1219
+ border: 3px solid #5a6268;
1220
+ transition: 0.5s;
1221
+ }
1222
+
1223
+ .project-sidebar-content {
1224
+ position: relative;
1225
+ top: 6%;
1226
+ width: 100%;
1227
+ text-align: left;
1228
+ }
1229
+
1230
+ .close-project-navbar {
1231
+ position: absolute;
1232
+ top: 0;
1233
+ right: 25px;
1234
+ font-size: 36px;
1235
+ margin-left: 50px;
1236
+ text-decoration: none;
1237
+ }
1238
+
1239
+ /* Backlight checkbox */
1240
+ .custom-checkbox {
1241
+ display: inline-block;
1242
+ position: relative;
1243
+ padding-left: 25px;
1244
+ cursor: pointer;
1245
+ user-select: none;
1246
+ }
1247
+
1248
+ .custom-checkbox .custom-control-input {
1249
+ position: absolute;
1250
+ opacity: 0;
1251
+ cursor: pointer;
1252
+ }
1253
+
1254
+ .custom-checkbox .custom-control-label:before {
1255
+ content: "";
1256
+ position: absolute;
1257
+ left: 0;
1258
+ top: 0;
1259
+ width: 18px;
1260
+ height: 18px;
1261
+ border: 2px solid #018849;
1262
+ border-radius: 4px;
1263
+ background-color: white;
1264
+ }
1265
+
1266
+ .custom-checkbox .custom-control-input:checked ~ .custom-control-label:after {
1267
+ content: "✓";
1268
+ position: absolute;
1269
+ left: 4px;
1270
+ top: -2px;
1271
+ font-size: 18px;
1272
+ color: #018849;
1273
+ }
1274
+
1275
+ .custom-checkbox:hover .custom-control-input ~ .custom-control-label:before {
1276
+ background-color: #f0f0f0;
1277
+ }
1278
+
1279
+ .tag-selection-box {
1280
+ display: none;
1281
+ border: 1px solid #cccccc;
1282
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
1283
+ padding: 10px;
1284
+ border-radius: 10px;
1285
+ background-color: #ffffff;
1286
+ margin: 10px 0;
1287
+ width: 100%;
1288
+ }
1289
+
1290
+ .tag-badge {
1291
+ color: white;
1292
+ padding: 3px 8px;
1293
+ border-radius: 15px;
1294
+ margin-top: 15px;
1295
+ display: inline-flex;
1296
+ align-items: center;
1297
+ font-size: 0.8rem;
1298
+ }
1299
+
1300
+ .tag-badge-button {
1301
+ background-color: transparent;
1302
+ border: none;
1303
+ color: white;
1304
+ cursor: pointer;
1305
+ margin-left: 5px;
1306
+ font-size: 1rem;
1307
+ font-weight: bold;
1308
+ }
1309
+
1310
+ #clear-selection:hover i {
1311
+ color: red;
1312
+ }
1313
+
1314
+ #clear-selection {
1315
+ display: block;
1316
+ text-align: right;
1317
+ }
1318
+
1319
+ .introjs-tooltip {
1320
+ min-width: 30vw;
1321
+ max-width: 30vw;
1322
+ }
1323
+
1324
+ .introjs-prevbutton {
1325
+ display: none;
1326
+ }
1327
+
1328
+ button#start-tutorial {
1329
+ position: fixed;
1330
+ right: 50px;
1331
+ bottom: 50px;
1332
+ }
1333
+
1334
+ /* Tag highlight */
1335
+ .highlight-tag {
1336
+ background-color: #edefe9 !important;
1337
+ transition: background-color 1s ease;
1338
+ }
1339
+
1340
+ .highlight-tag.fade-out {
1341
+ background-color: transparent !important;
1342
+ }
1343
+
1344
+ /* Collection highlight */
1345
+ .highlight-collection {
1346
+ background-color: #edefe9 !important;
1347
+ transition: background-color 1s ease;
1348
+ }
1349
+
1350
+ .highlight-collection.fade-out {
1351
+ background-color: transparent !important;
1352
+ }
1353
+
1354
+ /* Document highlight */
1355
+ .highlight-document {
1356
+ background-color: #edefe9 !important;
1357
+ transition: background-color 1s ease;
1358
+ }
1359
+
1360
+ .highlight-document.fade-out {
1361
+ background-color: transparent !important;
1362
+ }
1363
+
1364
+ /* Override bootstrap-treeview icon spacing for document treeview */
1365
+ body #treeview-documents span.icon {
1366
+ margin-right: 10px !important;
1367
+ width: 12px !important;
1368
+ }
1369
+
1370
+ /* Indent only documents within collections, not collection names */
1371
+ #treeview-documents .document-link {
1372
+ padding-left: 50px !important; /* All lines indented to same column */
1373
+ padding-right: 60px !important; /* Space for edit and favorite icons */
1374
+ word-wrap: break-word;
1375
+ overflow-wrap: break-word;
1376
+ }
1377
+
1378
+ /* Hierarchical collection display in document dispatch */
1379
+ #document-files-list select option {
1380
+ font-family: monospace;
1381
+ font-size: 0.9em;
1382
+ }
1383
+
1384
+ #document-files-list select option[style*="padding-left"] {
1385
+ color: #6c757d;
1386
+ font-style: italic;
1387
+ }
1388
+
1389
+ /* Document selection in collection modal */
1390
+ .document-item {
1391
+ border: 1px solid #dee2e6;
1392
+ background-color: #f8f9fa;
1393
+ cursor: pointer;
1394
+ transition: all 0.2s ease;
1395
+ }
1396
+
1397
+ .document-item:hover:not(.selected) {
1398
+ background-color: #e9ecef;
1399
+ }
1400
+
1401
+ .document-item.selected {
1402
+ background-color: #edefe9 !important;
1403
+ color: #495057;
1404
+ border-color: #c3d9c0;
1405
+ }
1406
+
1407
+ /* Selected documents display */
1408
+ .selected-document-badge {
1409
+ display: inline-block;
1410
+ background-color: #edefe9;
1411
+ color: #495057;
1412
+ border: 1px solid #c3d9c0;
1413
+ border-radius: 0.375rem;
1414
+ padding: 0.25rem 0.5rem;
1415
+ margin: 0.125rem;
1416
+ font-size: 0.875rem;
1417
+ }
1418
+
1419
+ .selected-document-badge .remove-btn {
1420
+ margin-left: 0.5rem;
1421
+ cursor: pointer;
1422
+ color: #6c757d;
1423
+ }
1424
+
1425
+ .selected-document-badge .remove-btn:hover {
1426
+ color: #dc3545;
1427
+ }
1428
+
1429
+ #collection-add-modal .modal-body .col-md-4,
1430
+ #collection-add-modal .modal-body .col-md-8 {
1431
+ border-right: 1px solid rgba(0, 0, 0, 0.08);
1432
+ padding-right: 1.5rem;
1433
+ }
1434
+
1435
+ #collection-add-modal .modal-body .col-md-8:last-child {
1436
+ border-right: none;
1437
+ padding-left: 1.5rem;
1438
+ padding-right: 0;
1439
+ }
1440
+
1441
+ @media (max-width: 767.98px) {
1442
+ #collection-add-modal .modal-body .col-md-4,
1443
+ #collection-add-modal .modal-body .col-md-8 {
1444
+ border-right: none;
1445
+ border-bottom: 1px solid rgba(0, 0, 0, 0.08);
1446
+ padding-right: 0;
1447
+ padding-bottom: 1.5rem;
1448
+ margin-bottom: 1.5rem;
1449
+ }
1450
+
1451
+ #collection-add-modal .modal-body .col-md-8:last-child {
1452
+ border-bottom: none;
1453
+ padding-left: 0;
1454
+ padding-bottom: 0;
1455
+ margin-bottom: 0;
1456
+ }
1457
+ }
1458
+
1459
+ /* Document file item */
1460
+ .document-file-item {
1461
+ background-color: #f8f9fa;
1462
+ transition: background-color 0.2s ease;
1463
+ }
1464
+
1465
+ .document-file-item:hover {
1466
+ background-color: #e9ecef;
1467
+ }
1468
+
1469
+ .document-file-item .file-name {
1470
+ font-weight: 500;
1471
+ color: #495057;
1472
+ }
1473
+
1474
+ /* Mobile responsive styles */
1475
+ @media (max-width: 767.98px) {
1476
+ .document-file-item {
1477
+ flex-direction: column !important;
1478
+ align-items: flex-start !important;
1479
+ gap: 0.75rem;
1480
+ }
1481
+
1482
+ .document-file-item > div:first-child {
1483
+ width: 100%;
1484
+ }
1485
+
1486
+ .document-file-item .collection-selector {
1487
+ width: 100%;
1488
+ min-width: 100% !important;
1489
+ flex-direction: column !important;
1490
+ align-items: stretch !important;
1491
+ gap: 0.5rem;
1492
+ }
1493
+
1494
+ .document-file-item .collection-selector select {
1495
+ width: 100% !important;
1496
+ max-width: none !important;
1497
+ margin-right: 0 !important;
1498
+ order: 1;
1499
+ }
1500
+
1501
+ .document-file-item .collection-selector button {
1502
+ width: 100% !important;
1503
+ order: 2;
1504
+ }
1505
+
1506
+ #bulk-actions-container .d-flex {
1507
+ flex-direction: column !important;
1508
+ align-items: flex-start !important;
1509
+ gap: 0.75rem;
1510
+ }
1511
+
1512
+ #bulk-actions-container .d-flex > div,
1513
+ #bulk-actions-container .d-flex > button {
1514
+ width: 100%;
1515
+ }
1516
+
1517
+ #assign-all-collection-select {
1518
+ width: 100% !important;
1519
+ max-width: none !important;
1520
+ }
1521
+ }
1522
+
1523
+ .document-file-item .collection-selector select {
1524
+ border: 1px solid #ced4da;
1525
+ border-radius: 0.375rem;
1526
+ font-size: 0.875rem;
1527
+ }
1528
+
1529
+ .document-file-item .collection-selector select:focus {
1530
+ border-color: #80bdff;
1531
+ box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
1532
+ }
1533
+
1534
+ .create-new-for-file {
1535
+ min-width: 38px;
1536
+ height: 31px;
1537
+ display: flex;
1538
+ align-items: center;
1539
+ justify-content: center;
1540
+ }
1541
+
1542
+ .create-new-for-file:hover {
1543
+ background-color: #0d6efd;
1544
+ border-color: #0d6efd;
1545
+ color: white;
1546
+ }
1547
+
1548
+ .new-collection-indicator {
1549
+ white-space: nowrap;
1550
+ left: 0;
1551
+ top: 100%;
1552
+ }
1553
+
1554
+ .text-direction-selector {
1555
+ font-size: 0.875rem;
1556
+ }
1557
+
1558
+ .text-direction-selector option {
1559
+ padding: 0.25rem 0.5rem;
1560
+ }
1561
+
1562
+ .collection-selector {
1563
+ min-width: 332px; /* 300px select + 32px button */
1564
+ }
1565
+
1566
+ .document-file-item .collection-selector select {
1567
+ width: 300px;
1568
+ flex-shrink: 0;
1569
+ }
1570
+
1571
+ .document-file-item .collection-selector button {
1572
+ flex-shrink: 0;
1573
+ }
1574
+
1575
+ .scroll-btn:hover {
1576
+ transform: translateY(-3px);
1577
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
1578
+ }
1579
+
1580
+ .scroll-btn {
1581
+ position: fixed;
1582
+ bottom: 20px;
1583
+ right: 30px;
1584
+ z-index: 9999;
1585
+ width: 40px;
1586
+ height: 40px;
1587
+ }
1588
+
1589
+ /* Multi-select tip */
1590
+ #multi-select-tip {
1591
+ margin-bottom: 1rem;
1592
+ background-color: #d4edda !important;
1593
+ border-left: 4px solid #4f9b4b;
1594
+ border-color: #4f9b4b !important;
1595
+ color: #155724;
1596
+ animation: slideInDown 0.4s ease-out;
1597
+ }
1598
+
1599
+ #multi-select-tip .fa-lightbulb {
1600
+ color: #4f9b4b;
1601
+ }
1602
+
1603
+ @keyframes slideInDown {
1604
+ from {
1605
+ opacity: 0;
1606
+ transform: translateY(-20px);
1607
+ }
1608
+ to {
1609
+ opacity: 1;
1610
+ transform: translateY(0);
1611
+ }
1612
+ }
1613
+
1614
+ .badge-fixed-width {
1615
+ width: 40px;
1616
+ text-align: center;
1617
+ display: inline-block;
1618
+ }
1619
+
1620
+ line {
1621
+ cursor: pointer;
1622
+ }
1623
+
1624
+ /* Treeview help button */
1625
+ #treeview-help-icon {
1626
+ padding: 0.4rem 0.6rem;
1627
+ font-size: 1rem;
1628
+ }
1629
+
1630
+ #treeview-help-icon:hover {
1631
+ background-color: #f8f9fa;
1632
+ }
1633
+
1634
+ /* Treeview help popover */
1635
+ .popover {
1636
+ max-width: 350px;
1637
+ background-color: #d4edda;
1638
+ border: 1px solid #4f9b4b;
1639
+ border-left: 4px solid #4f9b4b;
1640
+ }
1641
+
1642
+ .popover-header {
1643
+ background-color: #d4edda !important;
1644
+ color: #155724 !important;
1645
+ border-bottom: 1px solid #4f9b4b !important;
1646
+ font-size: 1rem;
1647
+ font-weight: 600;
1648
+ }
1649
+
1650
+ .popover-body {
1651
+ background-color: #d4edda;
1652
+ color: #155724;
1653
+ font-size: 1rem;
1654
+ }
1655
+
1656
+ .popover-arrow::before,
1657
+ .popover-arrow::after {
1658
+ border-right-color: #4f9b4b !important;
1659
+ }
1660
+
1661
+ .bs-popover-start > .popover-arrow::after {
1662
+ border-left-color: #d4edda !important;
1663
+ }
1664
+
1665
+ /* Drag hint popup */
1666
+ .drag-hint-popup {
1667
+ position: relative;
1668
+ display: block;
1669
+ background-color: #d4edda;
1670
+ color: #155724;
1671
+ padding: 1rem 1rem;
1672
+ border-radius: 0.375rem;
1673
+ border-left: 4px solid #4f9b4b;
1674
+ border: 1px solid #4f9b4b;
1675
+ font-size: 1rem;
1676
+ font-weight: normal;
1677
+ z-index: 1000;
1678
+ animation: slideInDown 0.4s ease-out;
1679
+ margin-bottom: 1rem;
1680
+ }
1681
+
1682
+ .drag-hint-popup i {
1683
+ margin-right: 0.5rem;
1684
+ color: #4f9b4b;
1685
+ }
1686
+
1687
+ @keyframes popupFadeIn {
1688
+ from {
1689
+ opacity: 0;
1690
+ transform: scale(0.8) translateY(-5px);
1691
+ }
1692
+ to {
1693
+ opacity: 1;
1694
+ transform: scale(1) translateY(0);
1695
+ }
1696
+ }