summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/forms.py58
-rw-r--r--ishtar_common/forms_common.py2
-rw-r--r--ishtar_common/locale/django.pot992
-rw-r--r--ishtar_common/management/commands/ishtar_import.py37
-rw-r--r--ishtar_common/management/commands/reassociate_similar_images.py2
-rw-r--r--ishtar_common/management/commands/regenerate_search_vector_cached_label.py22
-rw-r--r--ishtar_common/migrations/0076_migrate_treatmentfile_permissions.py33
-rw-r--r--ishtar_common/migrations/0077_auto_20181129_1755.py20
-rw-r--r--ishtar_common/migrations/0078_auto_20181203_1442.py1832
-rw-r--r--ishtar_common/migrations/0079_migrate-importers.py70
-rw-r--r--ishtar_common/models.py76
-rw-r--r--ishtar_common/models_imports.py3
-rw-r--r--ishtar_common/static/bootstrap/bootstrap.css2
-rw-r--r--ishtar_common/static/js/ishtar.js23
-rw-r--r--ishtar_common/templates/actions.html4
-rw-r--r--ishtar_common/templates/base.html38
-rw-r--r--ishtar_common/templates/blocks/CentimeterMeterWidget.html21
-rw-r--r--ishtar_common/templates/blocks/DataTables.html20
-rw-r--r--ishtar_common/templates/blocks/GramKilogramWidget.html21
-rw-r--r--ishtar_common/templates/blocks/action_list.html4
-rw-r--r--ishtar_common/templates/blocks/bs_field_snippet.html2
-rw-r--r--ishtar_common/templates/ishtar/blocks/sheet_json.html2
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_field_flex_multiple_full.html8
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_nav.html38
-rw-r--r--ishtar_common/templates/ishtar/form.html3
-rw-r--r--ishtar_common/templates/ishtar/forms/qa_base.html3
-rw-r--r--ishtar_common/templates/ishtar/wizard/confirm_wizard.html8
-rw-r--r--ishtar_common/templatetags/ishtar_helpers.py19
-rw-r--r--ishtar_common/templatetags/window_field.py8
-rw-r--r--ishtar_common/templatetags/window_header.py29
-rw-r--r--ishtar_common/tests.py8
-rw-r--r--ishtar_common/urls.py2
-rw-r--r--ishtar_common/utils.py10
-rw-r--r--ishtar_common/views.py51
-rw-r--r--ishtar_common/views_item.py182
-rw-r--r--ishtar_common/widgets.py49
-rw-r--r--ishtar_common/wizards.py58
37 files changed, 3142 insertions, 618 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 20c65971e..91e9fb3e9 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -341,6 +341,37 @@ class CustomForm(BSForm):
return sorted(customs, key=lambda x: x[1])
+class PkWizardSearch(object):
+ current_model = None
+ pk_key = None
+
+ @classmethod
+ def get_formated_datas(cls, cleaned_datas):
+ if not cls.current_model or not cls.pk_key:
+ return []
+ items = []
+ for data in cleaned_datas:
+ if not data or cls.pk_key not in data or not data[cls.pk_key]:
+ continue
+ pks = data[cls.pk_key]
+ for pk in unicode(pks).split(u','):
+ if not pk:
+ continue
+ try:
+ items.append(
+ unicode(cls.current_model.objects.get(pk=int(pk)))
+ )
+ except (cls.current_model.DoesNotExist, ValueError):
+ continue
+ return [
+ (u"",
+ mark_safe(
+ u"<ul class='compact'><li>" + u"</li><li>".join(items) +
+ u"</li></ul>"
+ ))
+ ]
+
+
class CustomFormSearch(forms.Form):
need_user_for_initialization = True
@@ -405,6 +436,22 @@ class FormSet(CustomForm, BaseFormSet):
form.fields[DELETION_FIELD_NAME].label = ''
form.fields[DELETION_FIELD_NAME].widget = self.delete_widget()
+ def _should_delete_form(self, form):
+ """
+ Returns whether or not the form was marked for deletion.
+ If no data, set deletion to True
+ """
+ if form.cleaned_data.get(DELETION_FIELD_NAME, False):
+ return True
+ if not form.cleaned_data or not [
+ __ for __ in form.cleaned_data
+ if __ != DELETION_FIELD_NAME and
+ form.cleaned_data[__] is not None and
+ form.cleaned_data[__] != '']:
+ form.cleaned_data[DELETION_FIELD_NAME] = True
+ return True
+ return False
+
class FormSetWithDeleteSwitches(FormSet):
delete_widget = widgets.DeleteSwitchWidget
@@ -714,16 +761,19 @@ class QAForm(CustomForm, ManageOldType):
elif hasattr(self.fields[k], "choices"):
values = []
for v in kwargs['data'].getlist(k):
- values.append(
- dict(self.fields[k].choices)[int(v)])
+ dct_choices = dict(self.fields[k].choices)
+ if v in dct_choices:
+ values.append(unicode(dct_choices[v]))
+ elif int(v) in dct_choices:
+ values.append(unicode(dct_choices[int(v)]))
self.fields[k].rendered_value = mark_safe(
u" ; ".join(values))
if k not in self.REPLACE_FIELDS:
self.fields[k].label = unicode(self.fields[k].label) + \
- unicode(u" - append to existing")
+ unicode(_(u" - append to existing"))
else:
self.fields[k].label = unicode(self.fields[k].label) + \
- unicode(u" - replace")
+ unicode(_(u" - replace"))
def _set_value(self, item, base_key):
value = self.cleaned_data[base_key]
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 4cc0ca024..e5246d9bb 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -1176,7 +1176,7 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType):
for rel in models.Document.RELATED_MODELS:
if cleaned_data.get(rel, None):
return cleaned_data
- raise forms.ValidationError(_(u"A document have to attached at least "
+ raise forms.ValidationError(_(u"A document has to be attached at least "
u"to one item"))
def save(self, commit=True):
diff --git a/ishtar_common/locale/django.pot b/ishtar_common/locale/django.pot
index 638f29f22..371b21909 100644
--- a/ishtar_common/locale/django.pot
+++ b/ishtar_common/locale/django.pot
@@ -34,12 +34,12 @@ msgstr ""
msgid "Export selected as CSV file"
msgstr ""
-#: admin.py:207 models.py:1686 templates/navbar.html:31
+#: admin.py:207 models.py:1703 templates/navbar.html:31
msgid "Profile"
msgstr ""
#: admin.py:208 forms_common.py:782 forms_common.py:801 forms_common.py:802
-#: models.py:3039
+#: models.py:3063
msgid "Profiles"
msgstr ""
@@ -61,7 +61,7 @@ msgstr ""
msgid "These parents are missing: {}"
msgstr ""
-#: admin.py:386 admin.py:405 models.py:883 models.py:4141
+#: admin.py:386 admin.py:405 models.py:905 models.py:4214
msgid "Parent"
msgstr ""
@@ -69,11 +69,11 @@ msgstr ""
msgid "Center"
msgstr ""
-#: admin.py:395 models.py:4003
+#: admin.py:395 models.py:4076
msgid "Limit"
msgstr ""
-#: admin.py:398 models.py:4013
+#: admin.py:398 models.py:4086
msgid "Town children"
msgstr ""
@@ -121,16 +121,16 @@ msgstr ""
msgid "Hide selected"
msgstr ""
-#: admin.py:931 models.py:2080
+#: admin.py:931 models.py:2098
msgid "Form"
msgstr ""
-#: admin.py:933 models.py:2105 models_imports.py:127
+#: admin.py:933 models.py:2123 models_imports.py:127
#: templates/ishtar/dashboards/dashboard_main.html:39
msgid "Users"
msgstr ""
-#: admin.py:953 models.py:2180
+#: admin.py:953 models.py:2202
msgid "Field"
msgstr ""
@@ -224,7 +224,7 @@ msgstr ""
msgid "Too many cols (%(user_col)d) when maximum is %(ref_col)d"
msgstr ""
-#: data_importer.py:730 views.py:1177
+#: data_importer.py:730 views.py:1200
msgid "No data provided"
msgstr ""
@@ -253,7 +253,7 @@ msgid ""
"source file."
msgstr ""
-#: data_importer.py:1236 views.py:1255 views.py:1265
+#: data_importer.py:1236 views.py:1278 views.py:1288
msgid "Not imported"
msgstr ""
@@ -318,7 +318,7 @@ msgstr ""
msgid "Enter a valid name consisting of letters, spaces and hyphens."
msgstr ""
-#: forms.py:96 forms_common.py:808 views.py:1968
+#: forms.py:96 forms_common.py:808 views.py:2017
msgid "Confirm"
msgstr ""
@@ -326,36 +326,44 @@ msgstr ""
msgid "Are you sure you want to delete?"
msgstr ""
-#: forms.py:379
+#: forms.py:410
msgid "There are identical items."
msgstr ""
-#: forms.py:535
+#: forms.py:566
msgid "Last modified by"
msgstr ""
-#: forms.py:541
+#: forms.py:572
msgid "Modified since"
msgstr ""
-#: forms.py:565 forms.py:566
+#: forms.py:596 forms.py:597
msgid "Closing date"
msgstr ""
-#: forms.py:578 forms_common.py:1272
+#: forms.py:609 forms_common.py:1272
msgid "You should select an item."
msgstr ""
-#: forms.py:579
+#: forms.py:610
msgid "Add a new item"
msgstr ""
-#: forms.py:769 models.py:2434
+#: forms.py:757
+msgid " - append to existing"
+msgstr ""
+
+#: forms.py:760
+msgid " - replace"
+msgstr ""
+
+#: forms.py:803 models.py:2457
msgid "Template"
msgstr ""
#: forms_common.py:54 forms_common.py:72 forms_common.py:317
-#: forms_common.py:556 models.py:2568 models.py:4020
+#: forms_common.py:556 models.py:2591 models.py:4093
#: templates/blocks/JQueryAdvancedTown.html:19
msgid "Town"
msgstr ""
@@ -370,8 +378,8 @@ msgid ""
"french town Saint-Denis in the Seine-Saint-Denis department.</p>"
msgstr ""
-#: forms_common.py:81 forms_common.py:1293 ishtar_menu.py:48 models.py:2952
-#: models.py:3204 models.py:3332 models.py:3495
+#: forms_common.py:81 forms_common.py:1293 ishtar_menu.py:48 models.py:2976
+#: models.py:3228 models.py:3357 models.py:3561
#: templates/ishtar/sheet_person.html:4
msgid "Person"
msgstr ""
@@ -423,17 +431,17 @@ msgid "all users"
msgstr ""
#: forms_common.py:305 forms_common.py:475 forms_common.py:609
-#: ishtar_menu.py:76 models.py:2773 models.py:2890 models.py:3292
+#: ishtar_menu.py:76 models.py:2796 models.py:2914 models.py:3317
#: templates/ishtar/sheet_organization.html:4
msgid "Organization"
msgstr ""
#: forms_common.py:308 forms_common.py:351 forms_common.py:470
#: forms_common.py:526 forms_common.py:604 forms_common.py:790
-#: forms_common.py:823 models.py:1056 models.py:1080 models.py:1879
-#: models.py:2079 models.py:2430 models.py:2765 models.py:2936 models.py:3192
-#: models.py:3999 models.py:4262 models_imports.py:98 models_imports.py:123
-#: models_imports.py:445 models_imports.py:537 models_imports.py:827
+#: forms_common.py:823 models.py:1078 models.py:1102 models.py:1897
+#: models.py:2097 models.py:2453 models.py:2788 models.py:2960 models.py:3216
+#: models.py:4072 models.py:4337 models_imports.py:98 models_imports.py:123
+#: models_imports.py:445 models_imports.py:537 models_imports.py:828
#: templates/ishtar/import_step_by_step.html:102
#: templates/ishtar/import_step_by_step.html:270
#: templates/ishtar/import_table.html:27
@@ -441,40 +449,40 @@ msgstr ""
msgid "Name"
msgstr ""
-#: forms_common.py:309 models.py:2721 models_imports.py:630
+#: forms_common.py:309 models.py:2744 models_imports.py:630
#: models_imports.py:631
msgid "Organization type"
msgstr ""
-#: forms_common.py:311 forms_common.py:550 models.py:2563
+#: forms_common.py:311 forms_common.py:550 models.py:2586
#: templates/ishtar/blocks/sheet_address_section.html:4
msgid "Address"
msgstr ""
-#: forms_common.py:313 forms_common.py:553 models.py:2564
+#: forms_common.py:313 forms_common.py:553 models.py:2587
msgid "Address complement"
msgstr ""
-#: forms_common.py:315 forms_common.py:554 models.py:2566
+#: forms_common.py:315 forms_common.py:554 models.py:2589
msgid "Postal code"
msgstr ""
-#: forms_common.py:318 forms_common.py:557 models.py:2569
+#: forms_common.py:318 forms_common.py:557 models.py:2592
msgid "Country"
msgstr ""
#: forms_common.py:320 forms_common.py:472 forms_common.py:530
-#: forms_common.py:606 forms_common.py:731 models.py:2596
+#: forms_common.py:606 forms_common.py:731 models.py:2619
msgid "Email"
msgstr ""
-#: forms_common.py:321 forms_common.py:533 models.py:2581
+#: forms_common.py:321 forms_common.py:533 models.py:2604
#: templates/ishtar/sheet_person.html:27
#: templates/ishtar/wizard/wizard_person.html:33
msgid "Phone"
msgstr ""
-#: forms_common.py:322 forms_common.py:542 models.py:2593
+#: forms_common.py:322 forms_common.py:542 models.py:2616
#: templates/ishtar/sheet_person.html:45
#: templates/ishtar/wizard/wizard_person.html:54
msgid "Mobile phone"
@@ -486,8 +494,8 @@ msgid "Full text search"
msgstr ""
#: forms_common.py:352 forms_common.py:473 forms_common.py:607
-#: forms_common.py:788 models.py:1089 models.py:2767 models.py:3738
-#: models_imports.py:680 templates/ishtar/blocks/window_image_detail.html:24
+#: forms_common.py:788 models.py:1111 models.py:2790 models.py:3804
+#: models_imports.py:681 templates/ishtar/blocks/window_image_detail.html:24
#: templates/ishtar/blocks/window_tables/documents.html:8
#: templates/ishtar/import_table.html:28
#: templates/ishtar/sheet_organization.html:25
@@ -510,7 +518,7 @@ msgstr ""
msgid "Organization to merge"
msgstr ""
-#: forms_common.py:471 forms_common.py:524 forms_common.py:605 models.py:2934
+#: forms_common.py:471 forms_common.py:524 forms_common.py:605 models.py:2958
#: templates/ishtar/sheet_organization.html:24
msgid "Surname"
msgstr ""
@@ -527,25 +535,25 @@ msgstr ""
msgid "Identity"
msgstr ""
-#: forms_common.py:521 forms_common.py:1095 forms_common.py:1217 models.py:2928
-#: models.py:2930 models.py:3729 models_imports.py:632
+#: forms_common.py:521 forms_common.py:1095 forms_common.py:1217 models.py:2952
+#: models.py:2954 models.py:3795 models_imports.py:633
#: templates/ishtar/blocks/window_tables/documents.html:7
msgid "Title"
msgstr ""
-#: forms_common.py:522 models.py:2932
+#: forms_common.py:522 models.py:2956
msgid "Salutation"
msgstr ""
-#: forms_common.py:528 models.py:2938
+#: forms_common.py:528 models.py:2962
msgid "Raw name"
msgstr ""
-#: forms_common.py:531 models.py:2582
+#: forms_common.py:531 models.py:2605
msgid "Phone description"
msgstr ""
-#: forms_common.py:534 models.py:2584 models.py:2586
+#: forms_common.py:534 models.py:2607 models.py:2609
msgid "Phone description 2"
msgstr ""
@@ -553,11 +561,11 @@ msgstr ""
msgid "Phone 2"
msgstr ""
-#: forms_common.py:538 models.py:2590
+#: forms_common.py:538 models.py:2613
msgid "Phone description 3"
msgstr ""
-#: forms_common.py:540 models.py:2588
+#: forms_common.py:540 models.py:2611
msgid "Phone 3"
msgstr ""
@@ -565,23 +573,23 @@ msgstr ""
msgid "Current organization"
msgstr ""
-#: forms_common.py:559 models.py:2571
+#: forms_common.py:559 models.py:2594
msgid "Other address: address"
msgstr ""
-#: forms_common.py:562 models.py:2574
+#: forms_common.py:562 models.py:2597
msgid "Other address: address complement"
msgstr ""
-#: forms_common.py:564 models.py:2575
+#: forms_common.py:564 models.py:2598
msgid "Other address: postal code"
msgstr ""
-#: forms_common.py:566 models.py:2577
+#: forms_common.py:566 models.py:2600
msgid "Other address: town"
msgstr ""
-#: forms_common.py:568 models.py:2579
+#: forms_common.py:568 models.py:2602
msgid "Other address: country"
msgstr ""
@@ -589,7 +597,7 @@ msgstr ""
msgid "Already has an account"
msgstr ""
-#: forms_common.py:603 models.py:3293
+#: forms_common.py:603 models.py:3318
msgid "Username"
msgstr ""
@@ -597,7 +605,8 @@ msgstr ""
msgid "Account search"
msgstr ""
-#: forms_common.py:669 forms_common.py:709 forms_common.py:713 models.py:2829
+#: forms_common.py:669 forms_common.py:709 forms_common.py:713 models.py:2853
+#: models_imports.py:632
msgid "Person type"
msgstr ""
@@ -605,7 +614,7 @@ msgstr ""
msgid "Account"
msgstr ""
-#: forms_common.py:734 wizards.py:1639
+#: forms_common.py:734 wizards.py:1651
msgid "New password"
msgstr ""
@@ -625,7 +634,7 @@ msgstr ""
msgid "This username already exists."
msgstr ""
-#: forms_common.py:789 models.py:3195 models.py:4148
+#: forms_common.py:789 models.py:3219 models.py:4221
msgid "Areas"
msgstr ""
@@ -633,11 +642,11 @@ msgstr ""
msgid "Send the new password by email?"
msgstr ""
-#: forms_common.py:821 models.py:3197 views.py:968
+#: forms_common.py:821 models.py:3221 views.py:991
msgid "Current profile"
msgstr ""
-#: forms_common.py:824 models.py:3175 models.py:3194
+#: forms_common.py:824 models.py:3199 models.py:3218
msgid "Profile type"
msgstr ""
@@ -665,8 +674,8 @@ msgstr ""
msgid " (duplicate)"
msgstr ""
-#: forms_common.py:932 forms_common.py:946 forms_common.py:947 models.py:4021
-#: models.py:4136
+#: forms_common.py:932 forms_common.py:946 forms_common.py:947 models.py:4094
+#: models.py:4209
msgid "Towns"
msgstr ""
@@ -693,19 +702,19 @@ msgstr ""
msgid "Document - General"
msgstr ""
-#: forms_common.py:1098 forms_common.py:1218 models.py:3543
-#: models_imports.py:633
+#: forms_common.py:1098 forms_common.py:1218 models.py:3609
+#: models_imports.py:634
msgid "Source type"
msgstr ""
#: forms_common.py:1101 forms_common.py:1152 forms_common.py:1333
-#: forms_common.py:1334 models.py:3504 models.py:3612 models.py:3748
+#: forms_common.py:1334 models.py:3570 models.py:3678 models.py:3814
#: templates/ishtar/blocks/window_image_detail.html:9
#: templates/ishtar/blocks/window_tables/documents.html:9
msgid "Authors"
msgstr ""
-#: forms_common.py:1105 models.py:3754
+#: forms_common.py:1105 models.py:3820
msgid "Numerical ressource (web address)"
msgstr ""
@@ -718,7 +727,7 @@ msgctxt "Not directory"
msgid "File"
msgstr ""
-#: forms_common.py:1113 forms_common.py:1219 models.py:4138
+#: forms_common.py:1113 forms_common.py:1219 models.py:4211
msgid "Reference"
msgstr ""
@@ -726,38 +735,38 @@ msgstr ""
msgid "Internal reference"
msgstr ""
-#: forms_common.py:1118 models.py:3756
+#: forms_common.py:1118 models.py:3822
#: templates/ishtar/blocks/window_image_detail.html:150
msgid "Receipt date"
msgstr ""
-#: forms_common.py:1120 models.py:3758 models_imports.py:859
+#: forms_common.py:1120 models.py:3824 models_imports.py:860
#: templates/ishtar/blocks/window_image_detail.html:54
msgid "Creation date"
msgstr ""
-#: forms_common.py:1123 models.py:3761
+#: forms_common.py:1123 models.py:3827
#: templates/ishtar/blocks/window_image_detail.html:160
msgid "Receipt date in documentation"
msgstr ""
-#: forms_common.py:1125 forms_common.py:1222 models.py:473 models.py:2942
-#: models.py:3421 models.py:3764 models_imports.py:483
+#: forms_common.py:1125 forms_common.py:1222 models.py:496 models.py:2966
+#: models.py:3446 models.py:3830 models_imports.py:483
#: templates/ishtar/blocks/window_image_detail.html:170
msgid "Comment"
msgstr ""
-#: forms_common.py:1127 forms_common.py:1221 models.py:1884 models.py:3763
+#: forms_common.py:1127 forms_common.py:1221 models.py:1902 models.py:3829
#: models_imports.py:125 models_imports.py:372 models_imports.py:446
msgid "Description"
msgstr ""
-#: forms_common.py:1130 models.py:3765
+#: forms_common.py:1130 models.py:3831
#: templates/ishtar/blocks/window_image_detail.html:182
msgid "Additional information"
msgstr ""
-#: forms_common.py:1132 forms_common.py:1225 models.py:3767
+#: forms_common.py:1132 forms_common.py:1225 models.py:3833
#: templates/ishtar/blocks/window_image_detail.html:108
msgid "Has a duplicate"
msgstr ""
@@ -788,11 +797,11 @@ msgid "You should at least fill one of this field: title, url, image or file."
msgstr ""
#: forms_common.py:1179
-msgid "A document have to attached at least to one item"
+msgid "A document has to be attached at least to one item"
msgstr ""
#: forms_common.py:1214 forms_common.py:1286 forms_common.py:1321
-#: models.py:3503 templates/ishtar/wizard/wizard_person_deletion.html:139
+#: models.py:3569 templates/ishtar/wizard/wizard_person_deletion.html:139
msgid "Author"
msgstr ""
@@ -820,7 +829,7 @@ msgstr ""
msgid "Would you like to delete this documentation?"
msgstr ""
-#: forms_common.py:1294 models.py:3468 models.py:3497 models_imports.py:634
+#: forms_common.py:1294 models.py:3534 models.py:3563 models_imports.py:635
msgid "Author type"
msgstr ""
@@ -832,11 +841,11 @@ msgstr ""
msgid "There are identical authors."
msgstr ""
-#: forms_common.py:1339 models.py:1683
+#: forms_common.py:1339 models.py:1700
msgid "Query"
msgstr ""
-#: forms_common.py:1344 models.py:1687
+#: forms_common.py:1344 models.py:1704
msgid "Is an alert"
msgstr ""
@@ -876,7 +885,7 @@ msgstr ""
msgid "Deletion"
msgstr ""
-#: ishtar_menu.py:40 models.py:2209 views.py:992
+#: ishtar_menu.py:40 models.py:2231 views.py:1015
msgid "Global variables"
msgstr ""
@@ -896,7 +905,7 @@ msgid "Creation"
msgstr ""
#: ishtar_menu.py:59 ishtar_menu.py:89 ishtar_menu.py:139
-#: templates/ishtar/forms/qa_base.html:29
+#: templates/ishtar/forms/qa_base.html:28
#: templates/ishtar/forms/qa_form.html:16
msgid "Modification"
msgstr ""
@@ -909,19 +918,19 @@ msgstr ""
msgid "Manual merge"
msgstr ""
-#: ishtar_menu.py:110 models_imports.py:882
+#: ishtar_menu.py:110 models_imports.py:883
msgid "Imports"
msgstr ""
-#: ishtar_menu.py:113 views.py:1000
+#: ishtar_menu.py:113 views.py:1023
msgid "New import"
msgstr ""
-#: ishtar_menu.py:117 views.py:1019
+#: ishtar_menu.py:117 views.py:1042
msgid "Current imports"
msgstr ""
-#: ishtar_menu.py:121 views.py:1468
+#: ishtar_menu.py:121 views.py:1491
msgid "Old imports"
msgstr ""
@@ -933,35 +942,35 @@ msgstr ""
msgid "Not a valid item."
msgstr ""
-#: models.py:211
+#: models.py:212
msgid "A selected item is not a valid item."
msgstr ""
-#: models.py:222
+#: models.py:224
msgid "This item already exists."
msgstr ""
-#: models.py:465 models.py:1682 models.py:2191 models.py:2528 models.py:2544
-#: models.py:3420 models_imports.py:368
+#: models.py:488 models.py:1699 models.py:2213 models.py:2551 models.py:2567
+#: models.py:3445 models_imports.py:368
msgid "Label"
msgstr ""
-#: models.py:467
+#: models.py:490
msgid "Textual ID"
msgstr ""
-#: models.py:470
+#: models.py:493
msgid ""
"The slug is the standardized version of the name. It contains only lowercase "
"letters, numbers and hyphens. Each slug must be unique."
msgstr ""
-#: models.py:474 models.py:2081 models.py:2437 models.py:3425
+#: models.py:497 models.py:2099 models.py:2460 models.py:3450
#: models_imports.py:139 models_imports.py:542
msgid "Available"
msgstr ""
-#: models.py:898 models.py:1083 models_imports.py:563
+#: models.py:920 models.py:1105 models_imports.py:563
#: templates/ishtar/formset_import_match.html:21
#: templates/ishtar/import_step_by_step.html:171
#: templates/ishtar/import_step_by_step.html:199
@@ -970,56 +979,56 @@ msgstr ""
msgid "Key"
msgstr ""
-#: models.py:904
+#: models.py:926
msgid "Specific key to an import"
msgstr ""
-#: models.py:1043
+#: models.py:1065
msgid "Generated relation image (SVG)"
msgstr ""
-#: models.py:1057 models.py:1091 models.py:1604 models.py:2193 models.py:3465
-#: models.py:4165 models.py:4247
+#: models.py:1079 models.py:1113 models.py:1621 models.py:2215 models.py:3531
+#: models.py:4238 models.py:4320
msgid "Order"
msgstr ""
-#: models.py:1060
+#: models.py:1082
msgid "Json data - Menu"
msgstr ""
-#: models.py:1061
+#: models.py:1083
msgid "Json data - Menus"
msgstr ""
-#: models.py:1069
+#: models.py:1091
msgid "Text"
msgstr ""
-#: models.py:1070
+#: models.py:1092
msgid "Long text"
msgstr ""
-#: models.py:1071 models_imports.py:676
+#: models.py:1093 models_imports.py:677
msgid "Integer"
msgstr ""
-#: models.py:1072
+#: models.py:1094
msgid "Boolean"
msgstr ""
-#: models.py:1073 models_imports.py:677
+#: models.py:1095 models_imports.py:678
msgid "Float"
msgstr ""
-#: models.py:1074 models_imports.py:679
+#: models.py:1096 models_imports.py:680
msgid "Date"
msgstr ""
-#: models.py:1075
+#: models.py:1097
msgid "Choices"
msgstr ""
-#: models.py:1084
+#: models.py:1106
msgid ""
"Value of the key in the JSON schema. For hierarchical key use \"__\" to "
"explain it. For instance for the key 'my_subkey' with data such as "
@@ -1027,417 +1036,417 @@ msgid ""
"my_key__my_subkey."
msgstr ""
-#: models.py:1088
+#: models.py:1110
msgid "Display"
msgstr ""
-#: models.py:1092
+#: models.py:1114
msgid "Use in search indexes"
msgstr ""
-#: models.py:1099
+#: models.py:1121
msgid "Json data - Field"
msgstr ""
-#: models.py:1100
+#: models.py:1122
msgid "Json data - Fields"
msgstr ""
-#: models.py:1111
+#: models.py:1133
msgid "Content types of the field and of the menu do not match"
msgstr ""
-#: models.py:1171
+#: models.py:1193
msgid "Search vector"
msgstr ""
-#: models.py:1172
+#: models.py:1194
msgid "Auto filled at save"
msgstr ""
-#: models.py:1392
+#: models.py:1409
msgid "Add document/image"
msgstr ""
-#: models.py:1394
+#: models.py:1411
msgid "doc./image"
msgstr ""
-#: models.py:1413
+#: models.py:1430
msgid "Last editor"
msgstr ""
-#: models.py:1416
+#: models.py:1433
msgid "Creator"
msgstr ""
-#: models.py:1597
+#: models.py:1614
msgid "Above"
msgstr ""
-#: models.py:1598
+#: models.py:1615
msgid "Bellow"
msgstr ""
-#: models.py:1599
+#: models.py:1616
msgid "Equal"
msgstr ""
-#: models.py:1605
+#: models.py:1622
msgid "Symmetrical"
msgstr ""
-#: models.py:1606
+#: models.py:1623
msgid "Tiny label"
msgstr ""
-#: models.py:1609
+#: models.py:1626
msgid "Inverse relation"
msgstr ""
-#: models.py:1612
+#: models.py:1629
msgid "Logical relation"
msgstr ""
-#: models.py:1622
+#: models.py:1639
msgid "Cannot have symmetrical and an inverse_relation"
msgstr ""
-#: models.py:1685
+#: models.py:1702
msgid "Content type"
msgstr ""
-#: models.py:1690
+#: models.py:1707
msgid "Search query"
msgstr ""
-#: models.py:1691
+#: models.py:1708
msgid "Search queries"
msgstr ""
-#: models.py:1855
+#: models.py:1873
msgid "Euro"
msgstr ""
-#: models.py:1856
+#: models.py:1874
msgid "US dollar"
msgstr ""
-#: models.py:1857 views.py:742 views.py:803
+#: models.py:1875 views.py:765 views.py:826
msgid "Operations"
msgstr ""
-#: models.py:1858 views.py:744 views.py:807
+#: models.py:1876 views.py:767 views.py:830
msgid "Context records"
msgstr ""
-#: models.py:1859
+#: models.py:1877
msgid "Site"
msgstr ""
-#: models.py:1859
+#: models.py:1877
msgid "Archaeological entity"
msgstr ""
-#: models.py:1863
+#: models.py:1881
msgid "Site search"
msgstr ""
-#: models.py:1864
+#: models.py:1882
msgid "New site"
msgstr ""
-#: models.py:1865
+#: models.py:1883
msgid "Site modification"
msgstr ""
-#: models.py:1866
+#: models.py:1884
msgid "Site deletion"
msgstr ""
-#: models.py:1869
+#: models.py:1887
msgid "Archaeological entity search"
msgstr ""
-#: models.py:1870
+#: models.py:1888
msgid "New archaeological entity"
msgstr ""
-#: models.py:1871
+#: models.py:1889
msgid "Archaeological entity modification"
msgstr ""
-#: models.py:1872
+#: models.py:1890
msgid "Archaeological entity deletion"
msgstr ""
-#: models.py:1880 models.py:2431 models_imports.py:124
+#: models.py:1898 models.py:2454 models_imports.py:124
msgid "Slug"
msgstr ""
-#: models.py:1881
+#: models.py:1899
msgid "Current active"
msgstr ""
-#: models.py:1883
+#: models.py:1901
msgid "Activate experimental feature"
msgstr ""
-#: models.py:1886
+#: models.py:1904
msgid "Alternate configuration"
msgstr ""
-#: models.py:1888
+#: models.py:1906
msgid "Choose an alternate configuration for label, index management"
msgstr ""
-#: models.py:1892
+#: models.py:1910
msgid "Files module"
msgstr ""
-#: models.py:1894
+#: models.py:1912
msgid "Archaeological site module"
msgstr ""
-#: models.py:1896
+#: models.py:1914
msgid "Archaeological site type"
msgstr ""
-#: models.py:1900
+#: models.py:1918
msgid "Context records module"
msgstr ""
-#: models.py:1902
+#: models.py:1920
msgid "Finds module"
msgstr ""
-#: models.py:1903
+#: models.py:1921
msgid "Need context records module"
msgstr ""
-#: models.py:1905
+#: models.py:1923
msgid "Find index is based on"
msgstr ""
-#: models.py:1907
+#: models.py:1925
msgid ""
"To prevent irrelevant indexes, change this parameter only if there is no "
"find in the database"
msgstr ""
-#: models.py:1910
+#: models.py:1928
msgid "Warehouses module"
msgstr ""
-#: models.py:1911
+#: models.py:1929
msgid "Need finds module"
msgstr ""
-#: models.py:1912
+#: models.py:1930
msgid "Preservation module"
msgstr ""
-#: models.py:1914
+#: models.py:1932
msgid "Mapping module"
msgstr ""
-#: models.py:1915
+#: models.py:1933
msgid "Underwater module"
msgstr ""
-#: models.py:1917
+#: models.py:1935
msgid "Parcel are mandatory for context records"
msgstr ""
-#: models.py:1919
+#: models.py:1937
msgid "Home page"
msgstr ""
-#: models.py:1920
+#: models.py:1938
#, python-brace-format
msgid ""
"Homepage of Ishtar - if not defined a default homepage will appear. Use the "
"markdown syntax. {random_image} can be used to display a random image."
msgstr ""
-#: models.py:1924
+#: models.py:1942
msgid "Main operation code prefix"
msgstr ""
-#: models.py:1928
+#: models.py:1946
msgid "Default operation code prefix"
msgstr ""
-#: models.py:1932
+#: models.py:1950
msgid "Operation region code"
msgstr ""
-#: models.py:1936
+#: models.py:1954
msgid "File external id"
msgstr ""
-#: models.py:1938
+#: models.py:1956
msgid ""
"Formula to manage file external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1943
+#: models.py:1961
msgid "Parcel external id"
msgstr ""
-#: models.py:1946
+#: models.py:1964
msgid ""
"Formula to manage parcel external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1951
+#: models.py:1969
msgid "Context record external id"
msgstr ""
-#: models.py:1953
+#: models.py:1971
msgid ""
"Formula to manage context record external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1958
+#: models.py:1976
msgid "Base find external id"
msgstr ""
-#: models.py:1960
+#: models.py:1978
msgid ""
"Formula to manage base find external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1965
+#: models.py:1983
msgid "Find external id"
msgstr ""
-#: models.py:1967
+#: models.py:1985
msgid ""
"Formula to manage find external ID. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1972
+#: models.py:1990
msgid "Container external id"
msgstr ""
-#: models.py:1974
+#: models.py:1992
msgid ""
"Formula to manage container external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1979
+#: models.py:1997
msgid "Warehouse external id"
msgstr ""
-#: models.py:1981
+#: models.py:1999
msgid ""
"Formula to manage warehouse external ID. Change this with care. With "
"incorrect formula, the application might be unusable and import of external "
"data can be destructive."
msgstr ""
-#: models.py:1986
+#: models.py:2004
msgid "Raw name for person"
msgstr ""
-#: models.py:1988
+#: models.py:2006
msgid ""
"Formula to manage person raw_name. Change this with care. With incorrect "
"formula, the application might be unusable and import of external data can "
"be destructive."
msgstr ""
-#: models.py:1992
+#: models.py:2010
msgid "Use auto index for finds"
msgstr ""
-#: models.py:1994
+#: models.py:2012
msgid "Currency"
msgstr ""
-#: models.py:1998
+#: models.py:2016
msgid "Ishtar site profile"
msgstr ""
-#: models.py:1999
+#: models.py:2017
msgid "Ishtar site profiles"
msgstr ""
-#: models.py:2083
+#: models.py:2101
msgid "Enable this form"
msgstr ""
-#: models.py:2084
+#: models.py:2102
msgid ""
"Disable with caution: disabling a form with mandatory fields may lead to "
"database errors."
msgstr ""
-#: models.py:2087
+#: models.py:2105
msgid "Apply to all"
msgstr ""
-#: models.py:2088
+#: models.py:2106
msgid ""
"Apply this form to all users. If set to True, selecting user and user type "
"is useless."
msgstr ""
-#: models.py:2094
+#: models.py:2112
msgid "Custom form"
msgstr ""
-#: models.py:2095
+#: models.py:2113
msgid "Custom forms"
msgstr ""
-#: models.py:2111
+#: models.py:2129
msgid "User types"
msgstr ""
-#: models.py:2183
+#: models.py:2205
msgid "Excluded field"
msgstr ""
-#: models.py:2184
+#: models.py:2206
msgid "Excluded fields"
msgstr ""
-#: models.py:2194 templates/blocks/form_flex_snippet.html:18
+#: models.py:2216 templates/blocks/form_flex_snippet.html:18
#: templates/blocks/table_form_snippet.html:9
msgid "Help"
msgstr ""
-#: models.py:2197
+#: models.py:2219
msgid "Custom form - Json data field"
msgstr ""
-#: models.py:2198
+#: models.py:2220
msgid "Custom form - Json data fields"
msgstr ""
-#: models.py:2202
+#: models.py:2224
msgid "Variable name"
msgstr ""
-#: models.py:2203
+#: models.py:2225
msgid "Description of the variable"
msgstr ""
-#: models.py:2205 models_imports.py:564
+#: models.py:2227 models_imports.py:564
#: templates/ishtar/formset_import_match.html:22
#: templates/ishtar/import_step_by_step.html:172
#: templates/ishtar/import_step_by_step.html:200
@@ -1445,559 +1454,563 @@ msgstr ""
msgid "Value"
msgstr ""
-#: models.py:2208
+#: models.py:2230
msgid "Global variable"
msgstr ""
-#: models.py:2335 models.py:2365
+#: models.py:2358 models.py:2388
msgid "Total"
msgstr ""
-#: models.py:2342 models.py:2529 models.py:2545
+#: models.py:2365 models.py:2552 models.py:2568
#: templates/ishtar/dashboards/dashboard_main_detail.html:211
#: templates/ishtar/dashboards/dashboard_main_detail_users.html:5
#: templates/ishtar/sheet_person.html:30
msgid "Number"
msgstr ""
-#: models.py:2429
+#: models.py:2452
msgid "Administrative Act"
msgstr ""
-#: models.py:2436
+#: models.py:2459
msgid "Associated object"
msgstr ""
-#: models.py:2441
+#: models.py:2464
msgid "Document template"
msgstr ""
-#: models.py:2442
+#: models.py:2465
msgid "Document templates"
msgstr ""
-#: models.py:2533 models.py:2546 models.py:4285 models_imports.py:853
+#: models.py:2556 models.py:2569 models.py:4360 models_imports.py:854
msgid "State"
msgstr ""
-#: models.py:2551 models.py:4007 templates/blocks/JQueryAdvancedTown.html:12
+#: models.py:2574 models.py:4080 templates/blocks/JQueryAdvancedTown.html:12
msgid "Department"
msgstr ""
-#: models.py:2552
+#: models.py:2575
msgid "Departments"
msgstr ""
-#: models.py:2592
+#: models.py:2615
msgid "Raw phone"
msgstr ""
-#: models.py:2598
+#: models.py:2621
msgid "Alternative address is prefered"
msgstr ""
-#: models.py:2637
+#: models.py:2660
msgid "Tel: "
msgstr ""
-#: models.py:2641
+#: models.py:2664
msgid "Mobile: "
msgstr ""
-#: models.py:2645
+#: models.py:2668
msgid "Email: "
msgstr ""
-#: models.py:2650
+#: models.py:2673
msgid "Merge key"
msgstr ""
-#: models.py:2722
+#: models.py:2745
msgid "Organization types"
msgstr ""
-#: models.py:2749 models.py:2896 models.py:3303
+#: models.py:2772 models.py:2920 models.py:3328
msgctxt "key for text search"
msgid "name"
msgstr ""
-#: models.py:2753 models.py:2908 models.py:3315 models.py:3639
+#: models.py:2776 models.py:2932 models.py:3340 models.py:3705
msgctxt "key for text search"
msgid "type"
msgstr ""
-#: models.py:2768 models.py:2947 models.py:3498 models.py:4015
+#: models.py:2791 models.py:2971 models.py:3564 models.py:4088
msgid "Cached name"
msgstr ""
-#: models.py:2774
+#: models.py:2797
msgid "Organizations"
msgstr ""
-#: models.py:2804
+#: models.py:2828
msgid "unknown organization"
msgstr ""
-#: models.py:2830
+#: models.py:2854
msgid "Person types"
msgstr ""
-#: models.py:2843 models_imports.py:670
+#: models.py:2867 models_imports.py:671
msgid "Title type"
msgstr ""
-#: models.py:2844
+#: models.py:2868
msgid "Title types"
msgstr ""
-#: models.py:2868
+#: models.py:2892
msgid "Mr"
msgstr ""
-#: models.py:2869
+#: models.py:2893
msgid "Miss"
msgstr ""
-#: models.py:2870
+#: models.py:2894
msgid "Mr and Mrs"
msgstr ""
-#: models.py:2871
+#: models.py:2895
msgid "Mrs"
msgstr ""
-#: models.py:2872
+#: models.py:2896
msgid "Doctor"
msgstr ""
-#: models.py:2900 models.py:3307
+#: models.py:2924 models.py:3332
msgctxt "key for text search"
msgid "surname"
msgstr ""
-#: models.py:2904 models.py:3311
+#: models.py:2928 models.py:3336
msgctxt "key for text search"
msgid "email"
msgstr ""
-#: models.py:2912 models.py:3319
+#: models.py:2936 models.py:3344
msgctxt "key for text search"
msgid "organization"
msgstr ""
-#: models.py:2916
+#: models.py:2940
msgctxt "key for text search"
msgid "has-account"
msgstr ""
-#: models.py:2940
+#: models.py:2964
msgid "Contact type"
msgstr ""
-#: models.py:2943 models.py:3033
+#: models.py:2967 models.py:3057
msgid "Types"
msgstr ""
-#: models.py:2946
+#: models.py:2970
msgid "Is attached to"
msgstr ""
-#: models.py:2953
+#: models.py:2977
msgid "Persons"
msgstr ""
-#: models.py:3171
+#: models.py:3195
msgid "Groups"
msgstr ""
-#: models.py:3176
+#: models.py:3200
msgid "Profile types"
msgstr ""
-#: models.py:3187
+#: models.py:3211
msgid "Profile type summary"
msgstr ""
-#: models.py:3188
+#: models.py:3212
msgid "Profile types summary"
msgstr ""
-#: models.py:3199
+#: models.py:3223
msgid "Show field number"
msgstr ""
-#: models.py:3200
+#: models.py:3224
msgid "Automatically pin"
msgstr ""
-#: models.py:3201
+#: models.py:3225
msgid "Display pin menu"
msgstr ""
-#: models.py:3207
+#: models.py:3231
msgid "User profile"
msgstr ""
-#: models.py:3208
+#: models.py:3232
msgid "User profiles"
msgstr ""
-#: models.py:3243
+#: models.py:3267 models.py:3522
msgid " - duplicate"
msgstr ""
-#: models.py:3299
+#: models.py:3324
msgctxt "key for text search"
msgid "username"
msgstr ""
-#: models.py:3335
+#: models.py:3360
msgid "Advanced shortcut menu"
msgstr ""
-#: models.py:3338
+#: models.py:3363
msgid "Ishtar user"
msgstr ""
-#: models.py:3339
+#: models.py:3364
msgid "Ishtar users"
msgstr ""
-#: models.py:3424
+#: models.py:3449
msgid "Owner"
msgstr ""
-#: models.py:3427
-msgid "Shared with"
+#: models.py:3452
+msgid "Shared (read) with"
+msgstr ""
+
+#: models.py:3456
+msgid "Shared (read/edit) with"
msgstr ""
-#: models.py:3469
+#: models.py:3535
msgid "Author types"
msgstr ""
-#: models.py:3544
+#: models.py:3610
msgid "Source types"
msgstr ""
-#: models.py:3554 models_imports.py:669
+#: models.py:3620 models_imports.py:670
msgid "Support type"
msgstr ""
-#: models.py:3555
+#: models.py:3621
msgid "Support types"
msgstr ""
-#: models.py:3564
+#: models.py:3630
msgid "Format type"
msgstr ""
-#: models.py:3565
+#: models.py:3631
msgid "Format types"
msgstr ""
-#: models.py:3574
+#: models.py:3640
msgid "URL"
msgstr ""
-#: models.py:3577
+#: models.py:3643
msgid "License type"
msgstr ""
-#: models.py:3578
+#: models.py:3644
msgid "License types"
msgstr ""
-#: models.py:3631
+#: models.py:3697
msgctxt "key for text search"
msgid "author"
msgstr ""
-#: models.py:3635
+#: models.py:3701
msgctxt "key for text search"
msgid "title"
msgstr ""
-#: models.py:3643
+#: models.py:3709
msgctxt "key for text search"
msgid "reference"
msgstr ""
-#: models.py:3647
+#: models.py:3713
msgctxt "key for text search"
msgid "internal-reference"
msgstr ""
-#: models.py:3651
+#: models.py:3717
msgctxt "key for text search"
msgid "description"
msgstr ""
-#: models.py:3655
+#: models.py:3721
msgctxt "key for text search"
msgid "comment"
msgstr ""
-#: models.py:3659
+#: models.py:3725
msgctxt "key for text search"
msgid "additional-information"
msgstr ""
-#: models.py:3663
+#: models.py:3729
msgctxt "key for text search"
msgid "has-duplicate"
msgstr ""
-#: models.py:3667 models.py:3714
+#: models.py:3733 models.py:3780
msgctxt "key for text search"
msgid "operation"
msgstr ""
-#: models.py:3671 models.py:3717
+#: models.py:3737 models.py:3783
msgctxt "key for text search"
msgid "context-record"
msgstr ""
-#: models.py:3675 models.py:3719
+#: models.py:3741 models.py:3785
msgctxt "key for text search"
msgid "find"
msgstr ""
-#: models.py:3679 models.py:3718
+#: models.py:3745 models.py:3784
msgctxt "key for text search"
msgid "file"
msgstr ""
-#: models.py:3683 models.py:3720
+#: models.py:3749 models.py:3786
msgctxt "key for text search"
msgid "site"
msgstr ""
-#: models.py:3687 models.py:3721
+#: models.py:3753 models.py:3787
msgctxt "key for text search"
msgid "warehouse"
msgstr ""
-#: models.py:3723
+#: models.py:3789
msgctxt "key for text search"
msgid "treatment"
msgstr ""
-#: models.py:3726
+#: models.py:3792
msgctxt "key for text search"
msgid "treatment-file"
msgstr ""
-#: models.py:3732
+#: models.py:3798
msgid "Index"
msgstr ""
-#: models.py:3734
+#: models.py:3800
msgid "External ID"
msgstr ""
-#: models.py:3735 templates/ishtar/blocks/window_image_detail.html:34
+#: models.py:3801 templates/ishtar/blocks/window_image_detail.html:34
msgid "Ref."
msgstr ""
-#: models.py:3736 templates/ishtar/blocks/window_image_detail.html:44
+#: models.py:3802 templates/ishtar/blocks/window_image_detail.html:44
msgid "Internal ref."
msgstr ""
-#: models.py:3740
+#: models.py:3806
msgid "License"
msgstr ""
-#: models.py:3742 templates/ishtar/blocks/window_image_detail.html:78
+#: models.py:3808 templates/ishtar/blocks/window_image_detail.html:78
msgid "Support"
msgstr ""
-#: models.py:3744 models_imports.py:635
+#: models.py:3810 models_imports.py:636
#: templates/ishtar/blocks/window_image_detail.html:88
msgid "Format"
msgstr ""
-#: models.py:3746 templates/ishtar/blocks/window_image_detail.html:98
+#: models.py:3812 templates/ishtar/blocks/window_image_detail.html:98
msgid "Scale"
msgstr ""
-#: models.py:3750
+#: models.py:3816
msgid "Authors (raw)"
msgstr ""
-#: models.py:3762 templates/ishtar/blocks/window_image_detail.html:118
+#: models.py:3828 templates/ishtar/blocks/window_image_detail.html:118
msgid "Number of items"
msgstr ""
-#: models.py:3769
+#: models.py:3835
msgid "Symbolic links"
msgstr ""
-#: models.py:3772
+#: models.py:3838
msgid "Related"
msgstr ""
-#: models.py:3773
+#: models.py:3839
msgid "Cached value - do not edit"
msgstr ""
-#: models.py:3776 templates/ishtar/sheet_document.html:4
+#: models.py:3842 templates/ishtar/sheet_document.html:4
msgid "Document"
msgstr ""
-#: models.py:3777 templates/ishtar/sheet_person.html:113
+#: models.py:3843 templates/ishtar/sheet_person.html:113
msgid "Documents"
msgstr ""
-#: models.py:3781
+#: models.py:3847
msgid "Can view all Documents"
msgstr ""
-#: models.py:3783
+#: models.py:3849
msgid "Can view own Document"
msgstr ""
-#: models.py:3785
+#: models.py:3851
msgid "Can add own Document"
msgstr ""
-#: models.py:3787
+#: models.py:3853
msgid "Can change own Document"
msgstr ""
-#: models.py:3789
+#: models.py:3855
msgid "Can delete own Document"
msgstr ""
-#: models.py:4000
+#: models.py:4073
msgid "Surface (m2)"
msgstr ""
-#: models.py:4001
+#: models.py:4074
msgid "Localisation"
msgstr ""
-#: models.py:4009
+#: models.py:4082
msgid "Year of creation"
msgstr ""
-#: models.py:4010
+#: models.py:4083
msgid "Filling this field is relevant to distinguish old towns from new towns."
msgstr ""
-#: models.py:4142
+#: models.py:4215
msgid "Only four level of parent are managed."
msgstr ""
-#: models.py:4147
+#: models.py:4220
msgid "Area"
msgstr ""
-#: models.py:4166
+#: models.py:4239
msgid "Is preventive"
msgstr ""
-#: models.py:4167
+#: models.py:4240
msgid "Is judiciary"
msgstr ""
-#: models.py:4170 models_imports.py:636
+#: models.py:4243 models_imports.py:637
msgid "Operation type"
msgstr ""
-#: models.py:4171
+#: models.py:4244
msgid "Operation types"
msgstr ""
-#: models.py:4210
+#: models.py:4283
msgid "Judiciary"
msgstr ""
-#: models.py:4212
+#: models.py:4285
msgid "Preventive"
msgstr ""
-#: models.py:4214
+#: models.py:4287
msgid "Research"
msgstr ""
-#: models.py:4249
+#: models.py:4322
msgid "Authority name"
msgstr ""
-#: models.py:4250
+#: models.py:4323
msgid "Authority SRID"
msgstr ""
-#: models.py:4253 models_imports.py:668
+#: models.py:4326 models_imports.py:669
msgid "Spatial reference system"
msgstr ""
-#: models.py:4254
+#: models.py:4327
msgid "Spatial reference systems"
msgstr ""
-#: models.py:4261
+#: models.py:4336
msgid "Filename"
msgstr ""
-#: models.py:4266
+#: models.py:4341
msgid "Administration script"
msgstr ""
-#: models.py:4267
+#: models.py:4342
msgid "Administration scripts"
msgstr ""
-#: models.py:4274
+#: models.py:4349
msgid "Scheduled"
msgstr ""
-#: models.py:4275
+#: models.py:4350
msgid "In progress"
msgstr ""
-#: models.py:4276 models_imports.py:792
+#: models.py:4351 models_imports.py:793
msgid "Finished with errors"
msgstr ""
-#: models.py:4277 models_imports.py:793
+#: models.py:4352 models_imports.py:794
msgid "Finished"
msgstr ""
-#: models.py:4290
+#: models.py:4365
msgid "Result"
msgstr ""
-#: models.py:4293
+#: models.py:4368
msgid "Administration task"
msgstr ""
-#: models.py:4294
+#: models.py:4369
msgid "Administration tasks"
msgstr ""
-#: models.py:4298
+#: models.py:4373
msgid "Unknown"
msgstr ""
-#: models.py:4313
+#: models.py:4388
msgid ""
"ISHTAR_SCRIPT_DIR is not set in your local_settings. Contact your "
"administrator."
msgstr ""
-#: models.py:4322
+#: models.py:4397
msgid ""
"Your ISHTAR_SCRIPT_DIR is containing dots \"..\". As it can refer to "
"relative paths, it can be a security issue and this is not allowed. Only put "
"a full path."
msgstr ""
-#: models.py:4333
+#: models.py:4408
msgid "Your ISHTAR_SCRIPT_DIR: \"{}\" is not a valid directory."
msgstr ""
-#: models.py:4349
+#: models.py:4424
msgid ""
"Script \"{}\" is not available in your script directory. Check your "
"configuration."
@@ -2028,7 +2041,7 @@ msgid "Leave blank for no restrictions"
msgstr ""
#: models_imports.py:136
-msgid "Is template"
+msgid "Can be exported"
msgstr ""
#: models_imports.py:137
@@ -2136,11 +2149,11 @@ msgstr ""
msgid "Importer - Targets"
msgstr ""
-#: models_imports.py:525 views_item.py:847
+#: models_imports.py:525 views_item.py:346 views_item.py:950
msgid "True"
msgstr ""
-#: models_imports.py:526 views_item.py:849
+#: models_imports.py:526 views_item.py:952
msgid "False"
msgstr ""
@@ -2172,327 +2185,327 @@ msgstr ""
msgid "Importer - Targets keys"
msgstr ""
-#: models_imports.py:637
+#: models_imports.py:638
msgid "Period"
msgstr ""
-#: models_imports.py:638
+#: models_imports.py:639
msgid "Report state"
msgstr ""
-#: models_imports.py:639
+#: models_imports.py:640
msgid "Remain type"
msgstr ""
-#: models_imports.py:640
+#: models_imports.py:641
msgid "Unit"
msgstr ""
-#: models_imports.py:642
+#: models_imports.py:643
msgid "Activity type"
msgstr ""
-#: models_imports.py:644
+#: models_imports.py:645
msgid "Documentation type"
msgstr ""
-#: models_imports.py:645
+#: models_imports.py:646
msgid "Material"
msgstr ""
-#: models_imports.py:647
+#: models_imports.py:648
msgid "Conservatory state"
msgstr ""
-#: models_imports.py:648
+#: models_imports.py:649
msgid "Container type"
msgstr ""
-#: models_imports.py:650
+#: models_imports.py:651
msgid "Warehouse division"
msgstr ""
-#: models_imports.py:651
+#: models_imports.py:652
msgid "Warehouse type"
msgstr ""
-#: models_imports.py:652
+#: models_imports.py:653
msgid "Treatment type"
msgstr ""
-#: models_imports.py:654
+#: models_imports.py:655
msgid "Treatment emergency type"
msgstr ""
-#: models_imports.py:655
+#: models_imports.py:656
msgid "Object type"
msgstr ""
-#: models_imports.py:656
+#: models_imports.py:657
msgid "Integrity type"
msgstr ""
-#: models_imports.py:658
+#: models_imports.py:659
msgid "Remarkability type"
msgstr ""
-#: models_imports.py:659
+#: models_imports.py:660
msgid "Alteration type"
msgstr ""
-#: models_imports.py:661
+#: models_imports.py:662
msgid "Alteration cause type"
msgstr ""
-#: models_imports.py:662
+#: models_imports.py:663
msgid "Batch type"
msgstr ""
-#: models_imports.py:663
+#: models_imports.py:664
msgid "Checked type"
msgstr ""
-#: models_imports.py:665
+#: models_imports.py:666
msgid "Identification type"
msgstr ""
-#: models_imports.py:667
+#: models_imports.py:668
msgid "Context record relation type"
msgstr ""
-#: models_imports.py:678
+#: models_imports.py:679
msgid "String"
msgstr ""
-#: models_imports.py:681
+#: models_imports.py:682
#: templates/ishtar/dashboards/dashboard_main_detail.html:196
msgid "Year"
msgstr ""
-#: models_imports.py:682
+#: models_imports.py:683
msgid "INSEE code"
msgstr ""
-#: models_imports.py:683
+#: models_imports.py:684
msgid "String to boolean"
msgstr ""
-#: models_imports.py:684
+#: models_imports.py:685
msgctxt "filesystem"
msgid "File"
msgstr ""
-#: models_imports.py:685
+#: models_imports.py:686
msgid "Unknow type"
msgstr ""
-#: models_imports.py:702
+#: models_imports.py:703
msgid "4 digit year. e.g.: \"2015\""
msgstr ""
-#: models_imports.py:703
+#: models_imports.py:704
msgid "4 digit year/month/day. e.g.: \"2015/02/04\""
msgstr ""
-#: models_imports.py:704
+#: models_imports.py:705
msgid "Day/month/4 digit year. e.g.: \"04/02/2015\""
msgstr ""
-#: models_imports.py:720
+#: models_imports.py:721
msgid "Options"
msgstr ""
-#: models_imports.py:722
+#: models_imports.py:723
msgid "Split character(s)"
msgstr ""
-#: models_imports.py:727
+#: models_imports.py:728
msgid "Importer - Formater type"
msgstr ""
-#: models_imports.py:728
+#: models_imports.py:729
msgid "Importer - Formater types"
msgstr ""
-#: models_imports.py:784
+#: models_imports.py:785
#: templates/ishtar/dashboards/dashboard_main_detail.html:132
msgid "Created"
msgstr ""
-#: models_imports.py:785
+#: models_imports.py:786
msgid "Analyse in progress"
msgstr ""
-#: models_imports.py:786
+#: models_imports.py:787
msgid "Analysed"
msgstr ""
-#: models_imports.py:787
+#: models_imports.py:788
msgid "Check modified in queue"
msgstr ""
-#: models_imports.py:788
+#: models_imports.py:789
msgid "Import in queue"
msgstr ""
-#: models_imports.py:789
+#: models_imports.py:790
msgid "Check modified in progress"
msgstr ""
-#: models_imports.py:790
+#: models_imports.py:791
msgid "Import in progress"
msgstr ""
-#: models_imports.py:791
+#: models_imports.py:792
msgid "Partially imported"
msgstr ""
-#: models_imports.py:794
+#: models_imports.py:795
msgid "Archived"
msgstr ""
-#: models_imports.py:830
+#: models_imports.py:831
msgid "Imported file"
msgstr ""
-#: models_imports.py:832
+#: models_imports.py:833
msgid "Associated images (zip file)"
msgstr ""
-#: models_imports.py:836
+#: models_imports.py:837
msgid "If a group is selected, target key saved in this group will be used."
msgstr ""
-#: models_imports.py:839
+#: models_imports.py:840
msgid "Encoding"
msgstr ""
-#: models_imports.py:842
+#: models_imports.py:843
msgid "Skip lines"
msgstr ""
-#: models_imports.py:843
+#: models_imports.py:844
msgid "Number of header lines in your file (can be 0)."
msgstr ""
-#: models_imports.py:844
+#: models_imports.py:845
msgid "Error file"
msgstr ""
-#: models_imports.py:847
+#: models_imports.py:848
msgid "Result file"
msgstr ""
-#: models_imports.py:850
+#: models_imports.py:851
msgid "Match file"
msgstr ""
-#: models_imports.py:856
+#: models_imports.py:857
msgid "Conservative import"
msgstr ""
-#: models_imports.py:857
+#: models_imports.py:858
msgid "If set to true, do not overload existing values."
msgstr ""
-#: models_imports.py:860
+#: models_imports.py:861
msgid "End date"
msgstr ""
-#: models_imports.py:863
+#: models_imports.py:864
msgid "Remaining seconds"
msgstr ""
-#: models_imports.py:865
+#: models_imports.py:866
msgid "Current line"
msgstr ""
-#: models_imports.py:867
+#: models_imports.py:868
msgid "Number of line"
msgstr ""
-#: models_imports.py:870
+#: models_imports.py:871
msgid "Imported line numbers"
msgstr ""
-#: models_imports.py:873
+#: models_imports.py:874
msgid "Changed have been checked"
msgstr ""
-#: models_imports.py:876
+#: models_imports.py:877
msgid "Changed line numbers"
msgstr ""
-#: models_imports.py:881
+#: models_imports.py:882
msgid "Import"
msgstr ""
-#: models_imports.py:970
+#: models_imports.py:971
msgid "Analyse"
msgstr ""
-#: models_imports.py:972 models_imports.py:981
+#: models_imports.py:973 models_imports.py:982
msgid "Re-analyse"
msgstr ""
-#: models_imports.py:973
+#: models_imports.py:974
msgid "Launch import"
msgstr ""
-#: models_imports.py:976
+#: models_imports.py:977
msgid "Step by step import"
msgstr ""
-#: models_imports.py:977 models_imports.py:986
+#: models_imports.py:978 models_imports.py:987
msgid "Re-check for changes"
msgstr ""
-#: models_imports.py:979 models_imports.py:988
+#: models_imports.py:980 models_imports.py:989
msgid "Check for changes"
msgstr ""
-#: models_imports.py:982
+#: models_imports.py:983
msgid "Re-import"
msgstr ""
-#: models_imports.py:985
+#: models_imports.py:986
msgid "Step by step re-import"
msgstr ""
-#: models_imports.py:989
+#: models_imports.py:990
msgid "Archive"
msgstr ""
-#: models_imports.py:991
+#: models_imports.py:992
msgid "Unarchive"
msgstr ""
-#: models_imports.py:992 templates/ishtar/form_delete.html:11 views.py:1847
-#: widgets.py:371 widgets.py:403
+#: models_imports.py:993 templates/ishtar/form_delete.html:11 views.py:1896
+#: widgets.py:379 widgets.py:411
msgid "Delete"
msgstr ""
-#: models_imports.py:1042
+#: models_imports.py:1043
msgid "Error in the CSV file."
msgstr ""
-#: models_imports.py:1070
+#: models_imports.py:1071
msgid "Modification check {} added to the queue"
msgstr ""
-#: models_imports.py:1140
+#: models_imports.py:1141
msgid "Import {} added to the queue"
msgstr ""
-#: models_imports.py:1158
+#: models_imports.py:1159
msgid "Error on imported file: {}"
msgstr ""
-#: models_imports.py:1193
+#: models_imports.py:1194
msgid "Import {} finished with errors"
msgstr ""
-#: models_imports.py:1202
+#: models_imports.py:1203
msgid "Import {} finished with no errors"
msgstr ""
@@ -2544,12 +2557,12 @@ msgid "View on site"
msgstr ""
#: templates/admin/change_form.html:24 templates/admin/change_form.html:27
-#: views.py:1231 views.py:1236
+#: views.py:1254 views.py:1259
msgid "Previous"
msgstr ""
#: templates/admin/change_form.html:32 templates/admin/change_form.html:35
-#: views.py:1239 views.py:1242
+#: views.py:1262 views.py:1265
msgid "Next"
msgstr ""
@@ -2583,49 +2596,53 @@ msgid " items added."
msgstr ""
#: templates/base.html:47
-msgid "yes"
+msgid "Select only one item."
msgstr ""
#: templates/base.html:48
-msgid "no"
+msgid "yes"
msgstr ""
#: templates/base.html:49
-msgid "Autorefresh start. The form is disabled."
+msgid "no"
msgstr ""
#: templates/base.html:50
+msgid "Autorefresh start. The form is disabled."
+msgstr ""
+
+#: templates/base.html:51
msgid "Autorefresh end. The form is re-enabled."
msgstr ""
-#: templates/base.html:81
+#: templates/base.html:82
msgid "Current items"
msgstr ""
-#: templates/base.html:83 templates/ishtar/forms/qa_base.html:34
+#: templates/base.html:84 templates/ishtar/forms/qa_base.html:33
#: templates/ishtar/forms/qa_form.html:21 templates/ishtar/manage_basket.html:4
#: templates/welcome.html:11 templates/welcome.html:12
-#: templates/welcome.html:13 templates/welcome.html:14 wizards.py:423
+#: templates/welcome.html:13 templates/welcome.html:14 wizards.py:435
msgid ":"
msgstr ""
-#: templates/base.html:96
+#: templates/base.html:97
msgid "Sheets"
msgstr ""
-#: templates/base.html:146
+#: templates/base.html:158
msgid "Processing..."
msgstr ""
-#: templates/base.html:148
+#: templates/base.html:160
msgid "This can be long."
msgstr ""
-#: templates/base.html:150
+#: templates/base.html:162
msgid "Time to take a coffee?"
msgstr ""
-#: templates/base.html:152
+#: templates/base.html:164
msgid "Time to take another coffee?"
msgstr ""
@@ -2635,7 +2652,8 @@ msgid "Expand table"
msgstr ""
#: templates/blocks/DataTables.html:53 templates/blocks/JQueryJqGrid.html:26
-#: templates/ishtar/blocks/window_nav.html:59
+#: templates/ishtar/blocks/window_nav.html:62
+#: templates/ishtar/blocks/window_nav.html:68
#: templates/ishtar/blocks/window_tables/dynamic_documents.html:45
msgid "Export"
msgstr ""
@@ -2806,8 +2824,8 @@ msgstr ""
#: templates/ishtar/blocks/modify_toolbar.html:1
#: templates/ishtar/blocks/window_image.html:11
-#: templates/ishtar/blocks/window_nav.html:47
-#: templates/ishtar/forms/qa_base.html:57
+#: templates/ishtar/blocks/window_nav.html:49
+#: templates/ishtar/forms/qa_base.html:56
#: templates/ishtar/organization_form.html:37
#: templates/ishtar/organization_person_form.html:32
#: templates/ishtar/person_form.html:43
@@ -2832,13 +2850,17 @@ msgstr ""
msgid "Data"
msgstr ""
+#: templates/ishtar/blocks/sheet_json.html:9
+msgid "No data"
+msgstr ""
+
#: templates/ishtar/blocks/window_image_detail.html:64
msgid "Licenses"
msgstr ""
#: templates/ishtar/blocks/window_image_detail.html:111
#: templates/ishtar/import_delete.html:20 templatetags/window_field.py:17
-#: views_item.py:486 wizards.py:393
+#: views_item.py:548 wizards.py:405
msgid "Yes"
msgstr ""
@@ -2851,6 +2873,11 @@ msgstr ""
msgid "Web"
msgstr ""
+#: templates/ishtar/blocks/window_image_detail.html:193
+#: templates/ishtar/blocks/window_tables/documents.html:10
+msgid "Related to"
+msgstr ""
+
#: templates/ishtar/blocks/window_nav.html:17
msgid ""
"Are you sure to restore to this version? All changes made since this version "
@@ -2870,26 +2897,22 @@ msgstr ""
msgid "Item pined in your shortcut menu."
msgstr ""
-#: templates/ishtar/blocks/window_nav.html:43
+#: templates/ishtar/blocks/window_nav.html:45
msgid "Actions"
msgstr ""
-#: templates/ishtar/blocks/window_nav.html:61
+#: templates/ishtar/blocks/window_nav.html:73
msgid "Export as OpenOffice.org file"
msgstr ""
-#: templates/ishtar/blocks/window_nav.html:64
+#: templates/ishtar/blocks/window_nav.html:77
msgid "Export as PDF file"
msgstr ""
-#: templates/ishtar/blocks/window_nav.html:72
+#: templates/ishtar/blocks/window_nav.html:92
msgid "Relation between items are not historized."
msgstr ""
-#: templates/ishtar/blocks/window_tables/documents.html:10
-msgid "Related to"
-msgstr ""
-
#: templates/ishtar/blocks/window_tables/documents.html:11
#: templates/ishtar/blocks/window_tables/documents.html:19
msgid "Link"
@@ -2976,12 +2999,12 @@ msgstr ""
msgid "User type"
msgstr ""
-#: templates/ishtar/form.html:20 templates/ishtar/forms/document.html:24
+#: templates/ishtar/form.html:23 templates/ishtar/forms/document.html:24
#: templates/ishtar/wizard/default_wizard.html:43
msgid "Search and select an item in the table"
msgstr ""
-#: templates/ishtar/form.html:26 templates/ishtar/forms/document.html:30
+#: templates/ishtar/form.html:29 templates/ishtar/forms/document.html:30
#: templates/ishtar/forms/search_query.html:77 templates/ishtar/formset.html:8
#: templates/ishtar/formset_import_match.html:51
#: templates/ishtar/import_list.html:30 templates/ishtar/merge.html:30
@@ -2994,12 +3017,12 @@ msgstr ""
msgid "Are you sure you want to delete: "
msgstr ""
-#: templates/ishtar/forms/qa_base.html:25
+#: templates/ishtar/forms/qa_base.html:24
#: templates/ishtar/forms/qa_form.html:12
msgid "Modified items"
msgstr ""
-#: templates/ishtar/forms/qa_base.html:62
+#: templates/ishtar/forms/qa_base.html:61
#: templates/ishtar/import_step_by_step.html:126
#: templates/ishtar/import_step_by_step.html:305
#: templates/ishtar/organization_form.html:40
@@ -3081,7 +3104,7 @@ msgstr ""
msgid "Go"
msgstr ""
-#: templates/ishtar/import_step_by_step.html:63 views.py:1081
+#: templates/ishtar/import_step_by_step.html:63 views.py:1104
msgid "Import step by step"
msgstr ""
@@ -3342,12 +3365,12 @@ msgstr ""
msgid "Responsible for planning service of archaeological files"
msgstr ""
-#: templates/ishtar/wizard/confirm_wizard.html:12
+#: templates/ishtar/wizard/confirm_wizard.html:14
#: templates/ishtar/wizard/wizard_done_summary.html:6
msgid "You have entered the following informations:"
msgstr ""
-#: templates/ishtar/wizard/confirm_wizard.html:50
+#: templates/ishtar/wizard/confirm_wizard.html:56
msgid "Would you like to save them?"
msgstr ""
@@ -3646,15 +3669,15 @@ msgstr ""
msgid "Bookmarks"
msgstr ""
-#: templatetags/window_field.py:22 wizards.py:395
+#: templatetags/window_field.py:22 wizards.py:407
msgid "No"
msgstr ""
-#: templatetags/window_tables.py:88 widgets.py:1065
+#: templatetags/window_tables.py:88 widgets.py:1102
msgid "No results"
msgstr ""
-#: templatetags/window_tables.py:89 widgets.py:1066
+#: templatetags/window_tables.py:89 widgets.py:1103
msgid "Loading..."
msgstr ""
@@ -3662,15 +3685,15 @@ msgstr ""
msgid "You don't have sufficient permissions to do this action."
msgstr ""
-#: utils.py:338
+#: utils.py:344
msgid " (...)"
msgstr ""
-#: utils.py:418
+#: utils.py:424
msgid "Information"
msgstr ""
-#: utils.py:419
+#: utils.py:425
msgid "Load another random image?"
msgstr ""
@@ -3734,116 +3757,125 @@ msgstr ""
msgid "Treatment"
msgstr ""
-#: views.py:724 views_item.py:103
+#: views.py:747 views_item.py:117
msgid "Operation not permitted."
msgstr ""
-#: views.py:741 views.py:799
+#: views.py:764 views.py:822
msgid "Archaeological files"
msgstr ""
-#: views.py:746 views.py:810
+#: views.py:769 views.py:833
msgid "Finds"
msgstr ""
-#: views.py:748 views.py:815
+#: views.py:771 views.py:838
msgid "Treatment requests"
msgstr ""
-#: views.py:749 views.py:821
+#: views.py:772 views.py:844
msgid "Treatments"
msgstr ""
-#: views.py:1423
+#: views.py:1446
msgid "Col. "
msgstr ""
-#: views.py:1429 views.py:1441
+#: views.py:1452 views.py:1464
msgid "* empty *"
msgstr ""
-#: views.py:1482
+#: views.py:1505
msgid "Link unmatched items"
msgstr ""
-#: views.py:1503
+#: views.py:1526
msgid "Delete import"
msgstr ""
-#: views.py:1542
+#: views.py:1565
msgid "Merge persons"
msgstr ""
-#: views.py:1566
+#: views.py:1589
msgid "Select the main person"
msgstr ""
-#: views.py:1575
+#: views.py:1598
msgid "Merge organization"
msgstr ""
-#: views.py:1585
+#: views.py:1608
msgid "Select the main organization"
msgstr ""
-#: views.py:1625 views.py:1641
+#: views.py:1648 views.py:1664
msgid "Corporation manager"
msgstr ""
-#: views.py:1662
+#: views.py:1685
msgid "Document: search"
msgstr ""
-#: views.py:1677
+#: views.py:1700
msgid "Document creation"
msgstr ""
-#: views.py:1710
+#: views.py:1733
msgid "Document modification"
msgstr ""
-#: views.py:1740
+#: views.py:1763
msgid "Document deletion"
msgstr ""
-#: views.py:1823
+#: views.py:1872
msgid "Delete bookmark"
msgstr ""
-#: views.py:1846
+#: views.py:1895
msgid "Bookmark - Delete"
msgstr ""
-#: views_item.py:105
+#: views_item.py:119
#, python-format
msgid "New %s"
msgstr ""
+#: views_item.py:570
+msgctxt "key for text search"
+msgid "today"
+msgstr ""
+
#: widgets.py:174
msgid "The character \" is not accepted."
msgstr ""
-#: widgets.py:517
+#: widgets.py:555
msgid "{} is not a valid key for {}"
msgstr ""
-#: widgets.py:618 widgets.py:752 widgets.py:867
+#: widgets.py:656 widgets.py:790 widgets.py:905
msgid "Search..."
msgstr ""
-#: widgets.py:687
+#: widgets.py:725
msgid "Previous value:"
msgstr ""
-#: widgets.py:1067
+#: widgets.py:1104
msgid "Remove"
msgstr ""
-#: wizards.py:431
+#: wizards.py:171
+msgid "Permission error: you cannot do this action."
+msgstr ""
+
+#: wizards.py:443
msgid "Deleted"
msgstr ""
-#: wizards.py:1757
+#: wizards.py:1769
#, python-format
msgid "[%(app_name)s] Account creation/modification"
msgstr ""
diff --git a/ishtar_common/management/commands/ishtar_import.py b/ishtar_common/management/commands/ishtar_import.py
index aba1e45d5..3b04528f0 100644
--- a/ishtar_common/management/commands/ishtar_import.py
+++ b/ishtar_common/management/commands/ishtar_import.py
@@ -3,22 +3,41 @@
from django.core.management.base import BaseCommand, CommandError
-from ishtar_common import models
+from ishtar_common import models, models_imports
class Command(BaseCommand):
help = "./manage.py ishtar_import <command> <import_id>\n\n"\
"Launch the importation a configured import.\n"\
- "<command> must be: \"analyse\", \"import\" or \"archive\"."
+ "<command> must be: \"list\", \"analyse\", \"import\" or " \
+ "\"archive\"."
+
+ def add_arguments(self, parser):
+ parser.add_argument('command', choices=["list", "analyse", "import",
+ "archive"])
+ parser.add_argument('import_id', nargs='?', default=None)
def handle(self, *args, **options):
- if not args or len(args) < 2:
- raise CommandError("<command> and <import_id> are mandatory")
- command = args[0]
- if args[0] not in ["analyse", "import", "archive"]:
- raise CommandError(
- "<command> must be: \"analyse\", \"import\" or \"archive\"."
- )
+ command = options['command']
+ import_id = options['import_id']
+ if command != "list" and not import_id:
+ raise CommandError("With {} <import_id> is mandatory".format(
+ command))
+ if command == 'list':
+ state = dict(models_imports.IMPORT_STATE)
+ self.stdout.write("*" * 80 + "\n")
+ self.stdout.write(
+ "| pk | type | state "
+ "| name\n")
+ self.stdout.write("*" * 80 + "\n")
+ for imp in models.Import.objects.exclude(state="AC").all():
+ self.stdout.write(u"|{: ^6}| {: ^32} | {: ^12} | {}\n".format(
+ imp.pk, unicode(imp.importer_type)[:32],
+ state[imp.state][:12],
+ imp.name[:128]))
+ self.stdout.write("*" * 80 + "\n")
+ self.stdout.flush()
+ return
try:
imp = models.Import.objects.get(pk=args[1])
except (ValueError, models.Import.DoesNotExist):
diff --git a/ishtar_common/management/commands/reassociate_similar_images.py b/ishtar_common/management/commands/reassociate_similar_images.py
index f6d432327..a0483ed3a 100644
--- a/ishtar_common/management/commands/reassociate_similar_images.py
+++ b/ishtar_common/management/commands/reassociate_similar_images.py
@@ -169,7 +169,7 @@ class Command(BaseCommand):
for m2m in m2ms:
for m2 in getattr(item, m2m).all():
- if m2 not in getattr(ref_item, m2m):
+ if m2 not in getattr(ref_item, m2m).all():
getattr(ref_item, m2m).add(m2)
for rel_attr in Document.RELATED_MODELS:
diff --git a/ishtar_common/management/commands/regenerate_search_vector_cached_label.py b/ishtar_common/management/commands/regenerate_search_vector_cached_label.py
index 59e37d75b..404811acf 100644
--- a/ishtar_common/management/commands/regenerate_search_vector_cached_label.py
+++ b/ishtar_common/management/commands/regenerate_search_vector_cached_label.py
@@ -24,16 +24,32 @@ from django.core.management.base import BaseCommand
from django.apps import apps
+APPS = ['ishtar_common', 'archaeological_operations',
+ 'archaeological_context_records', 'archaeological_finds',
+ 'archaeological_warehouse']
+
+
class Command(BaseCommand):
args = ''
help = 'Regenerate cached labels and search vectors'
+ def add_arguments(self, parser):
+ parser.add_argument('app_name', nargs='?', default=None,
+ choices=APPS)
+ parser.add_argument('model_name', nargs='?', default=None)
+
def handle(self, *args, **options):
- for app in ['ishtar_common', 'archaeological_operations',
- 'archaeological_context_records',
- 'archaeological_finds', 'archaeological_warehouse']:
+ limit = options['app_name']
+ model_name = options['model_name']
+ if model_name:
+ model_name = model_name.lower()
+ for app in APPS:
+ if limit and app != limit:
+ continue
print(u"* app: {}".format(app))
for model in apps.get_app_config(app).get_models():
+ if model_name and model.__name__.lower() != model_name:
+ continue
if model.__name__.startswith('Historical'):
continue
if not bool(
diff --git a/ishtar_common/migrations/0076_migrate_treatmentfile_permissions.py b/ishtar_common/migrations/0076_migrate_treatmentfile_permissions.py
new file mode 100644
index 000000000..4edef4a44
--- /dev/null
+++ b/ishtar_common/migrations/0076_migrate_treatmentfile_permissions.py
@@ -0,0 +1,33 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-11-22 22:17
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+def migrate_perm(apps, schema_editor):
+ Permission = apps.get_model('auth', 'Permission')
+ Group = apps.get_model('auth', 'Group')
+ for perm in Permission.objects.filter(
+ codename__icontains='filetreatment').exclude(
+ codename__icontains='source').all():
+ new_codename = perm.codename.replace('filetreatment', 'treatmentfile')
+ q = Permission.objects.filter(
+ codename=new_codename).exclude(pk=perm.pk)
+ if q.count():
+ for gp in Group.objects.filter(permissions=q.all()[0]):
+ gp.permissions.add(perm)
+ q.all()[0].delete()
+ perm.codename = new_codename
+ perm.save()
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0075_auto_20181108_1908'),
+ ]
+
+ operations = [
+ migrations.RunPython(migrate_perm)
+ ]
diff --git a/ishtar_common/migrations/0077_auto_20181129_1755.py b/ishtar_common/migrations/0077_auto_20181129_1755.py
new file mode 100644
index 000000000..bd9003946
--- /dev/null
+++ b/ishtar_common/migrations/0077_auto_20181129_1755.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-11-29 17:55
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0076_migrate_treatmentfile_permissions'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='importertype',
+ name='is_template',
+ field=models.BooleanField(default=False, verbose_name='Can be exported'),
+ ),
+ ]
diff --git a/ishtar_common/migrations/0078_auto_20181203_1442.py b/ishtar_common/migrations/0078_auto_20181203_1442.py
new file mode 100644
index 000000000..282356a55
--- /dev/null
+++ b/ishtar_common/migrations/0078_auto_20181203_1442.py
@@ -0,0 +1,1832 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-12-03 14:42
+from __future__ import unicode_literals
+
+from django.conf import settings
+import django.contrib.gis.db.models.fields
+import django.contrib.postgres.search
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import re
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0077_auto_20181129_1755'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='administrationscript',
+ options={'ordering': ['name'], 'verbose_name': "Script d'administration", 'verbose_name_plural': "Scripts d'administration"},
+ ),
+ migrations.AlterModelOptions(
+ name='administrationtask',
+ options={'ordering': ['script'], 'verbose_name': "T\xe2che d'administration", 'verbose_name_plural': "T\xe2ches d'administration"},
+ ),
+ migrations.AlterModelOptions(
+ name='area',
+ options={'ordering': ('label',), 'verbose_name': 'Zone', 'verbose_name_plural': 'Zones'},
+ ),
+ migrations.AlterModelOptions(
+ name='author',
+ options={'ordering': ('author_type__order', 'person__name'), 'permissions': (('view_author', 'Can view all Authors'), ('view_own_author', 'Can view own Author'), ('add_own_author', 'Can add own Author'), ('change_own_author', 'Can change own Author'), ('delete_own_author', 'Can delete own Author')), 'verbose_name': 'Auteur', 'verbose_name_plural': 'Auteurs'},
+ ),
+ migrations.AlterModelOptions(
+ name='authortype',
+ options={'ordering': ['order', 'label'], 'verbose_name': "Type d'auteur", 'verbose_name_plural': "Types d'auteur"},
+ ),
+ migrations.AlterModelOptions(
+ name='customform',
+ options={'ordering': ['name', 'form'], 'verbose_name': 'Formulaire personnalis\xe9', 'verbose_name_plural': 'Formulaires personnalis\xe9s'},
+ ),
+ migrations.AlterModelOptions(
+ name='customformjsonfield',
+ options={'verbose_name': 'Formulaire personnalis\xe9 - Champ de donn\xe9e Json', 'verbose_name_plural': 'Formulaire personnalis\xe9 - Champs de donn\xe9e Json'},
+ ),
+ migrations.AlterModelOptions(
+ name='department',
+ options={'ordering': ['number'], 'verbose_name': 'D\xe9partement', 'verbose_name_plural': 'D\xe9partements'},
+ ),
+ migrations.AlterModelOptions(
+ name='documenttemplate',
+ options={'ordering': ['associated_object_name', 'name'], 'verbose_name': 'Patron de document', 'verbose_name_plural': 'Patrons de document'},
+ ),
+ migrations.AlterModelOptions(
+ name='excludedfield',
+ options={'verbose_name': 'Champ exclus', 'verbose_name_plural': 'Champs exclus'},
+ ),
+ migrations.AlterModelOptions(
+ name='format',
+ options={'ordering': ['label'], 'verbose_name': 'Type de format', 'verbose_name_plural': 'Types de format'},
+ ),
+ migrations.AlterModelOptions(
+ name='formatertype',
+ options={'ordering': ('formater_type', 'options'), 'verbose_name': 'Importeur - Type de mise en forme', 'verbose_name_plural': 'Importeur - Types de mise en forme'},
+ ),
+ migrations.AlterModelOptions(
+ name='globalvar',
+ options={'ordering': ['slug'], 'verbose_name': 'Variable globale', 'verbose_name_plural': 'Variables globales'},
+ ),
+ migrations.AlterModelOptions(
+ name='historicalorganization',
+ options={'get_latest_by': 'history_date', 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical Organisation'},
+ ),
+ migrations.AlterModelOptions(
+ name='historicalperson',
+ options={'get_latest_by': 'history_date', 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical Personne'},
+ ),
+ migrations.AlterModelOptions(
+ name='importercolumn',
+ options={'ordering': ('importer_type', 'col_number'), 'verbose_name': 'Importeur - Colonne', 'verbose_name_plural': 'Importeur - Colonnes'},
+ ),
+ migrations.AlterModelOptions(
+ name='importerdefault',
+ options={'verbose_name': 'Importeur - Par d\xe9faut', 'verbose_name_plural': 'Importeur - Par d\xe9faut'},
+ ),
+ migrations.AlterModelOptions(
+ name='importerdefaultvalues',
+ options={'verbose_name': 'Importeur - Valeur par d\xe9faut', 'verbose_name_plural': 'Importeur - Valeurs par d\xe9faut'},
+ ),
+ migrations.AlterModelOptions(
+ name='importerduplicatefield',
+ options={'ordering': ('column', 'field_name'), 'verbose_name': 'Importeur - Champ dupliqu\xe9', 'verbose_name_plural': 'Importeur - Champs dupliqu\xe9s'},
+ ),
+ migrations.AlterModelOptions(
+ name='importermodel',
+ options={'ordering': ('name',), 'verbose_name': 'Importeur - Mod\xe8le', 'verbose_name_plural': 'Importeur - Mod\xe8les'},
+ ),
+ migrations.AlterModelOptions(
+ name='importertype',
+ options={'ordering': ('name',), 'verbose_name': 'Importeur - Type', 'verbose_name_plural': 'Importeur - Types'},
+ ),
+ migrations.AlterModelOptions(
+ name='importtarget',
+ options={'verbose_name': 'Importeur - Cible', 'verbose_name_plural': 'Importeur - Cibles'},
+ ),
+ migrations.AlterModelOptions(
+ name='ishtarsiteprofile',
+ options={'ordering': ['label'], 'verbose_name': "Profil d'instance Ishtar", 'verbose_name_plural': "Profils d'instance Ishtar"},
+ ),
+ migrations.AlterModelOptions(
+ name='ishtaruser',
+ options={'verbose_name': "Utilisateur d'Ishtar", 'verbose_name_plural': "Utilisateurs d'Ishtar"},
+ ),
+ migrations.AlterModelOptions(
+ name='jsondatafield',
+ options={'ordering': ['order', 'name'], 'verbose_name': 'Donn\xe9e JSON - Champ', 'verbose_name_plural': 'Donn\xe9e JSON - Champs'},
+ ),
+ migrations.AlterModelOptions(
+ name='jsondatasection',
+ options={'ordering': ['order', 'name'], 'verbose_name': 'Donn\xe9es JSON - Menu', 'verbose_name_plural': 'Donn\xe9es JSON - Menus'},
+ ),
+ migrations.AlterModelOptions(
+ name='licensetype',
+ options={'ordering': ('label',), 'verbose_name': 'Type de licence', 'verbose_name_plural': 'Types de licence'},
+ ),
+ migrations.AlterModelOptions(
+ name='operationtype',
+ options={'ordering': ['judiciary', '-preventive', 'order', 'label'], 'verbose_name': "Type d'op\xe9ration", 'verbose_name_plural': "Types d'op\xe9ration"},
+ ),
+ migrations.AlterModelOptions(
+ name='organization',
+ options={'permissions': (('view_organization', 'Can view all Organizations'), ('view_own_organization', 'Can view own Organization'), ('add_own_organization', 'Can add own Organization'), ('change_own_organization', 'Can change own Organization'), ('delete_own_organization', 'Can delete own Organization')), 'verbose_name': 'Organisation', 'verbose_name_plural': 'Organisations'},
+ ),
+ migrations.AlterModelOptions(
+ name='organizationtype',
+ options={'ordering': ('label',), 'verbose_name': "Type d'organisation", 'verbose_name_plural': "Types d'organisation"},
+ ),
+ migrations.AlterModelOptions(
+ name='person',
+ options={'permissions': (('view_person', 'Can view all Persons'), ('view_own_person', 'Can view own Person'), ('add_own_person', 'Can add own Person'), ('change_own_person', 'Can change own Person'), ('delete_own_person', 'Can delete own Person')), 'verbose_name': 'Personne', 'verbose_name_plural': 'Personnes'},
+ ),
+ migrations.AlterModelOptions(
+ name='persontype',
+ options={'ordering': ('label',), 'verbose_name': 'Type de personne', 'verbose_name_plural': 'Types de personne'},
+ ),
+ migrations.AlterModelOptions(
+ name='profiletype',
+ options={'ordering': ('label',), 'verbose_name': 'Type de profil', 'verbose_name_plural': 'Types de profil'},
+ ),
+ migrations.AlterModelOptions(
+ name='regexp',
+ options={'verbose_name': 'Importeur - Expression r\xe9guli\xe8re', 'verbose_name_plural': 'Importeur - Expressions r\xe9guli\xe8res'},
+ ),
+ migrations.AlterModelOptions(
+ name='searchquery',
+ options={'ordering': ['label'], 'verbose_name': 'Requ\xeate de recherche', 'verbose_name_plural': 'Requ\xeates de recherche'},
+ ),
+ migrations.AlterModelOptions(
+ name='sourcetype',
+ options={'ordering': ['label'], 'verbose_name': 'Type de document', 'verbose_name_plural': 'Types de document'},
+ ),
+ migrations.AlterModelOptions(
+ name='spatialreferencesystem',
+ options={'ordering': ('label',), 'verbose_name': 'Syst\xe8me de r\xe9f\xe9rence spatiale', 'verbose_name_plural': 'Syst\xe8mes de r\xe9f\xe9rence spatiale'},
+ ),
+ migrations.AlterModelOptions(
+ name='state',
+ options={'ordering': ['number'], 'verbose_name': '\xc9tat'},
+ ),
+ migrations.AlterModelOptions(
+ name='supporttype',
+ options={'verbose_name': 'Type de support', 'verbose_name_plural': 'Types de support'},
+ ),
+ migrations.AlterModelOptions(
+ name='targetkey',
+ options={'ordering': ('target', 'key'), 'verbose_name': 'Importeur - Cl\xe9 de rapprochement', 'verbose_name_plural': 'Importeur - Cl\xe9s de rapprochement'},
+ ),
+ migrations.AlterModelOptions(
+ name='targetkeygroup',
+ options={'verbose_name': 'Importeur - Groupe de cl\xe9 de rapprochement', 'verbose_name_plural': 'Importeur - Groupes de cl\xe9 de rapprochement'},
+ ),
+ migrations.AlterModelOptions(
+ name='titletype',
+ options={'ordering': ('label',), 'verbose_name': 'Type de titre', 'verbose_name_plural': 'Types de titre'},
+ ),
+ migrations.AlterModelOptions(
+ name='town',
+ options={'ordering': ['numero_insee'], 'verbose_name': 'Commune', 'verbose_name_plural': 'Communes'},
+ ),
+ migrations.AlterModelOptions(
+ name='userprofile',
+ options={'verbose_name': "Profil d'utilisateur", 'verbose_name_plural': "Profils d'utilisateurs"},
+ ),
+ migrations.AlterField(
+ model_name='administrationscript',
+ name='name',
+ field=models.TextField(blank=True, null=True, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='administrationscript',
+ name='path',
+ field=models.CharField(max_length=30, verbose_name='Nom de fichier'),
+ ),
+ migrations.AlterField(
+ model_name='administrationtask',
+ name='result',
+ field=models.TextField(blank=True, null=True, verbose_name='R\xe9sultat'),
+ ),
+ migrations.AlterField(
+ model_name='administrationtask',
+ name='state',
+ field=models.CharField(choices=[(b'S', 'Planifi\xe9'), (b'P', 'En cours'), (b'FE', 'Termin\xe9 avec des erreurs'), (b'F', 'Termin\xe9')], default=b'S', max_length=2, verbose_name='\xc9tat'),
+ ),
+ migrations.AlterField(
+ model_name='area',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='area',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='area',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='area',
+ name='parent',
+ field=models.ForeignKey(blank=True, help_text='Seulement quatre niveaux de parents sont g\xe9r\xe9s.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='ishtar_common.Area', verbose_name='Parent'),
+ ),
+ migrations.AlterField(
+ model_name='area',
+ name='reference',
+ field=models.CharField(blank=True, max_length=200, null=True, verbose_name='R\xe9f\xe9rence'),
+ ),
+ migrations.AlterField(
+ model_name='area',
+ name='towns',
+ field=models.ManyToManyField(blank=True, related_name='areas', to='ishtar_common.Town', verbose_name='Communes'),
+ ),
+ migrations.AlterField(
+ model_name='area',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='author',
+ name='author_type',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.AuthorType', verbose_name="Type d'auteur"),
+ ),
+ migrations.AlterField(
+ model_name='author',
+ name='cached_label',
+ field=models.TextField(blank=True, db_index=True, null=True, verbose_name='Nom en cache'),
+ ),
+ migrations.AlterField(
+ model_name='author',
+ name='person',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='author', to='ishtar_common.Person', verbose_name='Personne'),
+ ),
+ migrations.AlterField(
+ model_name='author',
+ name='search_vector',
+ field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'),
+ ),
+ migrations.AlterField(
+ model_name='authortype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='authortype',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='authortype',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='authortype',
+ name='order',
+ field=models.IntegerField(default=1, verbose_name='Ordre'),
+ ),
+ migrations.AlterField(
+ model_name='authortype',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='customform',
+ name='apply_to_all',
+ field=models.BooleanField(default=False, help_text="Activer ce formulaire pour tous les utilisateurs. Si mis \xe0 Vrai, s\xe9lectionner des utilisateurs ou des types d'utilisateurs est inutile.", verbose_name="S'applique \xe0 tous"),
+ ),
+ migrations.AlterField(
+ model_name='customform',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='customform',
+ name='enabled',
+ field=models.BooleanField(default=True, help_text='D\xe9sactiver avec pr\xe9caution : d\xe9sactiver un formulaire avec des champs obligatoires peut entra\xeener des erreurs dans la base de donn\xe9es.', verbose_name='Activer ce formulaire'),
+ ),
+ migrations.AlterField(
+ model_name='customform',
+ name='form',
+ field=models.CharField(max_length=250, verbose_name='Formulaire'),
+ ),
+ migrations.AlterField(
+ model_name='customform',
+ name='name',
+ field=models.CharField(max_length=250, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='customformjsonfield',
+ name='help_text',
+ field=models.TextField(blank=True, null=True, verbose_name='Aide'),
+ ),
+ migrations.AlterField(
+ model_name='customformjsonfield',
+ name='label',
+ field=models.CharField(blank=True, default=b'', max_length=200, verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='customformjsonfield',
+ name='order',
+ field=models.IntegerField(default=1, verbose_name='Ordre'),
+ ),
+ migrations.AlterField(
+ model_name='department',
+ name='label',
+ field=models.CharField(max_length=30, verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='department',
+ name='number',
+ field=models.CharField(max_length=3, unique=True, verbose_name='Nombre'),
+ ),
+ migrations.AlterField(
+ model_name='department',
+ name='state',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.State', verbose_name='\xc9tat'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='additional_information',
+ field=models.TextField(blank=True, null=True, verbose_name='Information suppl\xe9mentaire'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='associated_links',
+ field=models.TextField(blank=True, null=True, verbose_name='Liens symboliques'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='associated_url',
+ field=models.URLField(blank=True, max_length=1000, null=True, verbose_name='Ressource num\xe9rique (adresse web)'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='authors',
+ field=models.ManyToManyField(related_name='documents', to='ishtar_common.Author', verbose_name='Auteurs'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='authors_raw',
+ field=models.CharField(blank=True, max_length=250, null=True, verbose_name='Auteurs (brut)'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='cache_related_label',
+ field=models.TextField(blank=True, db_index=True, help_text='Valeur en cache - ne pas \xe9diter', null=True, verbose_name='Li\xe9'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='creation_date',
+ field=models.DateField(blank=True, null=True, verbose_name='Date de cr\xe9ation'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='duplicate',
+ field=models.NullBooleanField(verbose_name='Existe en doublon'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='external_id',
+ field=models.TextField(blank=True, null=True, verbose_name='Identifiant'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='internal_reference',
+ field=models.TextField(blank=True, null=True, verbose_name='R\xe9f. interne'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='item_number',
+ field=models.IntegerField(default=1, verbose_name="Nombre d'\xe9l\xe9ments"),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='licenses',
+ field=models.ManyToManyField(blank=True, to='ishtar_common.LicenseType', verbose_name='Licence'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='receipt_date',
+ field=models.DateField(blank=True, null=True, verbose_name='Date de r\xe9ception'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='receipt_date_in_documentation',
+ field=models.DateField(blank=True, null=True, verbose_name='Date de r\xe9ception en documentation'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='reference',
+ field=models.TextField(blank=True, null=True, verbose_name='R\xe9f.'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='scale',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='\xc9chelle'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='search_vector',
+ field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='title',
+ field=models.TextField(blank=True, default=b'', verbose_name='Titre'),
+ ),
+ migrations.AlterField(
+ model_name='documenttemplate',
+ name='associated_object_name',
+ field=models.CharField(choices=[(b'archaeological_operations.models.AdministrativeAct', 'Acte administratif')], max_length=100, verbose_name='Objet associ\xe9'),
+ ),
+ migrations.AlterField(
+ model_name='documenttemplate',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='documenttemplate',
+ name='name',
+ field=models.CharField(max_length=100, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='documenttemplate',
+ name='slug',
+ field=models.SlugField(blank=True, max_length=100, null=True, unique=True, verbose_name='Identifiant texte'),
+ ),
+ migrations.AlterField(
+ model_name='documenttemplate',
+ name='template',
+ field=models.FileField(upload_to=b'templates/%Y/', verbose_name='Patron'),
+ ),
+ migrations.AlterField(
+ model_name='excludedfield',
+ name='field',
+ field=models.CharField(max_length=250, verbose_name='Champ'),
+ ),
+ migrations.AlterField(
+ model_name='format',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='format',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='format',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='format',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='formatertype',
+ name='formater_type',
+ field=models.CharField(choices=[(b'IntegerFormater', 'Entier'), (b'FloatFormater', 'Nombre \xe0 virgule'), (b'UnicodeFormater', 'Cha\xeene de caract\xe8res'), (b'DateFormater', 'Date'), (b'TypeFormater', 'Type'), (b'YearFormater', 'Ann\xe9e'), (b'InseeFormater', 'Code INSEE'), (b'StrToBoolean', 'Cha\xeene de caract\xe8res vers bool\xe9en'), (b'FileFormater', 'Fichier'), (b'UnknowType', 'Type inconnu')], max_length=20, verbose_name='Formater type'),
+ ),
+ migrations.AlterField(
+ model_name='formatertype',
+ name='many_split',
+ field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Caract\xe8re(s) de s\xe9paration'),
+ ),
+ migrations.AlterField(
+ model_name='globalvar',
+ name='description',
+ field=models.TextField(blank=True, null=True, verbose_name='Description de la variable'),
+ ),
+ migrations.AlterField(
+ model_name='globalvar',
+ name='slug',
+ field=models.SlugField(unique=True, verbose_name='Nom de la variable'),
+ ),
+ migrations.AlterField(
+ model_name='globalvar',
+ name='value',
+ field=models.TextField(blank=True, null=True, verbose_name='Valeur'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='address',
+ field=models.TextField(blank=True, null=True, verbose_name='Adresse'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='address_complement',
+ field=models.TextField(blank=True, null=True, verbose_name="Compl\xe9ment d'adresse"),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='alt_address',
+ field=models.TextField(blank=True, null=True, verbose_name='Autre adresse : adresse'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='alt_address_complement',
+ field=models.TextField(blank=True, null=True, verbose_name="Autre adresse : compl\xe9ment d'adresse"),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='alt_address_is_prefered',
+ field=models.BooleanField(default=False, verbose_name="L'adresse alternative est pr\xe9f\xe9r\xe9e"),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='alt_country',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Autre adresse : pays'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='alt_postal_code',
+ field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Autre adresse : code postal'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='alt_town',
+ field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Autre adresse : ville'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='cached_label',
+ field=models.TextField(blank=True, db_index=True, null=True, verbose_name='Nom en cache'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='country',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Pays'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='email',
+ field=models.EmailField(blank=True, max_length=300, null=True, verbose_name='Courriel'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='merge_key',
+ field=models.TextField(blank=True, null=True, verbose_name='Cl\xe9 de fusion'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='mobile_phone',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone portable'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='name',
+ field=models.CharField(max_length=500, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='phone',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='phone2',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='Type de t\xe9l\xe9phone 2'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='phone3',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='phone_desc',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='phone_desc2',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 2'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='phone_desc3',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='postal_code',
+ field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Code postal'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='raw_phone',
+ field=models.TextField(blank=True, null=True, verbose_name='T\xe9l\xe9phone brut'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='search_vector',
+ field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='town',
+ field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Commune'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='address',
+ field=models.TextField(blank=True, null=True, verbose_name='Adresse'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='address_complement',
+ field=models.TextField(blank=True, null=True, verbose_name="Compl\xe9ment d'adresse"),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='alt_address',
+ field=models.TextField(blank=True, null=True, verbose_name='Autre adresse : adresse'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='alt_address_complement',
+ field=models.TextField(blank=True, null=True, verbose_name="Autre adresse : compl\xe9ment d'adresse"),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='alt_address_is_prefered',
+ field=models.BooleanField(default=False, verbose_name="L'adresse alternative est pr\xe9f\xe9r\xe9e"),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='alt_country',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Autre adresse : pays'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='alt_postal_code',
+ field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Autre adresse : code postal'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='alt_town',
+ field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Autre adresse : ville'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='cached_label',
+ field=models.TextField(blank=True, db_index=True, null=True, verbose_name='Nom en cache'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='contact_type',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de contact'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='country',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Pays'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='email',
+ field=models.EmailField(blank=True, max_length=300, null=True, verbose_name='Courriel'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='merge_key',
+ field=models.TextField(blank=True, null=True, verbose_name='Cl\xe9 de fusion'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='mobile_phone',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone portable'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='name',
+ field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='old_title',
+ field=models.CharField(blank=True, choices=[(b'Mr', 'M.'), (b'Ms', 'Mlle'), (b'Mr and Miss', 'M. et Mme'), (b'Md', 'Mme'), (b'Dr', 'Dr.')], max_length=100, null=True, verbose_name='Titre'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='phone',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='phone2',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='Type de t\xe9l\xe9phone 2'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='phone3',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='phone_desc',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='phone_desc2',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 2'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='phone_desc3',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='postal_code',
+ field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Code postal'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='raw_name',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Nom brut'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='raw_phone',
+ field=models.TextField(blank=True, null=True, verbose_name='T\xe9l\xe9phone brut'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='salutation',
+ field=models.CharField(blank=True, max_length=200, null=True, verbose_name="Formule d'appel"),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='search_vector',
+ field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='surname',
+ field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Pr\xe9nom'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='town',
+ field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Commune'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='associated_group',
+ field=models.ForeignKey(blank=True, help_text='Si un groupe est s\xe9lectionn\xe9, les cl\xe9s de rapprochement enregistr\xe9es dans ce groupe sont utilis\xe9es.', null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.TargetKeyGroup'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='changed_checked',
+ field=models.BooleanField(default=False, verbose_name='Les changements ont \xe9t\xe9 v\xe9rifi\xe9s'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='changed_line_numbers',
+ field=models.TextField(blank=True, null=True, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:\\,\\d+)*\\Z'), code='invalid', message='Saisissez uniquement des chiffres s\xe9par\xe9s par des virgules.')], verbose_name='Num\xe9ro des lignes modifi\xe9es'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='conservative_import',
+ field=models.BooleanField(default=False, help_text='Si coch\xe9, ne surchargera pas les valeurs existantes.', verbose_name='Import conservateur'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='creation_date',
+ field=models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date de cr\xe9ation'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='current_line',
+ field=models.IntegerField(blank=True, null=True, verbose_name='Ligne actuelle'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='encoding',
+ field=models.CharField(choices=[(b'windows-1252', b'windows-1252'), (b'ISO-8859-15', b'ISO-8859-15'), (b'utf-8', b'utf-8')], default='utf-8', max_length=15, verbose_name='Codage'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='end_date',
+ field=models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date de fin'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='error_file',
+ field=models.FileField(blank=True, max_length=255, null=True, upload_to=b'upload/imports/%Y/%m/', verbose_name='Fichier erreur'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='imported_file',
+ field=models.FileField(max_length=220, upload_to=b'upload/imports/%Y/%m/', verbose_name='Fichier import\xe9'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='imported_images',
+ field=models.FileField(blank=True, max_length=220, null=True, upload_to=b'upload/imports/%Y/%m/', verbose_name='Images associ\xe9es (fichier zip)'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='imported_line_numbers',
+ field=models.TextField(blank=True, null=True, validators=[django.core.validators.RegexValidator(re.compile('^\\d+(?:\\,\\d+)*\\Z'), code='invalid', message='Saisissez uniquement des chiffres s\xe9par\xe9s par des virgules.')], verbose_name='Num\xe9ros des lignes import\xe9es'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='match_file',
+ field=models.FileField(blank=True, max_length=255, null=True, upload_to=b'upload/imports/%Y/%m/', verbose_name='Fichier de correspondance'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='name',
+ field=models.CharField(max_length=500, null=True, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='number_of_line',
+ field=models.IntegerField(blank=True, null=True, verbose_name='Nombre de lignes'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='result_file',
+ field=models.FileField(blank=True, max_length=255, null=True, upload_to=b'upload/imports/%Y/%m/', verbose_name='Fichier r\xe9sultant'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='seconds_remaining',
+ field=models.IntegerField(blank=True, editable=False, null=True, verbose_name='Secondes restantes'),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='skip_lines',
+ field=models.IntegerField(default=1, help_text="Nombre de ligne d'ent\xeate dans votre fichier (peut \xeatre \xe9gal \xe0 z\xe9ro)", verbose_name="Nombre de lignes d'ent\xeate"),
+ ),
+ migrations.AlterField(
+ model_name='import',
+ name='state',
+ field=models.CharField(choices=[(b'C', 'Cr\xe9\xe9'), (b'AP', 'Analyse en cours'), (b'A', 'Analys\xe9'), (b'HQ', 'V\xe9rification des modifications dans la file'), (b'IQ', "Import en file d'attente"), (b'HP', 'V\xe9rification des modifications en cours'), (b'IP', 'Import en cours'), (b'PI', 'Import\xe9 partiellement'), (b'FE', 'Termin\xe9 avec des erreurs'), (b'F', 'Termin\xe9'), (b'AC', 'Archiv\xe9')], default='C', max_length=2, verbose_name='\xc9tat'),
+ ),
+ migrations.AlterField(
+ model_name='importercolumn',
+ name='col_number',
+ field=models.IntegerField(default=1, verbose_name='Num\xe9ro de colonne'),
+ ),
+ migrations.AlterField(
+ model_name='importercolumn',
+ name='export_field_name',
+ field=models.CharField(blank=True, help_text="Remplir ce champ si le nom du champ est ambigu pour l'export, par exemple dans le cas de champs concat\xe9n\xe9s.", max_length=200, null=True, verbose_name='Nom du champ \xe0 exporter'),
+ ),
+ migrations.AlterField(
+ model_name='importercolumn',
+ name='label',
+ field=models.CharField(blank=True, max_length=200, null=True, verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='importercolumn',
+ name='required',
+ field=models.BooleanField(default=False, verbose_name='Requis'),
+ ),
+ migrations.AlterField(
+ model_name='importerduplicatefield',
+ name='concat',
+ field=models.BooleanField(default=False, verbose_name="Concat\xe9ner avec l'existant"),
+ ),
+ migrations.AlterField(
+ model_name='importerduplicatefield',
+ name='concat_str',
+ field=models.CharField(blank=True, max_length=5, null=True, verbose_name='Caract\xe8re de concat\xe9nation'),
+ ),
+ migrations.AlterField(
+ model_name='importerduplicatefield',
+ name='field_name',
+ field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Nom du champ'),
+ ),
+ migrations.AlterField(
+ model_name='importerduplicatefield',
+ name='force_new',
+ field=models.BooleanField(default=False, verbose_name='Forcer la cr\xe9ation de nouveaux \xe9l\xe9ments'),
+ ),
+ migrations.AlterField(
+ model_name='importermodel',
+ name='klass',
+ field=models.CharField(max_length=200, unique=True, verbose_name='Nom de la classe'),
+ ),
+ migrations.AlterField(
+ model_name='importermodel',
+ name='name',
+ field=models.CharField(max_length=200, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='importertype',
+ name='associated_models',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='ishtar_common.ImporterModel', verbose_name='Mod\xe8le associ\xe9'),
+ ),
+ migrations.AlterField(
+ model_name='importertype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='importertype',
+ name='created_models',
+ field=models.ManyToManyField(blank=True, help_text='Laissez vide pour aucune restriction', related_name='_importertype_created_models_+', to='ishtar_common.ImporterModel', verbose_name='Mod\xe8les qui peuvent accepter de nouveaux \xe9l\xe9ments'),
+ ),
+ migrations.AlterField(
+ model_name='importertype',
+ name='name',
+ field=models.CharField(max_length=200, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='importertype',
+ name='slug',
+ field=models.SlugField(max_length=100, unique=True, verbose_name='Identifiant texte'),
+ ),
+ migrations.AlterField(
+ model_name='importertype',
+ name='unicity_keys',
+ field=models.CharField(blank=True, max_length=500, null=True, verbose_name="Cl\xe9s d'unicit\xe9 (s\xe9parateur \xab ; \xbb)"),
+ ),
+ migrations.AlterField(
+ model_name='importertype',
+ name='users',
+ field=models.ManyToManyField(blank=True, to='ishtar_common.IshtarUser', verbose_name='Utilisateurs'),
+ ),
+ migrations.AlterField(
+ model_name='importtarget',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='importtarget',
+ name='concat',
+ field=models.BooleanField(default=False, verbose_name="Concat\xe9ner avec l'existant"),
+ ),
+ migrations.AlterField(
+ model_name='importtarget',
+ name='concat_str',
+ field=models.CharField(blank=True, max_length=5, null=True, verbose_name='Caract\xe8re de concat\xe9nation'),
+ ),
+ migrations.AlterField(
+ model_name='importtarget',
+ name='force_new',
+ field=models.BooleanField(default=False, verbose_name='Forcer la cr\xe9ation de nouveaux \xe9l\xe9ments'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='active',
+ field=models.BooleanField(default=False, verbose_name='Actuellement utilis\xe9'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='archaeological_site',
+ field=models.BooleanField(default=False, verbose_name='Module Site arch\xe9ologique'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='archaeological_site_label',
+ field=models.CharField(choices=[(b'site', 'Site'), (b'entity', 'Entit\xe9 (EA)')], default=b'site', max_length=200, verbose_name='Type de site arch\xe9ologique'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='base_find_external_id',
+ field=models.TextField(default='{context_record__external_id}-{label}', help_text="Formule pour g\xe9rer les identifiants de mobilier d'origine. \xc0 manipuler avec pr\xe9caution. Une formule incorrecte peut rendre l'application inutilisable et l'import de donn\xe9es externes peut alors \xeatre destructif.", verbose_name="Identifiant de mobilier d'origine"),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='container_external_id',
+ field=models.TextField(default='{responsible__external_id}-{index}', help_text="Formule pour g\xe9rer les identifiants de contenant. \xc0 manipuler avec pr\xe9caution. Une formule incorrecte peut rendre l'application inutilisable et l'import de donn\xe9es externes peut alors \xeatre destructif.", verbose_name='ID du contenant'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='context_record',
+ field=models.BooleanField(default=False, verbose_name="Module Unit\xe9s d'Enregistrement"),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='context_record_external_id',
+ field=models.TextField(default='{parcel__external_id}-{label}', help_text="Formule pour g\xe9rer les identifiants d'unit\xe9s d'enregistrement. \xc0 manipuler avec pr\xe9caution. Une formule incorrecte peut rendre l'application inutilisable et l'import de donn\xe9es externes peut alors \xeatre destructif.", verbose_name="Identifiant d'unit\xe9 d'enregistrement"),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='currency',
+ field=models.CharField(choices=[('\u20ac', 'Euro'), ('$', 'Dollar US')], default='\u20ac', max_length=5, verbose_name='Devise'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='experimental_feature',
+ field=models.BooleanField(default=False, verbose_name='Activer les fonctionnalit\xe9s exp\xe9rimentales'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='file_external_id',
+ field=models.TextField(default='{year}-{numeric_reference}', help_text="Formule pour g\xe9rer les identifiants de dossiers. \xc0 manipuler avec pr\xe9caution. Une formule incorrecte peut rendre l'application inutilisable et l'import de donn\xe9es externes peut alors \xeatre destructif.", verbose_name='Identifiant de fichier'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='files',
+ field=models.BooleanField(default=False, verbose_name='Module Dossiers'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='find',
+ field=models.BooleanField(default=False, help_text="N\xe9cessite le module Unit\xe9s d'Enregistrement", verbose_name='Module Mobilier'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='find_external_id',
+ field=models.TextField(default='{get_first_base_find__context_record__external_id}-{label}', help_text="Formule pour g\xe9rer les identifiants de mobilier. \xc0 manipuler avec pr\xe9caution. Une formule incorrecte peut rendre l'application inutilisable et l'import de donn\xe9es externes peut alors \xeatre destructif.", verbose_name='Identifiant de mobilier'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='find_index',
+ field=models.CharField(choices=[('O', 'Op\xe9rations'), ('CR', "Unit\xe9s d'Enregistrement")], default=b'O', help_text="Pour \xe9viter des index non pertinents, ne changer ce param\xe8tre que s'il n'y a pas encore de mobilier dans cette base de donn\xe9es", max_length=2, verbose_name='Index mobilier bas\xe9 sur'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='homepage',
+ field=models.TextField(blank=True, help_text="Page d'accueil d'Ishtar. Si elle n'est pas d\xe9finie, une page d'accueil par d\xe9faut appara\xeet. Utiliser la syntaxe Markdown. {random_image} peut \xeatre utilis\xe9 pour afficher une image au hasard.", null=True, verbose_name="Page d'accueil"),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='label',
+ field=models.TextField(verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='mapping',
+ field=models.BooleanField(default=False, verbose_name='Module cartographique'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='parcel_external_id',
+ field=models.TextField(default='{associated_file__external_id}{operation__code_patriarche}-{town__numero_insee}-{section}{parcel_number}', help_text="Formule pour g\xe9rer les identifiants de parcelles. \xc0 manipuler avec pr\xe9caution. Une formule incorrecte peut rendre l'application inutilisable et l'import de donn\xe9es externes peut alors \xeatre destructif.", verbose_name='Identifiant de parcelle'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='parcel_mandatory',
+ field=models.BooleanField(default=True, verbose_name="Parcelles cadastrales obligatoires pour les Unit\xe9s d'Enregistrement"),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='person_raw_name',
+ field=models.TextField(default='{name|upper} {surname}', help_text="Formule pour g\xe9rer le nom brut des personnes. \xc0 manipuler avec pr\xe9caution. Une formule incorrecte peut rendre l'application inutilisable et l'import de donn\xe9es externes peut alors \xeatre destructif.", verbose_name='Nom brut pour une personne'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='preservation',
+ field=models.BooleanField(default=False, verbose_name='Module de conservation'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='slug',
+ field=models.SlugField(unique=True, verbose_name='Identifiant texte'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='underwater',
+ field=models.BooleanField(default=False, verbose_name='Module sous-marin / subaquatique'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='warehouse',
+ field=models.BooleanField(default=False, help_text='N\xe9cessite le module mobilier', verbose_name='Module Lieu de conservation'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='warehouse_external_id',
+ field=models.TextField(default='{name|slug}', help_text="Formule pour g\xe9rer les identifiants de lieu de conservation. \xc0 manipuler avec pr\xe9caution. Une formule incorrecte peut rendre l'application inutilisable et l'import de donn\xe9es externes peut alors \xeatre destructif.", verbose_name='Identifiant du lieu de conservation'),
+ ),
+ migrations.AlterField(
+ model_name='ishtaruser',
+ name='advanced_shortcut_menu',
+ field=models.BooleanField(default=False, verbose_name='Menu de raccourci (avanc\xe9)'),
+ ),
+ migrations.AlterField(
+ model_name='ishtaruser',
+ name='person',
+ field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='ishtaruser', to='ishtar_common.Person', verbose_name='Personne'),
+ ),
+ migrations.AlterField(
+ model_name='ishtaruser',
+ name='search_vector',
+ field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'),
+ ),
+ migrations.AlterField(
+ model_name='itemkey',
+ name='importer',
+ field=models.ForeignKey(blank=True, help_text='Cl\xe9 sp\xe9cifique \xe0 un import', null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Import'),
+ ),
+ migrations.AlterField(
+ model_name='itemkey',
+ name='key',
+ field=models.TextField(verbose_name='Cl\xe9'),
+ ),
+ migrations.AlterField(
+ model_name='jsondatafield',
+ name='display',
+ field=models.BooleanField(default=True, verbose_name='Afficher'),
+ ),
+ migrations.AlterField(
+ model_name='jsondatafield',
+ name='key',
+ field=models.CharField(help_text="Valeur de la cl\xe9 dans le format JSON. Pour les cl\xe9s hi\xe9rarchiques utiliser \xab __ \xbb. Par exemple pour la cl\xe9 'ma_sousclef' avec des donn\xe9es telles que {'ma_clef': {'ma_sousclef': 'valeur'}}, sa valeur sera atteinte avec : ma_clef__ma_sousclef.", max_length=200, verbose_name='Cl\xe9'),
+ ),
+ migrations.AlterField(
+ model_name='jsondatafield',
+ name='name',
+ field=models.CharField(max_length=200, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='jsondatafield',
+ name='order',
+ field=models.IntegerField(default=10, verbose_name='Ordre'),
+ ),
+ migrations.AlterField(
+ model_name='jsondatafield',
+ name='search_index',
+ field=models.BooleanField(default=False, verbose_name='Utiliser dans les index de recherche'),
+ ),
+ migrations.AlterField(
+ model_name='jsondatafield',
+ name='value_type',
+ field=models.CharField(choices=[(b'T', 'Texte'), (b'LT', 'Texte long'), (b'I', 'Entier'), (b'B', 'Boolean'), (b'F', 'Nombre \xe0 virgule'), (b'D', 'Date'), (b'C', 'Choix')], default=b'T', max_length=10, verbose_name='Type'),
+ ),
+ migrations.AlterField(
+ model_name='jsondatasection',
+ name='name',
+ field=models.CharField(max_length=200, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='jsondatasection',
+ name='order',
+ field=models.IntegerField(default=10, verbose_name='Ordre'),
+ ),
+ migrations.AlterField(
+ model_name='licensetype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='licensetype',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='licensetype',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='licensetype',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='operationtype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='operationtype',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='operationtype',
+ name='judiciary',
+ field=models.BooleanField(default=False, verbose_name='Est judiciaire'),
+ ),
+ migrations.AlterField(
+ model_name='operationtype',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='operationtype',
+ name='order',
+ field=models.IntegerField(default=1, verbose_name='Ordre'),
+ ),
+ migrations.AlterField(
+ model_name='operationtype',
+ name='preventive',
+ field=models.BooleanField(default=True, verbose_name='Est du pr\xe9ventif'),
+ ),
+ migrations.AlterField(
+ model_name='operationtype',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='address',
+ field=models.TextField(blank=True, null=True, verbose_name='Adresse'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='address_complement',
+ field=models.TextField(blank=True, null=True, verbose_name="Compl\xe9ment d'adresse"),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='alt_address',
+ field=models.TextField(blank=True, null=True, verbose_name='Autre adresse : adresse'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='alt_address_complement',
+ field=models.TextField(blank=True, null=True, verbose_name="Autre adresse : compl\xe9ment d'adresse"),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='alt_address_is_prefered',
+ field=models.BooleanField(default=False, verbose_name="L'adresse alternative est pr\xe9f\xe9r\xe9e"),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='alt_country',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Autre adresse : pays'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='alt_postal_code',
+ field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Autre adresse : code postal'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='alt_town',
+ field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Autre adresse : ville'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='cached_label',
+ field=models.TextField(blank=True, db_index=True, null=True, verbose_name='Nom en cache'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='country',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Pays'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='email',
+ field=models.EmailField(blank=True, max_length=300, null=True, verbose_name='Courriel'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='history_creator',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Cr\xe9ateur'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='history_modifier',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Dernier \xe9diteur'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='merge_key',
+ field=models.TextField(blank=True, null=True, verbose_name='Cl\xe9 de fusion'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='mobile_phone',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone portable'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='name',
+ field=models.CharField(max_length=500, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='phone',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='phone2',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='Type de t\xe9l\xe9phone 2'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='phone3',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='phone_desc',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='phone_desc2',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 2'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='phone_desc3',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='postal_code',
+ field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Code postal'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='raw_phone',
+ field=models.TextField(blank=True, null=True, verbose_name='T\xe9l\xe9phone brut'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='search_vector',
+ field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='town',
+ field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Commune'),
+ ),
+ migrations.AlterField(
+ model_name='organizationtype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='organizationtype',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='organizationtype',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='organizationtype',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='address',
+ field=models.TextField(blank=True, null=True, verbose_name='Adresse'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='address_complement',
+ field=models.TextField(blank=True, null=True, verbose_name="Compl\xe9ment d'adresse"),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='alt_address',
+ field=models.TextField(blank=True, null=True, verbose_name='Autre adresse : adresse'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='alt_address_complement',
+ field=models.TextField(blank=True, null=True, verbose_name="Autre adresse : compl\xe9ment d'adresse"),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='alt_address_is_prefered',
+ field=models.BooleanField(default=False, verbose_name="L'adresse alternative est pr\xe9f\xe9r\xe9e"),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='alt_country',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Autre adresse : pays'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='alt_postal_code',
+ field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Autre adresse : code postal'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='alt_town',
+ field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Autre adresse : ville'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='attached_to',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='members', to='ishtar_common.Organization', verbose_name='Est rattach\xe9 \xe0'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='cached_label',
+ field=models.TextField(blank=True, db_index=True, null=True, verbose_name='Nom en cache'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='contact_type',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de contact'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='country',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='Pays'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='email',
+ field=models.EmailField(blank=True, max_length=300, null=True, verbose_name='Courriel'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='history_creator',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Cr\xe9ateur'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='history_modifier',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Dernier \xe9diteur'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='merge_key',
+ field=models.TextField(blank=True, null=True, verbose_name='Cl\xe9 de fusion'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='mobile_phone',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone portable'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='name',
+ field=models.CharField(blank=True, max_length=200, null=True, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='old_title',
+ field=models.CharField(blank=True, choices=[(b'Mr', 'M.'), (b'Ms', 'Mlle'), (b'Mr and Miss', 'M. et Mme'), (b'Md', 'Mme'), (b'Dr', 'Dr.')], max_length=100, null=True, verbose_name='Titre'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='phone',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='phone2',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='Type de t\xe9l\xe9phone 2'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='phone3',
+ field=models.CharField(blank=True, max_length=18, null=True, verbose_name='T\xe9l\xe9phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='phone_desc',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='phone_desc2',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 2'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='phone_desc3',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Type de t\xe9l\xe9phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='postal_code',
+ field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Code postal'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='raw_name',
+ field=models.CharField(blank=True, max_length=300, null=True, verbose_name='Nom brut'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='raw_phone',
+ field=models.TextField(blank=True, null=True, verbose_name='T\xe9l\xe9phone brut'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='salutation',
+ field=models.CharField(blank=True, max_length=200, null=True, verbose_name="Formule d'appel"),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='search_vector',
+ field=django.contrib.postgres.search.SearchVectorField(blank=True, help_text='Auto-rempli \xe0 la sauvegarde', null=True, verbose_name='Vecteur de recherche'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='surname',
+ field=models.CharField(blank=True, max_length=50, null=True, verbose_name='Pr\xe9nom'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='title',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.TitleType', verbose_name='Titre'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='town',
+ field=models.CharField(blank=True, max_length=70, null=True, verbose_name='Commune'),
+ ),
+ migrations.AlterField(
+ model_name='persontype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='persontype',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='persontype',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='persontype',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='profiletype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='profiletype',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='profiletype',
+ name='groups',
+ field=models.ManyToManyField(blank=True, to='auth.Group', verbose_name='Groupes'),
+ ),
+ migrations.AlterField(
+ model_name='profiletype',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='profiletype',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='regexp',
+ name='name',
+ field=models.CharField(max_length=100, unique=True, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='regexp',
+ name='regexp',
+ field=models.CharField(max_length=500, verbose_name='Expression r\xe9guli\xe8re'),
+ ),
+ migrations.AlterField(
+ model_name='searchquery',
+ name='content_type',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Type de contenu'),
+ ),
+ migrations.AlterField(
+ model_name='searchquery',
+ name='is_alert',
+ field=models.BooleanField(default=False, verbose_name='Est une alerte'),
+ ),
+ migrations.AlterField(
+ model_name='searchquery',
+ name='label',
+ field=models.TextField(blank=True, verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='searchquery',
+ name='profile',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.UserProfile', verbose_name='Profil'),
+ ),
+ migrations.AlterField(
+ model_name='searchquery',
+ name='query',
+ field=models.TextField(blank=True, verbose_name='Requ\xeate'),
+ ),
+ migrations.AlterField(
+ model_name='sourcetype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='sourcetype',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='sourcetype',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='sourcetype',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='spatialreferencesystem',
+ name='auth_name',
+ field=models.CharField(default='EPSG', max_length=256, verbose_name='Registre'),
+ ),
+ migrations.AlterField(
+ model_name='spatialreferencesystem',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='spatialreferencesystem',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='spatialreferencesystem',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='spatialreferencesystem',
+ name='order',
+ field=models.IntegerField(default=10, verbose_name='Ordre'),
+ ),
+ migrations.AlterField(
+ model_name='spatialreferencesystem',
+ name='srid',
+ field=models.IntegerField(verbose_name='SRID'),
+ ),
+ migrations.AlterField(
+ model_name='spatialreferencesystem',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='state',
+ name='label',
+ field=models.CharField(max_length=30, verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='state',
+ name='number',
+ field=models.CharField(max_length=3, unique=True, verbose_name='Nombre'),
+ ),
+ migrations.AlterField(
+ model_name='supporttype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='supporttype',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='supporttype',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='supporttype',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='targetkey',
+ name='is_set',
+ field=models.BooleanField(default=False, verbose_name='Est d\xe9fini'),
+ ),
+ migrations.AlterField(
+ model_name='targetkey',
+ name='key',
+ field=models.TextField(verbose_name='Cl\xe9'),
+ ),
+ migrations.AlterField(
+ model_name='targetkey',
+ name='value',
+ field=models.TextField(blank=True, null=True, verbose_name='Valeur'),
+ ),
+ migrations.AlterField(
+ model_name='targetkeygroup',
+ name='all_user_can_modify',
+ field=models.BooleanField(default=False, verbose_name='Tous les utilisateurs peuvent le modifier'),
+ ),
+ migrations.AlterField(
+ model_name='targetkeygroup',
+ name='all_user_can_use',
+ field=models.BooleanField(default=False, verbose_name="Tous les utilisateurs peuvent l'utiliser"),
+ ),
+ migrations.AlterField(
+ model_name='targetkeygroup',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='targetkeygroup',
+ name='name',
+ field=models.TextField(unique=True, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='titletype',
+ name='available',
+ field=models.BooleanField(default=True, verbose_name='Disponible'),
+ ),
+ migrations.AlterField(
+ model_name='titletype',
+ name='comment',
+ field=models.TextField(blank=True, null=True, verbose_name='Commentaire'),
+ ),
+ migrations.AlterField(
+ model_name='titletype',
+ name='label',
+ field=models.TextField(verbose_name='D\xe9nomination'),
+ ),
+ migrations.AlterField(
+ model_name='titletype',
+ name='txt_idx',
+ field=models.TextField(help_text='Le "slug" est une version standardis\xe9e du nom. Il ne contient que des lettres en minuscule, des nombres et des tirets (-). Chaque "slug" doit \xeatre unique dans la typologie.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union.", 'invalid')], verbose_name='Identifiant textuel'),
+ ),
+ migrations.AlterField(
+ model_name='town',
+ name='cached_label',
+ field=models.CharField(blank=True, db_index=True, max_length=500, null=True, verbose_name='Nom en cache'),
+ ),
+ migrations.AlterField(
+ model_name='town',
+ name='children',
+ field=models.ManyToManyField(blank=True, related_name='parents', to='ishtar_common.Town', verbose_name='Communes enfants'),
+ ),
+ migrations.AlterField(
+ model_name='town',
+ name='departement',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.Department', verbose_name='D\xe9partement'),
+ ),
+ migrations.AlterField(
+ model_name='town',
+ name='limit',
+ field=django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Limite'),
+ ),
+ migrations.AlterField(
+ model_name='town',
+ name='name',
+ field=models.CharField(max_length=100, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='town',
+ name='year',
+ field=models.IntegerField(blank=True, help_text='Remplir ce champ est n\xe9cessaire pour distinguer les anciennes communes des nouvelles communes.', null=True, verbose_name='Ann\xe9e de cr\xe9ation'),
+ ),
+ migrations.AlterField(
+ model_name='userprofile',
+ name='areas',
+ field=models.ManyToManyField(blank=True, related_name='profiles', to='ishtar_common.Area', verbose_name='Zones'),
+ ),
+ migrations.AlterField(
+ model_name='userprofile',
+ name='current',
+ field=models.BooleanField(default=False, verbose_name='Profil actuel'),
+ ),
+ migrations.AlterField(
+ model_name='userprofile',
+ name='name',
+ field=models.CharField(blank=True, default='', max_length=100, verbose_name='Nom'),
+ ),
+ migrations.AlterField(
+ model_name='userprofile',
+ name='person',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='profiles', to='ishtar_common.Person', verbose_name='Personne'),
+ ),
+ migrations.AlterField(
+ model_name='userprofile',
+ name='profile_type',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.ProfileType', verbose_name='Type de profil'),
+ ),
+ ]
diff --git a/ishtar_common/migrations/0079_migrate-importers.py b/ishtar_common/migrations/0079_migrate-importers.py
new file mode 100644
index 000000000..3a66ffb30
--- /dev/null
+++ b/ishtar_common/migrations/0079_migrate-importers.py
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-12-13 15:13
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+def migrate_importer(apps, schema):
+ ImporterDuplicateField = apps.get_model('ishtar_common',
+ 'ImporterDuplicateField')
+ ImportTarget = apps.get_model('ishtar_common', 'ImportTarget')
+
+ idx = 0
+ for k, model in (('field_name', ImporterDuplicateField),
+ ('target', ImportTarget),):
+ q = model.objects.filter(
+ **{k + "__icontains": 'container'}
+ ).exclude(
+ **{k + "__icontains": 'container_ref'}
+ )
+ for item in q.all():
+ value = getattr(item, k).replace(
+ 'container', 'container_ref').replace(
+ 'container_ref_type', 'container_type')
+
+ dup_dct = {"column": item.column,
+ "field_name": value}
+ q2 = ImporterDuplicateField.objects.filter(
+ **dup_dct
+ )
+ if q2.count():
+ continue
+ idx += 1
+ if item.concat_str:
+ dup_dct['concat_str'] = item.concat_str
+ if item.concat:
+ dup_dct['concat'] = item.concat
+ ImporterDuplicateField.objects.create(**dup_dct)
+ q = model.objects.filter(
+ **{k + "__icontains": 'set_localisation'}
+ )
+ for item in q.all():
+ value = getattr(item, k).replace(
+ 'set_localisation', 'set_reference_localisation')
+ dup_dct = {"column": item.column,
+ "field_name": value}
+ q2 = ImporterDuplicateField.objects.filter(
+ **dup_dct
+ )
+ if q2.count():
+ continue
+ idx += 1
+ if item.concat_str:
+ dup_dct['concat_str'] = item.concat_str
+ if item.concat:
+ dup_dct['concat'] = item.concat
+ ImporterDuplicateField.objects.create(**dup_dct)
+
+ print("{} dup field created".format(idx))
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0078_auto_20181203_1442'),
+ ]
+
+ operations = [
+ migrations.RunPython(migrate_importer)
+ ]
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 1aa94836f..6eb36acdb 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -254,7 +254,7 @@ class OwnPerms(object):
action_own_name, request.session)
and self.is_own(request.user.ishtaruser))
- def is_own(self, user):
+ def is_own(self, user, alt_query_own=None):
"""
Check if the current object is owned by the user
"""
@@ -264,7 +264,10 @@ class OwnPerms(object):
ishtaruser = user.ishtaruser
else:
return False
- query = self.get_query_owns(ishtaruser)
+ if not alt_query_own:
+ query = self.get_query_owns(ishtaruser)
+ else:
+ query = getattr(self, alt_query_own)(ishtaruser)
if not query:
return False
query &= Q(pk=self.pk)
@@ -2181,7 +2184,11 @@ class CustomForm(models.Model):
return []
res = []
for model_name in register_fields[app_name]:
- ct = ContentType.objects.get(app_label=app_name, model=model_name)
+ q = ContentType.objects.filter(app_label=app_name,
+ model=model_name)
+ if not q.count():
+ continue
+ ct = q.all()[0]
for json_field in JsonDataField.objects.filter(
content_type=ct).all():
res.append((json_field.pk, u"{} ({})".format(
@@ -3293,6 +3300,7 @@ post_save.connect(post_save_userprofile, sender=UserProfile)
class IshtarUser(FullSearch):
+ SLUG = "ishtaruser"
TABLE_COLS = ('username', 'person__name', 'person__surname',
'person__email', 'person__person_types_list',
'person__attached_to__name')
@@ -3428,7 +3436,7 @@ class IshtarUser(FullSearch):
return self.person.full_label()
-class Basket(FullSearch):
+class Basket(FullSearch, OwnPerms):
"""
Abstract class for a basket
Subclass must be defined with an "items" ManyToManyField
@@ -3441,9 +3449,13 @@ class Basket(FullSearch):
verbose_name=_(u"Owner"))
available = models.BooleanField(_(u"Available"), default=True)
shared_with = models.ManyToManyField(
- IshtarUser, verbose_name=_(u"Shared with"), blank=True,
+ IshtarUser, verbose_name=_(u"Shared (read) with"), blank=True,
related_name='shared_%(class)ss'
)
+ shared_write_with = models.ManyToManyField(
+ IshtarUser, verbose_name=_(u"Shared (read/edit) with"), blank=True,
+ related_name='shared_write_%(class)ss'
+ )
TABLE_COLS = ['label', 'user']
@@ -3462,12 +3474,17 @@ class Basket(FullSearch):
if not request.user or not getattr(request.user, 'ishtaruser', None):
return Q(pk=None)
ishtaruser = request.user.ishtaruser
- return Q(user=ishtaruser) | Q(shared_with=ishtaruser)
+ return Q(user=ishtaruser) | Q(shared_with=ishtaruser) | Q(
+ shared_write_with=ishtaruser)
@property
def cached_label(self):
return unicode(self)
+ @property
+ def full_label(self):
+ return u"{} - {}".format(self.label, self.user)
+
@classmethod
def get_short_menu_class(cls, pk):
return 'basket'
@@ -3477,6 +3494,38 @@ class Basket(FullSearch):
return "{}-{}".format(datetime.date.today().strftime(
"%Y-%m-%d"), slugify(self.label))
+ @classmethod
+ def get_query_owns(cls, ishtaruser):
+ return Q(user=ishtaruser) | Q(shared_with=ishtaruser) | Q(
+ shared_write_with=ishtaruser)
+
+ @classmethod
+ def get_write_query_owns(cls, ishtaruser):
+ return Q(user=ishtaruser)
+
+ def duplicate(self, label=None, ishtaruser=None):
+ """
+ Duplicate the basket. Items in basket are copied but not shared users
+ :param label: if provided use the name
+ :param ishtaruser: if provided an alternate user is used
+ :return: the new basket
+ """
+ items = list(self.items.all())
+ new_item = self
+ new_item.pk = None
+ if ishtaruser:
+ new_item.user = ishtaruser
+ if not label:
+ label = new_item.label
+ while self.__class__.objects.filter(
+ label=label, user=new_item.user).count():
+ label += unicode(_(u" - duplicate"))
+ new_item.label = label
+ new_item.save()
+ for item in items:
+ new_item.items.add(item)
+ return new_item
+
class AuthorType(GeneralType):
order = models.IntegerField(_(u"Order"), default=1)
@@ -3844,11 +3893,18 @@ class Document(OwnPerms, ImageModel, FullSearch, Imported):
def get_query_owns(cls, ishtaruser):
Operation = cls.operations.rel.related_model
ArchaeologicalSite = cls.sites.rel.related_model
- q = cls._construct_query_own(
- 'operations__', Operation._get_query_owns_dicts(ishtaruser)
- ) | cls._construct_query_own(
- 'sites__', ArchaeologicalSite._get_query_owns_dicts(ishtaruser)
+ query_own_list = (
+ ('operations__', Operation._get_query_owns_dicts(ishtaruser)),
+ ('sites__', ArchaeologicalSite._get_query_owns_dicts(ishtaruser)),
)
+ q = None
+ for prefix, owns in query_own_list:
+ subq = cls._construct_query_own(prefix, owns)
+ if subq:
+ if not q:
+ q = subq
+ else:
+ q |= subq
return q
def get_associated_operation(self):
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index 9aae1d52d..b5ce3323d 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -133,7 +133,7 @@ class ImporterType(models.Model):
ImporterModel, verbose_name=_(u"Models that can accept new items"),
blank=True, help_text=_(u"Leave blank for no restrictions"),
related_name='+')
- is_template = models.BooleanField(_(u"Is template"), default=False)
+ is_template = models.BooleanField(_(u"Can be exported"), default=False)
unicity_keys = models.CharField(_(u"Unicity keys (separator \";\")"),
blank=True, null=True, max_length=500)
available = models.BooleanField(_(u"Available"), default=True)
@@ -629,6 +629,7 @@ class TargetKey(models.Model):
TARGET_MODELS = [
('OrganizationType', _(u"Organization type")),
('ishtar_common.models.OrganizationType', _(u"Organization type")),
+ ('ishtar_common.models.PersonType', _(u"Person type")),
('TitleType', _(u"Title")),
('SourceType', _(u"Source type")),
('AuthorType', _(u"Author type")),
diff --git a/ishtar_common/static/bootstrap/bootstrap.css b/ishtar_common/static/bootstrap/bootstrap.css
index c6407564d..3026e8f4f 100644
--- a/ishtar_common/static/bootstrap/bootstrap.css
+++ b/ishtar_common/static/bootstrap/bootstrap.css
@@ -3,4 +3,4 @@
* Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */:root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #007bff;--secondary: #6c757d;--success: #28a745;--info: #17a2b8;--warning: #ffc107;--danger: #dc3545;--light: #f8f9fa;--dark: #343a40;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#6f3b93;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#542c6f;text-decoration:none}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:monospace, monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container{max-width:540px}}@media (min-width: 768px){.container{max-width:720px}}@media (min-width: 992px){.container{max-width:960px}}@media (min-width: 1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:none}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:none}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:none}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:none}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:none}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:rgba(0,0,0,0)}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>th,.table-success>td{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>th,.table-info>td{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>th,.table-warning>td{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark th,.table-dark td,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.form-control-plaintext.form-control-lg,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}select.form-control-sm:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control-lg:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,0.8);border-radius:.2rem}.was-validated .form-control:valid,.form-control.is-valid,.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#28a745}.was-validated .form-control:valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip,.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#28a745}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#28a745}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{background-color:#71dd8a}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{background-color:#34ce57}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,0.25)}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#28a745}.was-validated .custom-file-input:valid ~ .custom-file-label::before,.custom-file-input.is-valid ~ .custom-file-label::before{border-color:inherit}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,0.8);border-radius:.2rem}.was-validated .form-control:invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dc3545}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip,.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#dc3545}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#dc3545}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{background-color:#efa2a9}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{background-color:#e4606d}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,0.25)}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#dc3545}.was-validated .custom-file-input:invalid ~ .custom-file-label::before,.custom-file-input.is-invalid ~ .custom-file-label::before{border-color:inherit}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.btn:hover,.btn:focus{text-decoration:none}.btn:focus,.btn.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled):active,.btn:not(:disabled):not(.disabled).active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary:focus,.btn-primary.focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary:focus,.btn-secondary.focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info:focus,.btn-info.focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning:focus,.btn-warning.focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:focus,.btn-outline-secondary.focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-link{font-weight:400;color:#6f3b93;background-color:transparent}.btn-link:hover{color:#542c6f;text-decoration:none;background-color:transparent;border-color:transparent}.btn-link:focus,.btn-link.focus{text-decoration:none;border-color:transparent;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;transition:opacity 0.15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}.dropup,.dropdown{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:0 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file:focus{z-index:3}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,0.25)}.custom-control-input:active ~ .custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(128,189,255,0.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.custom-file-input:focus ~ .custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.5);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width: 576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width: 576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-img-top,.card-group>.card:first-child .card-header{border-top-right-radius:0}.card-group>.card:first-child .card-img-bottom,.card-group>.card:first-child .card-footer{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-img-top,.card-group>.card:last-child .card-header{border-top-left-radius:0}.card-group>.card:last-child .card-img-bottom,.card-group>.card:last-child .card-footer{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-img-top,.card-group>.card:only-child .card-header{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-img-bottom,.card-group>.card:only-child .card-footer{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width: 576px){.card-columns{column-count:3;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#6f3b93;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#542c6f;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:hover,.badge-primary[href]:focus{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:hover,.badge-secondary[href]:focus{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:hover,.badge-success[href]:focus{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:hover,.badge-info[href]:focus{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:hover,.badge-warning[href]:focus{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:hover,.badge-danger[href]:focus{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:hover,.badge-light[href]:focus{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:hover,.badge-dark[href]:focus{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width 0.6s ease}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:hover,.list-group-item:focus{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover,.close:focus{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -25%)}.modal.show .modal-dialog{transform:translate(0, 0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:.5rem}.bs-popover-top .arrow,.bs-popover-auto[x-placement^="top"] .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{border-width:.5rem .5rem 0}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before{bottom:0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:.5rem}.bs-popover-right .arrow,.bs-popover-auto[x-placement^="right"] .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{border-width:.5rem .5rem .5rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before{left:0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{left:1px;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:.5rem}.bs-popover-bottom .arrow,.bs-popover-auto[x-placement^="bottom"] .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{border-width:0 .5rem .5rem .5rem}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before{top:0;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:.5rem}.bs-popover-left .arrow,.bs-popover-auto[x-placement^="left"] .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{border-width:.5rem 0 .5rem .5rem}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before{right:0;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;align-items:center;width:100%;transition:transform 0.6s ease;backface-visibility:hidden;perspective:1000px}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateX(0)}@supports (transform-style: preserve-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translate3d(0, 0, 0)}}.carousel-item-next,.active.carousel-item-right{transform:translateX(100%)}@supports (transform-style: preserve-3d){.carousel-item-next,.active.carousel-item-right{transform:translate3d(100%, 0, 0)}}.carousel-item-prev,.active.carousel-item-left{transform:translateX(-100%)}@supports (transform-style: preserve-3d){.carousel-item-prev,.active.carousel-item-left{transform:translate3d(-100%, 0, 0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{transform:translateX(0)}@supports (transform-style: preserve-3d){.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{transform:translate3d(0, 0, 0)}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,0.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#007bff !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#0062cc !important}.bg-secondary{background-color:#6c757d !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#545b62 !important}.bg-success{background-color:#28a745 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#1e7e34 !important}.bg-info{background-color:#17a2b8 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#117a8b !important}.bg-warning{background-color:#ffc107 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#d39e00 !important}.bg-danger{background-color:#dc3545 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#bd2130 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#007bff !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#28a745 !important}.border-info{border-color:#17a2b8 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-white{border-color:#fff !important}.rounded{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-circle{border-radius:50% !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;clip-path:none}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#007bff !important}a.text-primary:hover,a.text-primary:focus{color:#0062cc !important}.text-secondary{color:#6c757d !important}a.text-secondary:hover,a.text-secondary:focus{color:#545b62 !important}.text-success{color:#28a745 !important}a.text-success:hover,a.text-success:focus{color:#1e7e34 !important}.text-info{color:#17a2b8 !important}a.text-info:hover,a.text-info:focus{color:#117a8b !important}.text-warning{color:#ffc107 !important}a.text-warning:hover,a.text-warning:focus{color:#d39e00 !important}.text-danger{color:#dc3545 !important}a.text-danger:hover,a.text-danger:focus{color:#bd2130 !important}.text-light{color:#f8f9fa !important}a.text-light:hover,a.text-light:focus{color:#dae0e5 !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#1d2124 !important}.text-muted{color:#6c757d !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}.switch{font-size:1rem;position:relative}.switch input{position:absolute;height:1px;width:1px;background:none;border:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;padding:0}.switch input+label{position:relative;min-width:calc(calc(2.375rem * .8) * 2);border-radius:calc(2.375rem * .8);height:calc(2.375rem * .8);line-height:calc(2.375rem * .8);display:inline-block;cursor:pointer;outline:none;user-select:none;vertical-align:middle;text-indent:calc(calc(calc(2.375rem * .8) * 2) + .5rem)}.switch input+label::before,.switch input+label::after{content:'';position:absolute;top:0;left:0;width:calc(calc(2.375rem * .8) * 2);bottom:0;display:block}.switch input+label::before{right:0;background-color:#dee2e6;border-radius:calc(2.375rem * .8);transition:0.2s all}.switch input+label::after{top:2px;left:2px;width:calc(calc(2.375rem * .8) - calc(2px * 2));height:calc(calc(2.375rem * .8) - calc(2px * 2));border-radius:50%;background-color:#fff;transition:0.2s all}.switch input:checked+label::before{background-color:#08d}.switch input:checked+label::after{margin-left:calc(2.375rem * .8)}.switch input:focus+label::before{outline:none;box-shadow:0 0 0 .2rem rgba(0,136,221,0.25)}.switch input:disabled+label{color:#868e96;cursor:not-allowed}.switch input:disabled+label::before{background-color:#e9ecef}.switch.switch-sm{font-size:.875rem}.switch.switch-sm input+label{min-width:calc(calc(1.9375rem * .8) * 2);height:calc(1.9375rem * .8);line-height:calc(1.9375rem * .8);text-indent:calc(calc(calc(1.9375rem * .8) * 2) + .5rem)}.switch.switch-sm input+label::before{width:calc(calc(1.9375rem * .8) * 2)}.switch.switch-sm input+label::after{width:calc(calc(1.9375rem * .8) - calc(2px * 2));height:calc(calc(1.9375rem * .8) - calc(2px * 2))}.switch.switch-sm input:checked+label::after{margin-left:calc(1.9375rem * .8)}.switch.switch-lg{font-size:1.25rem}.switch.switch-lg input+label{min-width:calc(calc(3rem * .8) * 2);height:calc(3rem * .8);line-height:calc(3rem * .8);text-indent:calc(calc(calc(3rem * .8) * 2) + .5rem)}.switch.switch-lg input+label::before{width:calc(calc(3rem * .8) * 2)}.switch.switch-lg input+label::after{width:calc(calc(3rem * .8) - calc(2px * 2));height:calc(calc(3rem * .8) - calc(2px * 2))}.switch.switch-lg input:checked+label::after{margin-left:calc(3rem * .8)}.switch+.switch{margin-left:1rem}.switch.danger input:checked+label::before{background-color:#dc3545}.switch.danger input:focus+label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}html{font-size:0.8em;background-color:#f8f9fa}body{background-color:transparent;position:relative}label{margin-bottom:.2rem;min-height:1.5rem}.form-group span label{display:inline-block}.form-group label{display:block}.form-group li label{display:inline-block}.form-group li .form-control{width:auto}.form-group li input[type="radio"].form-control,.form-group li input[type="checkbox"].form-control{display:inline}pre{white-space:pre-wrap}.raw-description{white-space:pre-line}.form-control.small-input,.input-group>.form-control.small-input{width:110px;flex:none}.input-group>input[type=checkbox]{margin:0.5em 1em}.form-row.odd{background-color:#e9ecef}.form-row-modal{padding:0.5rem 2rem}.field-tip{position:absolute;right:10px;top:5px;opacity:0.7}.form-group .select2-container--default .select2-selection--multiple{border:1px solid #ced4da}.page-link.imported-page{color:#aa8fda}.page-link.imported-page.current-page,.page-link.current-page{color:black;font-weight:bold}#modal-advanced-search .modal-header{flex-wrap:wrap;padding-bottom:0}#modal-advanced-search .modal-header .alert-secondary{background-color:#fff}.modal-header,.modal-footer{background-color:#e9ecef}.modal-body.body-scroll{max-height:calc(100vh - 200px);overflow-y:auto}.modal-dialog.full{width:98%;height:98%;max-width:none;padding:1%}.modal-dialog.full .display.dataTable{width:100% !important}.modal-dialog.full .modal-content{height:auto;min-height:100%;border-radius:0}.table{background-color:white}.input-progress.form-control:focus,.input-progress{background-color:#dee2e6}.card-header,.input-progress,.table-striped tbody tr:nth-of-type(2n+1),.dt-bootstrap4 table.dataTable.stripe tbody tr.odd,.dt-bootstrap4 table.dataTable.display tbody tr.odd{background-color:#e9ecef}.dropdown-item:hover,.dropdown-item:focus,.dt-bootstrap4 table.dataTable.hover tbody tr:hover,.dt-bootstrap4 table.dataTable.display tbody tr:hover{background-color:#f6f6f6;background-color:#dee2e6}table.dataTable{font-size:0.8em}.table-modal-lg table.dataTable{font-size:1em}div.dt-buttons{float:right}.dt-button{color:#fff;background-color:#007bff;border-color:#007bff;display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;border:1px solid transparent;color:#fff;background-color:#6c757d;border-color:#6c757d;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.dt-button:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.dt-button:focus,.dt-button.focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.dt-button.disabled,.dt-button:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.dt-button:not(:disabled):not(.disabled):active,.dt-button:not(:disabled):not(.disabled).active,.show>.dt-button.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.dt-button:not(:disabled):not(.disabled):active:focus,.dt-button:not(:disabled):not(.disabled).active:focus,.show>.dt-button.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.dt-button.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.dt-button.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.dt-button.btn-success:focus,.dt-button.btn-success.focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.dt-button.btn-success.disabled,.dt-button.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.dt-button.btn-success:not(:disabled):not(.disabled):active,.dt-button.btn-success:not(:disabled):not(.disabled).active,.show>.dt-button.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.dt-button.btn-success:not(:disabled):not(.disabled):active:focus,.dt-button.btn-success:not(:disabled):not(.disabled).active:focus,.show>.dt-button.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.dt-button.disabled{background-color:#f8f9fa;border-color:#f8f9fa;color:#adb5bd;cursor:not-allowed}.small-button{padding:0.1em 0.2em}.previous-value{margin:0.4em 0;display:block}h3,.h3{font-size:1.5rem}h4,.h4{font-size:1.1rem}textarea{height:90px}.sheet h4{color:#6c757d}#bookmark-list .input-link{width:100%;padding-right:5px}#window-fixed-menu{background-color:#e9ecef;position:fixed;right:0;margin-top:100px;z-index:50;width:200px}#window-fixed-menu-list li{padding-bottom:0.5em}#window-fixed-menu-list li a.nav-link{background-color:white}#window-fixed-menu-list li a.nav-link.active{background-color:#007bff}#window-menu-title{font-size:1.3em}#window-menu-control{font-size:0.6em;padding-top:0.2em}#window-fixed-menu.hidden{transform:rotate(270deg);transform-origin:right bottom 0}#window-fixed-menu.hidden i.fa-times{transform:rotate(45deg);transform-origin:10px 10px 0;padding-left:0.1em}.form h4,.form h3,.collapse-form .card-header,#window h3{background-color:#ced4da}.collapse-form .card,.collapse-form .card-header{border-radius:0;border:0 solid}.collapse-form .card-header{padding:0;text-align:center}.collapse-form .card-header h4{margin-bottom:0}.collapse-form .card-header .btn.btn-link{color:#212529;width:100%}.collapse-form .card-body{border:1px solid #ced4da}.collapse-form .fa-expand,.collapse-form .collapsed .fa-compress{display:none}.collapse-form .collapsed .fa-expand,.collapse-form .fa-compress{display:inline-block}.clean-table h4,.form h4,.form h3,.collapse-form .card-header h4 .btn,.sheet h4,.sheet h3,.sheet h2{text-align:center;text-shadow:2px 2px 2px rgba(150,150,150,0.7)}.sheet .subsection{background-color:#e9ecef}.sheet .row.toolbar{padding:0.5em 0.75em}.sheet .row{padding:0 0.75em;margin:0}.clean-table h4{margin-top:1em}.container{margin-top:1em;margin-bottom:8em}.bg-dark{background-color:#432776 !important}.navbar{padding:0 0.5rem}.navbar-dark .navbar-nav.action-menu .nav-link{color:#ffe484;border:1px solid #ffe484;border-radius:4px;margin:0.2em;padding:0.3em 0.6em}.navbar-dark .navbar-nav.action-menu .d-none .nav-link{border:0px solid transparent}.navbar-dark .navbar-nav.action-menu .d-none .nav-link:hover{background-color:transparent;color:#ffe484}.navbar-dark .navbar-nav.action-menu .nav-link:hover{background-color:#ffe484;color:#343a40}.navbar-dark .navbar-nav.action-menu .nav-link.dropdown-toggle::after{color:#ffe484}.navbar-dark .navbar-nav.action-menu .nav-link.dropdown-toggle:hover::after{color:#343a40}#context-menu,#reminder,.confirm-message,div#validation-bar{background-color:#6f42c1;color:rgba(255,255,255,0.8)}#reminder{padding:0.6em 1em 0.1em 1em}#alert-list{padding:0.6em 0}#alert-list a{font-size:1.1rem}.confirm-message{text-align:center;margin:0;padding:0.5rem;font-weight:bold}.is-invalid input{border-color:#f99}.errorlist{color:#900}#shortcut-menu{width:700px;padding:1em}#context-menu a.nav-link{color:rgba(255,255,255,0.8);padding:0.8rem 0.5rem 0.7rem 0.5rem}#context-menu .breadcrumb{margin-bottom:0;background-color:transparent}#current_items{width:100%}div#foot{background-color:#432776;color:rgba(255,255,255,0.5)}div#foot a{color:#ddd}div#foot a:hover{color:#fff}.breadcrumb button{border:0 transparent;background-color:transparent}.breadcrumb a:hover{text-decoration:none}.breadcrumb button:hover{cursor:pointer;color:#0062cc}.input-group.date input{border:1px solid #dee2e6;border-radius:.25rem;padding:.375rem .75rem;font-size:1rem;line-height:1.5}.input-group.date .input-group-text:hover{cursor:pointer}.input-group>ul{padding:0.5em;border:1px solid #dee2e6;border-radius:.25rem;margin:0;list-style:none}.help-text{max-height:250px;overflow:auto}.input-link{color:#6c757d}.input-link.disabled{color:#adb5bd}.input-link:hover{color:#343a40;cursor:pointer}.input-link.disabled:hover{color:#adb5bd;cursor:not-allowed}.input-sep{background-color:#fff;padding:0.3rem}.search_button{display:none}.lightgallery-captions{display:none}.lightgallery-subimage{display:inline-block;width:80px;padding:0.2em}.lightgallery-subimage img{width:100%}.lg .lg-sub-html{text-align:left}.lg .lg-sub-html .close{color:#fff}.lg .lg-sub-html .close:hover{opacity:0.9}#basket-manage #foot_pk{display:none}#basket-manage #grid_pk_meta_wrapper{width:50%;float:left;padding-bottom:80px}#basket-add-button{width:8%;float:left;margin:20vh 1% 0 1%}#basket-content-wrapper{width:40%;float:left}#basket-content{text-align:left;overflow:auto;max-height:60vh}.ui-widget-content{border:1px solid #dee2e6;background-color:#fff}.ui-menu-item{padding:0.2em 0.4em;border:1px solid #fff}.ui-menu-item:hover{color:#6f3b93;border:1px solid #6f3b93;cursor:pointer}.ui-autocomplete{font-size:0.7em;z-index:10000 !important;width:350px;border:5px solid #dee2e6;outline:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}
+ */:root{--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #fd7e14;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #6c757d;--gray-dark: #343a40;--primary: #007bff;--secondary: #6c757d;--success: #28a745;--info: #17a2b8;--warning: #ffc107;--danger: #dc3545;--light: #f8f9fa;--dark: #343a40;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#6f3b93;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#542c6f;text-decoration:none}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:monospace, monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{box-sizing:border-box;padding:0}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container{max-width:540px}}@media (min-width: 768px){.container{max-width:720px}}@media (min-width: 992px){.container{max-width:960px}}@media (min-width: 1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:none}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:none}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:none}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:none}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:none}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:rgba(0,0,0,0)}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>th,.table-success>td{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>th,.table-info>td{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>th,.table-warning>td{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>th,.table-danger>td{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>th,.table-light>td{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>th,.table-dark>td{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark th,.table-dark td,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.form-control-plaintext.form-control-lg,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}select.form-control-sm:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control-lg:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled ~ .form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,0.8);border-radius:.2rem}.was-validated .form-control:valid,.form-control.is-valid,.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#28a745}.was-validated .form-control:valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,0.25)}.was-validated .form-control:valid ~ .valid-feedback,.was-validated .form-control:valid ~ .valid-tooltip,.form-control.is-valid ~ .valid-feedback,.form-control.is-valid ~ .valid-tooltip,.was-validated .custom-select:valid ~ .valid-feedback,.was-validated .custom-select:valid ~ .valid-tooltip,.custom-select.is-valid ~ .valid-feedback,.custom-select.is-valid ~ .valid-tooltip{display:block}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#28a745}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#28a745}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{background-color:#71dd8a}.was-validated .custom-control-input:valid ~ .valid-feedback,.was-validated .custom-control-input:valid ~ .valid-tooltip,.custom-control-input.is-valid ~ .valid-feedback,.custom-control-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{background-color:#34ce57}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,0.25)}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#28a745}.was-validated .custom-file-input:valid ~ .custom-file-label::before,.custom-file-input.is-valid ~ .custom-file-label::before{border-color:inherit}.was-validated .custom-file-input:valid ~ .valid-feedback,.was-validated .custom-file-input:valid ~ .valid-tooltip,.custom-file-input.is-valid ~ .valid-feedback,.custom-file-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,0.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,0.8);border-radius:.2rem}.was-validated .form-control:invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dc3545}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.was-validated .form-control:invalid ~ .invalid-feedback,.was-validated .form-control:invalid ~ .invalid-tooltip,.form-control.is-invalid ~ .invalid-feedback,.form-control.is-invalid ~ .invalid-tooltip,.was-validated .custom-select:invalid ~ .invalid-feedback,.was-validated .custom-select:invalid ~ .invalid-tooltip,.custom-select.is-invalid ~ .invalid-feedback,.custom-select.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#dc3545}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#dc3545}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{background-color:#efa2a9}.was-validated .custom-control-input:invalid ~ .invalid-feedback,.was-validated .custom-control-input:invalid ~ .invalid-tooltip,.custom-control-input.is-invalid ~ .invalid-feedback,.custom-control-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{background-color:#e4606d}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,0.25)}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#dc3545}.was-validated .custom-file-input:invalid ~ .custom-file-label::before,.custom-file-input.is-invalid ~ .custom-file-label::before{border-color:inherit}.was-validated .custom-file-input:invalid ~ .invalid-feedback,.was-validated .custom-file-input:invalid ~ .invalid-tooltip,.custom-file-input.is-invalid ~ .invalid-feedback,.custom-file-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.btn:hover,.btn:focus{text-decoration:none}.btn:focus,.btn.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled):active,.btn:not(:disabled):not(.disabled).active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary:focus,.btn-primary.focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary:focus,.btn-secondary.focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success:focus,.btn-success.focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info:focus,.btn-info.focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning:focus,.btn-warning.focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger:focus,.btn-danger.focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark:focus,.btn-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,0.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:focus,.btn-outline-secondary.focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:focus,.btn-outline-success.focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:focus,.btn-outline-info.focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,0.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:focus,.btn-outline-warning.focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,0.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:focus,.btn-outline-danger.focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,0.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,0.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:focus,.btn-outline-dark.focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,0.5)}.btn-link{font-weight:400;color:#6f3b93;background-color:transparent}.btn-link:hover{color:#542c6f;text-decoration:none;background-color:transparent;border-color:transparent}.btn-link:focus,.btn-link.focus{text-decoration:none;border-color:transparent;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;transition:opacity 0.15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition:height 0.35s ease}.dropup,.dropdown{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:0 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.custom-select,.input-group>.custom-file{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file:focus{z-index:3}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label::before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus ~ .custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,0.25)}.custom-control-input:active ~ .custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled ~ .custom-control-label{color:#6c757d}.custom-control-input:disabled ~ .custom-control-label::before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;content:"";user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(0,123,255,0.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(128,189,255,0.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.custom-file-input:focus ~ .custom-file-control::before{border-color:#80bdff}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(calc(2.25rem + 2px) - 1px * 2);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand{color:rgba(0,0,0,0.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,0.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,0.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,0.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,0.5);border-color:rgba(0,0,0,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,0.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,0.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,0.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.5);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,0.03);border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width: 576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width: 576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-img-top,.card-group>.card:first-child .card-header{border-top-right-radius:0}.card-group>.card:first-child .card-img-bottom,.card-group>.card:first-child .card-footer{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-img-top,.card-group>.card:last-child .card-header{border-top-left-radius:0}.card-group>.card:last-child .card-img-bottom,.card-group>.card:last-child .card-footer{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-img-top,.card-group>.card:only-child .card-header{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-img-bottom,.card-group>.card:only-child .card-footer{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width: 576px){.card-columns{column-count:3;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#6f3b93;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#542c6f;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,0.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:hover,.badge-primary[href]:focus{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:hover,.badge-secondary[href]:focus{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:hover,.badge-success[href]:focus{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:hover,.badge-info[href]:focus{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:hover,.badge-warning[href]:focus{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:hover,.badge-danger[href]:focus{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:hover,.badge-light[href]:focus{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:hover,.badge-dark[href]:focus{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width 0.6s ease}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,0.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:hover,.list-group-item:focus{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover,.close:focus{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -25%)}.modal.show .modal-dialog{transform:translate(0, 0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:.5rem}.bs-popover-top .arrow,.bs-popover-auto[x-placement^="top"] .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{border-width:.5rem .5rem 0}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^="top"] .arrow::before{bottom:0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^="top"] .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:.5rem}.bs-popover-right .arrow,.bs-popover-auto[x-placement^="right"] .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{border-width:.5rem .5rem .5rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^="right"] .arrow::before{left:0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^="right"] .arrow::after{left:1px;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:.5rem}.bs-popover-bottom .arrow,.bs-popover-auto[x-placement^="bottom"] .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{border-width:0 .5rem .5rem .5rem}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^="bottom"] .arrow::before{top:0;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^="bottom"] .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:.5rem}.bs-popover-left .arrow,.bs-popover-auto[x-placement^="left"] .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{border-width:.5rem 0 .5rem .5rem}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^="left"] .arrow::before{right:0;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^="left"] .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;align-items:center;width:100%;transition:transform 0.6s ease;backface-visibility:hidden;perspective:1000px}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateX(0)}@supports (transform-style: preserve-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translate3d(0, 0, 0)}}.carousel-item-next,.active.carousel-item-right{transform:translateX(100%)}@supports (transform-style: preserve-3d){.carousel-item-next,.active.carousel-item-right{transform:translate3d(100%, 0, 0)}}.carousel-item-prev,.active.carousel-item-left{transform:translateX(-100%)}@supports (transform-style: preserve-3d){.carousel-item-prev,.active.carousel-item-left{transform:translate3d(-100%, 0, 0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{transform:translateX(0)}@supports (transform-style: preserve-3d){.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{transform:translate3d(0, 0, 0)}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:rgba(255,255,255,0.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#007bff !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#0062cc !important}.bg-secondary{background-color:#6c757d !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#545b62 !important}.bg-success{background-color:#28a745 !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#1e7e34 !important}.bg-info{background-color:#17a2b8 !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#117a8b !important}.bg-warning{background-color:#ffc107 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#d39e00 !important}.bg-danger{background-color:#dc3545 !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#bd2130 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-dark{background-color:#343a40 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#1d2124 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#007bff !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#28a745 !important}.border-info{border-color:#17a2b8 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#343a40 !important}.border-white{border-color:#fff !important}.rounded{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-circle{border-radius:50% !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;clip-path:none}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#007bff !important}a.text-primary:hover,a.text-primary:focus{color:#0062cc !important}.text-secondary{color:#6c757d !important}a.text-secondary:hover,a.text-secondary:focus{color:#545b62 !important}.text-success{color:#28a745 !important}a.text-success:hover,a.text-success:focus{color:#1e7e34 !important}.text-info{color:#17a2b8 !important}a.text-info:hover,a.text-info:focus{color:#117a8b !important}.text-warning{color:#ffc107 !important}a.text-warning:hover,a.text-warning:focus{color:#d39e00 !important}.text-danger{color:#dc3545 !important}a.text-danger:hover,a.text-danger:focus{color:#bd2130 !important}.text-light{color:#f8f9fa !important}a.text-light:hover,a.text-light:focus{color:#dae0e5 !important}.text-dark{color:#343a40 !important}a.text-dark:hover,a.text-dark:focus{color:#1d2124 !important}.text-muted{color:#6c757d !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}.switch{font-size:1rem;position:relative}.switch input{position:absolute;height:1px;width:1px;background:none;border:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;padding:0}.switch input+label{position:relative;min-width:calc(calc(2.375rem * .8) * 2);border-radius:calc(2.375rem * .8);height:calc(2.375rem * .8);line-height:calc(2.375rem * .8);display:inline-block;cursor:pointer;outline:none;user-select:none;vertical-align:middle;text-indent:calc(calc(calc(2.375rem * .8) * 2) + .5rem)}.switch input+label::before,.switch input+label::after{content:'';position:absolute;top:0;left:0;width:calc(calc(2.375rem * .8) * 2);bottom:0;display:block}.switch input+label::before{right:0;background-color:#dee2e6;border-radius:calc(2.375rem * .8);transition:0.2s all}.switch input+label::after{top:2px;left:2px;width:calc(calc(2.375rem * .8) - calc(2px * 2));height:calc(calc(2.375rem * .8) - calc(2px * 2));border-radius:50%;background-color:#fff;transition:0.2s all}.switch input:checked+label::before{background-color:#08d}.switch input:checked+label::after{margin-left:calc(2.375rem * .8)}.switch input:focus+label::before{outline:none;box-shadow:0 0 0 .2rem rgba(0,136,221,0.25)}.switch input:disabled+label{color:#868e96;cursor:not-allowed}.switch input:disabled+label::before{background-color:#e9ecef}.switch.switch-sm{font-size:.875rem}.switch.switch-sm input+label{min-width:calc(calc(1.9375rem * .8) * 2);height:calc(1.9375rem * .8);line-height:calc(1.9375rem * .8);text-indent:calc(calc(calc(1.9375rem * .8) * 2) + .5rem)}.switch.switch-sm input+label::before{width:calc(calc(1.9375rem * .8) * 2)}.switch.switch-sm input+label::after{width:calc(calc(1.9375rem * .8) - calc(2px * 2));height:calc(calc(1.9375rem * .8) - calc(2px * 2))}.switch.switch-sm input:checked+label::after{margin-left:calc(1.9375rem * .8)}.switch.switch-lg{font-size:1.25rem}.switch.switch-lg input+label{min-width:calc(calc(3rem * .8) * 2);height:calc(3rem * .8);line-height:calc(3rem * .8);text-indent:calc(calc(calc(3rem * .8) * 2) + .5rem)}.switch.switch-lg input+label::before{width:calc(calc(3rem * .8) * 2)}.switch.switch-lg input+label::after{width:calc(calc(3rem * .8) - calc(2px * 2));height:calc(calc(3rem * .8) - calc(2px * 2))}.switch.switch-lg input:checked+label::after{margin-left:calc(3rem * .8)}.switch+.switch{margin-left:1rem}.switch.danger input:checked+label::before{background-color:#dc3545}.switch.danger input:focus+label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,0.25)}html{font-size:0.8em;background-color:#f8f9fa}body{background-color:transparent;position:relative}label{margin-bottom:.2rem;min-height:1.5rem}.form-group span label{display:inline-block}.form-group label{display:block}.form-group li label{display:inline-block}.form-group li .form-control{width:auto}.form-group li input[type="radio"].form-control,.form-group li input[type="checkbox"].form-control{display:inline}pre{white-space:pre-wrap}.raw-description{white-space:pre-line}.form-control.small-input,.input-group>.form-control.small-input{width:110px;flex:none}.input-group>input[type=checkbox]{margin:0.5em 1em}.form-row.odd{background-color:#e9ecef}.form-row-modal{padding:0.5rem 2rem}.field-tip{position:absolute;right:10px;top:5px;opacity:0.7}.form-group .select2-container--default .select2-selection--multiple{border:1px solid #ced4da}.page-link.imported-page{color:#aa8fda}.page-link.imported-page.current-page,.page-link.current-page{color:black;font-weight:bold}#modal-advanced-search .modal-header{flex-wrap:wrap;padding-bottom:0}#modal-advanced-search .modal-header .alert-secondary{background-color:#fff}.modal-header,.modal-footer{background-color:#e9ecef}.modal-body.body-scroll{max-height:calc(100vh - 200px);overflow-y:auto}.modal-dialog.full{width:98%;height:98%;max-width:none;padding:1%}.modal-dialog.full .display.dataTable{width:100% !important}.modal-dialog.full .modal-content{height:auto;min-height:100%;border-radius:0}.table{background-color:white}.tab-content{padding-top:1em}.input-progress.form-control:focus,.input-progress{background-color:#dee2e6}.card-header,.input-progress,.table-striped tbody tr:nth-of-type(2n+1),.dt-bootstrap4 table.dataTable.stripe tbody tr.odd,.dt-bootstrap4 table.dataTable.display tbody tr.odd{background-color:#e9ecef}.dropdown-item:hover,.dropdown-item:focus,.dt-bootstrap4 table.dataTable.hover tbody tr:hover,.dt-bootstrap4 table.dataTable.display tbody tr:hover{background-color:#f6f6f6;background-color:#dee2e6}table.dataTable{font-size:0.8em}.table-modal-lg table.dataTable{font-size:1em}div.dt-buttons{float:right}.dt-button{color:#fff;background-color:#007bff;border-color:#007bff;display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;border:1px solid transparent;color:#fff;background-color:#6c757d;border-color:#6c757d;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.dt-button:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.dt-button:focus,.dt-button.focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.dt-button.disabled,.dt-button:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.dt-button:not(:disabled):not(.disabled):active,.dt-button:not(:disabled):not(.disabled).active,.show>.dt-button.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.dt-button:not(:disabled):not(.disabled):active:focus,.dt-button:not(:disabled):not(.disabled).active:focus,.show>.dt-button.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,0.5)}.dt-button.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.dt-button.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.dt-button.btn-success:focus,.dt-button.btn-success.focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.dt-button.btn-success.disabled,.dt-button.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.dt-button.btn-success:not(:disabled):not(.disabled):active,.dt-button.btn-success:not(:disabled):not(.disabled).active,.show>.dt-button.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.dt-button.btn-success:not(:disabled):not(.disabled):active:focus,.dt-button.btn-success:not(:disabled):not(.disabled).active:focus,.show>.dt-button.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,0.5)}.dt-button.disabled{background-color:#f8f9fa;border-color:#f8f9fa;color:#adb5bd;cursor:not-allowed}.small-button{padding:0.1em 0.2em}.previous-value{margin:0.4em 0;display:block}h3,.h3{font-size:1.5rem}h4,.h4{font-size:1.1rem}textarea{height:90px}.sheet h4{color:#6c757d}#bookmark-list .input-link{width:100%;padding-right:5px}#window-fixed-menu{background-color:#e9ecef;position:fixed;right:0;margin-top:100px;z-index:50;width:200px}#window-fixed-menu-list li{padding-bottom:0.5em}#window-fixed-menu-list li a.nav-link{background-color:white}#window-fixed-menu-list li a.nav-link.active{background-color:#007bff}#window-menu-title{font-size:1.3em}#window-menu-control{font-size:0.6em;padding-top:0.2em}#window-fixed-menu.hidden{transform:rotate(270deg);transform-origin:right bottom 0}#window-fixed-menu.hidden i.fa-times{transform:rotate(45deg);transform-origin:10px 10px 0;padding-left:0.1em}.form h4,.form h3,.collapse-form .card-header,#window h3{background-color:#ced4da}.collapse-form .card,.collapse-form .card-header{border-radius:0;border:0 solid}.collapse-form .card-header{padding:0;text-align:center}.collapse-form .card-header h4{margin-bottom:0}.collapse-form .card-header .btn.btn-link{color:#212529;width:100%}.collapse-form .card-body{border:1px solid #ced4da}.collapse-form .fa-expand,.collapse-form .collapsed .fa-compress{display:none}.collapse-form .collapsed .fa-expand,.collapse-form .fa-compress{display:inline-block}.clean-table h4,.form h4,.form h3,.collapse-form .card-header h4 .btn,.sheet h4,.sheet h3,.sheet h2{text-align:center;text-shadow:2px 2px 2px rgba(150,150,150,0.7)}.sheet .subsection{background-color:#e9ecef}.sheet .row.toolbar{padding:0.5em 0.75em}.sheet .row{padding:0 0.75em;margin:0}.clean-table h4{margin-top:1em}.container{margin-top:1em;margin-bottom:8em}.bg-dark{background-color:#432776 !important}.navbar{padding:0 0.5rem}.navbar-dark .navbar-nav.action-menu .nav-link{color:#ffe484;border:1px solid #ffe484;border-radius:4px;margin:0.2em;padding:0.3em 0.6em}.navbar-dark .navbar-nav.action-menu .d-none .nav-link{border:0px solid transparent}.navbar-dark .navbar-nav.action-menu .d-none .nav-link:hover{background-color:transparent;color:#ffe484}.navbar-dark .navbar-nav.action-menu .nav-link:hover{background-color:#ffe484;color:#343a40}.navbar-dark .navbar-nav.action-menu .nav-link.dropdown-toggle::after{color:#ffe484}.navbar-dark .navbar-nav.action-menu .nav-link.dropdown-toggle:hover::after{color:#343a40}#context-menu,#reminder,.confirm-message,div#validation-bar{background-color:#6f42c1;color:rgba(255,255,255,0.8)}#reminder{padding:0.6em 1em 0.1em 1em}#alert-list{padding:0.6em 0}#alert-list a{font-size:1.1rem}.confirm-message{text-align:center;margin:0;padding:0.5rem;font-weight:bold}.is-invalid input{border-color:#f99}.errorlist{color:#900}#shortcut-menu{width:700px;padding:1em}#context-menu a.nav-link{color:rgba(255,255,255,0.8);padding:0.8rem 0.5rem 0.7rem 0.5rem}#context-menu .breadcrumb{margin-bottom:0;background-color:transparent}#current_items{width:100%}div#foot{background-color:#432776;color:rgba(255,255,255,0.5)}div#foot a{color:#ddd}div#foot a:hover{color:#fff}.breadcrumb button{border:0 transparent;background-color:transparent}.breadcrumb a:hover{text-decoration:none}.breadcrumb button:hover{cursor:pointer;color:#0062cc}.input-group.date input{border:1px solid #dee2e6;border-radius:.25rem;padding:.375rem .75rem;font-size:1rem;line-height:1.5}.input-group.date .input-group-text:hover{cursor:pointer}.input-group>ul{padding:0.5em;border:1px solid #dee2e6;border-radius:.25rem;margin:0;list-style:none}ul.compact{padding:0;margin:0}.help-text{max-height:250px;overflow:auto}.input-link{color:#6c757d}.input-link.disabled{color:#adb5bd}.input-link:hover{color:#343a40;cursor:pointer}.input-link.disabled:hover{color:#adb5bd;cursor:not-allowed}.input-sep{background-color:#fff;padding:0.3rem}.search_button{display:none}.lightgallery-captions{display:none}.lightgallery-subimage{display:inline-block;width:80px;padding:0.2em}.lightgallery-subimage img{width:100%}.lg .lg-sub-html{text-align:left}.lg .lg-sub-html .close{color:#fff}.lg .lg-sub-html .close:hover{opacity:0.9}#basket-manage #foot_pk{display:none}#basket-manage #grid_pk_meta_wrapper{width:50%;float:left;padding-bottom:80px}#basket-add-button{width:8%;float:left;margin:20vh 1% 0 1%}#basket-content-wrapper{width:40%;float:left}#basket-content{text-align:left;overflow:auto;max-height:60vh}.ui-widget-content{border:1px solid #dee2e6;background-color:#fff}.ui-menu-item{padding:0.2em 0.4em;border:1px solid #fff}.ui-menu-item:hover{color:#6f3b93;border:1px solid #6f3b93;cursor:pointer}.ui-autocomplete{font-size:0.7em;z-index:10000 !important;width:350px;border:5px solid #dee2e6;outline:none}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none;font-size:1.1em}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js
index ff8e43b54..ea0ccc516 100644
--- a/ishtar_common/static/js/ishtar.js
+++ b/ishtar_common/static/js/ishtar.js
@@ -70,6 +70,7 @@ var datatables_static_default = {
var activate_all_search_msg = "Searches in the shortcut menu deals with all items.";
var activate_own_search_msg = "Searches in the shortcut menu deals with only your items.";
var added_message = " items added.";
+var select_only_one_msg = "Select only one item.";
var search_pinned_msg = "";
var advanced_menu = false;
@@ -956,3 +957,25 @@ var qa_action_register = function(url) {
);
});
};
+
+var dt_single_enable_disable_submit_button = function(e, dt, type, indexes){
+ var rows = dt.rows( { selected: true } ).count();
+ if (rows == 1) {
+ $("#validation-bar #submit_form").prop('title', "");
+ $("#validation-bar #submit_form").prop('disabled', false);
+ } else {
+ $("#validation-bar #submit_form").prop('title', select_only_one_msg);
+ $("#validation-bar #submit_form").prop('disabled', true);
+ }
+};
+
+var dt_multi_enable_disable_submit_button = function(e, dt, type, indexes){
+ var rows = dt.rows( { selected: true } ).count();
+ if (rows >= 1) {
+ $("#validation-bar #submit_form").prop('title', "");
+ $("#validation-bar #submit_form").prop('disabled', false);
+ } else {
+ $("#validation-bar #submit_form").prop('title', select_only_one_msg);
+ $("#validation-bar #submit_form").prop('disabled', true);
+ }
+};
diff --git a/ishtar_common/templates/actions.html b/ishtar_common/templates/actions.html
index bd70ddf15..97d95c726 100644
--- a/ishtar_common/templates/actions.html
+++ b/ishtar_common/templates/actions.html
@@ -6,7 +6,7 @@
{% if MENU.current_subsections %}
<li class="nav-item d-none d-lg-block">
- <span class="nav-link">&gt;</span>
+ <span class="nav-link">›</span>
</li>
{% with MENU.current_subsection as section_label %}
{% with MENU.current_subsections as sections %}
@@ -16,7 +16,7 @@
{% if MENU.current_subsubsections %}
<li class="nav-item d-none d-lg-block">
- <span class="nav-link">&gt;</span>
+ <span class="nav-link">›</span>
</li>
{% with MENU.current_subsubsection as section_label %}
{% with MENU.current_subsubsections as sections %}
diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html
index 652df14b3..e5af101d5 100644
--- a/ishtar_common/templates/base.html
+++ b/ishtar_common/templates/base.html
@@ -44,6 +44,7 @@
var activate_own_search_msg = "{% trans 'Searches in the shortcut menu deal with only your items.' %}";
var search_pinned_msg = "{% trans 'Search pinned' %}";
var added_message = "{% trans " items added." %}";
+ var select_only_one_msg = "{% trans "Select only one item." %}";
var YES = "{% trans 'yes' %}";
var NO = "{% trans 'no' %}";
var autorefresh_message_start = "{% trans 'Autorefresh start. The form is disabled.' %}";
@@ -107,20 +108,28 @@
<ul class="nav nav-pills flex-column" id="window-fixed-menu-list">
</ul>
</nav>
- <div id="window_wrapper">
- <div id="window" role="tablist"></div>
- </div>
<div id="message_list">
- {% if MESSAGES %}{% for message, message_type in MESSAGES %}
- <div class="alert alert-{{message_type}} alert-dismissible fade show"
- role="alert">
- {{message}}
- <button type="button" class="close" data-dismiss="alert"
- aria-label="Close">
- <span aria-hidden="true">&times;</span>
- </button>
- </div>
- {% endfor %}{% endif %}
+ {% if messages %}
+ {% for message in messages %}
+ <div class="alert alert-{{ message.tags }} alert-dismissible fade show"
+ role="alert">
+ {{message|safe}}
+ <button type="button" class="close" data-dismiss="alert"
+ aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </div>{% endfor %}
+ {% endif %}
+ {% if MESSAGES %}{% for message, message_type in MESSAGES %}
+ <div class="alert alert-{{message_type}} alert-dismissible fade show"
+ role="alert">
+ {{message}}
+ <button type="button" class="close" data-dismiss="alert"
+ aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </div>
+ {% endfor %}{% endif %}
</div>
{% if warnings %}{% for warning in warnings %}
<div class="alert alert-warning alert-dismissible fade show" role="alert">
@@ -129,6 +138,9 @@
</button>
</div>
{% endfor %}{% endif %}
+ <div id="window_wrapper">
+ <div id="window" role="tablist"></div>
+ </div>
{% block content %}{% endblock %}
</div>
diff --git a/ishtar_common/templates/blocks/CentimeterMeterWidget.html b/ishtar_common/templates/blocks/CentimeterMeterWidget.html
new file mode 100644
index 000000000..00c1614b5
--- /dev/null
+++ b/ishtar_common/templates/blocks/CentimeterMeterWidget.html
@@ -0,0 +1,21 @@
+<div class="input-group">
+ <input class="area_widget form-control" type="text"{{final_attrs|safe}}>
+ <div class="input-group-append">
+ <div class="input-group-text">
+ {{unit}} (<span id="meter_{{id}}">0</span>&nbsp;m)
+ </div>
+ </div>
+</div>
+<script type="text/javascript"><!--//
+ function evaluate_{{safe_id}}(){
+ value = parseFloat($("#{{id}}").val());
+ if(!isNaN(value)){
+ value = value/100;
+ } else {
+ value = 0;
+ }
+ $("#meter_{{id}}").html(value);
+ }
+ $("#{{id}}").keyup(evaluate_{{safe_id}});
+ $(document).ready(evaluate_{{safe_id}}());
+//--></script>
diff --git a/ishtar_common/templates/blocks/DataTables.html b/ishtar_common/templates/blocks/DataTables.html
index b5f669963..096650115 100644
--- a/ishtar_common/templates/blocks/DataTables.html
+++ b/ishtar_common/templates/blocks/DataTables.html
@@ -152,7 +152,7 @@ jQuery(document).ready(function(){
}
},
"select": {
- "style": {% if multiple_select %}'multi'{% else %}'single'{% endif %}
+ "style": {% if multiple_select or quick_actions %}'multi'{% else %}'single'{% endif %}
},
{% if multiple_select or quick_actions %}"buttons": [
{% for url, title, icon, target in quick_actions %}
@@ -170,7 +170,7 @@ jQuery(document).ready(function(){
}
},
{% if not forloop.last %},{% endif %}
- {% endfor %}{% if multiple_select %}{% if quick_actions%},{% endif %}
+ {% endfor %}{% if quick_actions%},{% endif %}
{
extend: 'selectAll',
text: '<i class="fa fa-check-circle-o"></i>',
@@ -181,7 +181,6 @@ jQuery(document).ready(function(){
text: '<i class="fa fa-times"></i>',
titleAttr: "{% trans 'Deselect' %}"
}
- {% endif %}
],
"dom": 'lBtip',
{% else %}
@@ -192,7 +191,12 @@ jQuery(document).ready(function(){
{ "data": "link", "orderable": false },{% for col in extra_cols %}
{ "data": "{{col}}", "defaultContent": "-",
"render": $.fn.dataTable.render.ellipsis( 70, true ) }{% if not forloop.last %},{% endif %}{% endfor %}
- ]
+ ],
+ "initComplete": function(settings, json) {
+ var api = new $.fn.dataTable.Api(settings);
+ {% if not multiple_select %}dt_single_enable_disable_submit_button(null, api);
+ {% else %}dt_multi_enable_disable_submit_button(null, api);{% endif %}
+ }
};
if (!debug) $.fn.dataTable.ext.errMode = 'none';
@@ -201,6 +205,14 @@ jQuery(document).ready(function(){
if (datatables_i18n) datatable_options['language'] = datatables_i18n;
datatable_{{sname}} = jQuery("#grid_{{name}}").DataTable(datatable_options);
+ {% if not multiple_select %}
+ datatable_{{sname}}.on('select', dt_single_enable_disable_submit_button);
+ datatable_{{sname}}.on('deselect', dt_single_enable_disable_submit_button);
+ {% else %}
+ datatable_{{sname}}.on('select', dt_multi_enable_disable_submit_button);
+ datatable_{{sname}}.on('deselect', dt_multi_enable_disable_submit_button);
+ {% endif %}
+
{% if multiple %}
jQuery("#add_button_{{name}}").click(function (){
var mygrid = jQuery("#grid_{{name}}");
diff --git a/ishtar_common/templates/blocks/GramKilogramWidget.html b/ishtar_common/templates/blocks/GramKilogramWidget.html
new file mode 100644
index 000000000..27c066d13
--- /dev/null
+++ b/ishtar_common/templates/blocks/GramKilogramWidget.html
@@ -0,0 +1,21 @@
+<div class="input-group">
+ <input class="area_widget form-control" type="text"{{final_attrs|safe}}>
+ <div class="input-group-append">
+ <div class="input-group-text">
+ {{unit}} (<span id="kg_{{id}}">0</span>&nbsp;kg)
+ </div>
+ </div>
+</div>
+<script type="text/javascript"><!--//
+ function evaluate_{{safe_id}}(){
+ value = parseFloat($("#{{id}}").val());
+ if(!isNaN(value)){
+ value = value/1000;
+ } else {
+ value = 0;
+ }
+ $("#kg_{{id}}").html(value);
+ }
+ $("#{{id}}").keyup(evaluate_{{safe_id}});
+ $(document).ready(evaluate_{{safe_id}}());
+//--></script>
diff --git a/ishtar_common/templates/blocks/action_list.html b/ishtar_common/templates/blocks/action_list.html
index 50a6554c4..384082ad4 100644
--- a/ishtar_common/templates/blocks/action_list.html
+++ b/ishtar_common/templates/blocks/action_list.html
@@ -1,12 +1,12 @@
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle"
data-toggle="dropdown" href="#" role="button" aria-haspopup="true"
- aria-expanded="false">{{section_label}}</a>
+ aria-expanded="false">{{section_label|safe}}</a>
<div class="dropdown-menu">
{% for label, url, has_children in sections %}
<a class="dropdown-item{% if has_children%} font-weight-bold{%endif%}" href="{{url}}">
- {{ label }}
+ {{ label|safe }}
</a>{% endfor %}
</div>
</li>
diff --git a/ishtar_common/templates/blocks/bs_field_snippet.html b/ishtar_common/templates/blocks/bs_field_snippet.html
index 830dd4cfa..f46b15209 100644
--- a/ishtar_common/templates/blocks/bs_field_snippet.html
+++ b/ishtar_common/templates/blocks/bs_field_snippet.html
@@ -1,5 +1,5 @@
{% load i18n %}
- <div class="form-group {% if field.field.widget.attrs.cols %}col-lg-12{% else %}col-lg-6{% endif %}{% if field.errors %} is-invalid{% endif %}{% if field.field.required %} required{% endif %}"
+ <div class="form-group {% if field.field.widget.attrs.cols or force_large_col %}col-lg-12{% else %}col-lg-6{% endif %}{% if field.errors %} is-invalid{% endif %}{% if field.field.required %} required{% endif %}"
data-alt-name="{{field.field.alt_name}}">
{% if field.label %}{{ field.label_tag }}{% endif %}
{% if show_field_number and field.field.order_number %}<span class="badge badge-pill badge-success field-tip">
diff --git a/ishtar_common/templates/ishtar/blocks/sheet_json.html b/ishtar_common/templates/ishtar/blocks/sheet_json.html
index 8927eb057..df9340c6f 100644
--- a/ishtar_common/templates/ishtar/blocks/sheet_json.html
+++ b/ishtar_common/templates/ishtar/blocks/sheet_json.html
@@ -5,5 +5,7 @@
{% if forloop.first %}<div class='row'>{% endif %}
{% field_flex label value %}
{% if forloop.last %}</div>{% endif %}
+{% empty %}
+{% trans "No data" %}
{% endfor %}
{% endfor %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_field_flex_multiple_full.html b/ishtar_common/templates/ishtar/blocks/window_field_flex_multiple_full.html
new file mode 100644
index 000000000..b70c1d2fc
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/window_field_flex_multiple_full.html
@@ -0,0 +1,8 @@
+{% load i18n %}{% if data.count %}
+ <dl class="col-12 row">
+ <dt class="col-12">{% trans caption %}</dt>
+ <dd class="col-12">{% for d in data.distinct.all %}
+ {% if forloop.counter0 %} ; {% endif %}{{ d }}
+ {% endfor %}</dd>
+ </dl>
+{% endif %}
diff --git a/ishtar_common/templates/ishtar/blocks/window_nav.html b/ishtar_common/templates/ishtar/blocks/window_nav.html
index 6cd4bff40..62caff142 100644
--- a/ishtar_common/templates/ishtar/blocks/window_nav.html
+++ b/ishtar_common/templates/ishtar/blocks/window_nav.html
@@ -27,9 +27,9 @@
{% endif %}
</div>
</div>
- <div class='offset-md-6 col-md-4 text-right'>
+ <div class='offset-md-4 col-md-6 text-right'>
{% else %}
- <div class='offset-md-8 col-md-4 text-right'>
+ <div class='offset-md-6 col-md-6 text-right'>
{% endif %}
{% if pin_action and item.SLUG %}
<div class="btn-group btn-group-sm" role="group"
@@ -38,6 +38,8 @@
onclick='$.get("{% url "pin" item.SLUG item.pk %}", function(){load_shortcut_menu(); display_info("{% trans 'Item pined in your shortcut menu.' %}")});' title="{% trans 'Pin' %}">
<i class="fa fa-thumb-tack"></i>
</a>
+ {% block post_pin %}
+ {% endblock %}
</div>
{% endif %}
<div class="btn-group btn-group-sm" role="group" aria-label="{% trans 'Actions' %}">
@@ -55,15 +57,33 @@
</a>
{% endfor %}
</div>
+
<div class="btn-group btn-group-sm" role="group"
aria-label="{% trans 'Export' %}">
- <a class="btn btn-secondary" href='{% url show_url item.pk "odt" %}'
- title='{% trans "Export as OpenOffice.org file"%}'>
- ODT <i class="fa fa-file-word-o" aria-hidden="true"></i>
- <a class="btn btn-secondary" href='{% url show_url item.pk "pdf" %}'
- title='{% trans "Export as PDF file"%}'>
- PDF <i class="fa fa-file-pdf-o" aria-hidden="true"></i>
- </a>
+ <div class="dropdown btn-secondary">
+ <button class="btn btn-sm btn-secondary dropdown-toggle" type="button"
+ id="dropdown-sheet-export-{{window_id}}"
+ data-toggle="dropdown"aria-haspopup="true"
+ aria-expanded="false">
+ <i class="fa fa-file-word-o"></i> {% trans "Export" %}
+ </button>
+ <div class="dropdown-menu"
+ aria-labelledby="dropdown-sheet-export-{{window_id}}">
+ <a class="dropdown-item" href='{% url show_url item.pk "odt" %}'
+ title='{% trans "Export as OpenOffice.org file"%}'>
+ ODT <i class="fa fa-file-word-o" aria-hidden="true"></i>
+ </a>
+ <a class="dropdown-item" href='{% url show_url item.pk "pdf" %}'
+ title='{% trans "Export as PDF file"%}'>
+ PDF <i class="fa fa-file-pdf-o" aria-hidden="true"></i>
+ </a>{% for template_name, template_url in extra_templates %}
+ <a class="dropdown-item" href='{{template_url}}'>
+ {{template_name}} <i class="fa fa-file-word-o" aria-hidden="true"></i>
+ </a>{% endfor %}
+ </div>
+ </div>
+
+
</div>
</div>
</div>
diff --git a/ishtar_common/templates/ishtar/form.html b/ishtar_common/templates/ishtar/form.html
index b99d504a0..bcd69959e 100644
--- a/ishtar_common/templates/ishtar/form.html
+++ b/ishtar_common/templates/ishtar/form.html
@@ -1,5 +1,8 @@
{% extends "base.html" %}
{% load i18n inline_formset table_form %}
+{% block extra_head %}
+{{form.media}}
+{% endblock %}
{% block pre_container %}
<form enctype="multipart/form-data" action="." method="post"{% if confirm %}
onsubmit='return confirm("{{confirm}}");'{% endif %}>{% csrf_token %}
diff --git a/ishtar_common/templates/ishtar/forms/qa_base.html b/ishtar_common/templates/ishtar/forms/qa_base.html
index 70fe70e65..367acfcd8 100644
--- a/ishtar_common/templates/ishtar/forms/qa_base.html
+++ b/ishtar_common/templates/ishtar/forms/qa_base.html
@@ -1,7 +1,6 @@
{% load i18n inline_formset table_form %}
-<div
- class="modal-dialog {% if modal_size == 'large' %}modal-lg {% elif modal_size == 'small'%}modal-sm {% endif%}modal-dialog-centered">
+<div class="modal-dialog {% if modal_size == 'large' %}modal-lg {% elif modal_size == 'small'%}modal-sm {% endif%}modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h2>{{page_name|safe}}</h2>
diff --git a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html
index 401fe570c..9829058a8 100644
--- a/ishtar_common/templates/ishtar/wizard/confirm_wizard.html
+++ b/ishtar_common/templates/ishtar/wizard/confirm_wizard.html
@@ -9,7 +9,12 @@
<form action="." method="post">{% csrf_token %}
<div class='form'>
{% block "warning_informations" %}{% endblock %}
- <p>{% if confirm_msg %}{{confirm_msg|safe}}{%else%}{% trans "You have entered the following informations:" %}{%endif%}</p>
+ {% block "warning_message" %}
+ <div class="alert alert-info">
+ {% if confirm_msg %}{{confirm_msg|safe}}{%else%}{% trans "You have entered the following informations:" %}{%endif%}
+ </div>
+ {% endblock %}
+ {% block "detailed_informations" %}
{% for form_label, form_data in datas %}
<div class="card">
@@ -42,6 +47,7 @@
{{ extra_form }}
</table>
{% endif %}
+ {% endblock %}
{% block "extra_informations" %}{% endblock %}
{% block "footer" %}
diff --git a/ishtar_common/templatetags/ishtar_helpers.py b/ishtar_common/templatetags/ishtar_helpers.py
new file mode 100644
index 000000000..88dd68b57
--- /dev/null
+++ b/ishtar_common/templatetags/ishtar_helpers.py
@@ -0,0 +1,19 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+from datetime import datetime
+
+from django.template import Library
+from django.utils.translation import ugettext as _
+
+register = Library()
+
+
+@register.filter
+def or_(value1, value2):
+ return value1 or value2
+
+
+@register.filter
+def and_(value1, value2):
+ return value1 and value2
diff --git a/ishtar_common/templatetags/window_field.py b/ishtar_common/templatetags/window_field.py
index 46329a3fa..a5bae3b72 100644
--- a/ishtar_common/templatetags/window_field.py
+++ b/ishtar_common/templatetags/window_field.py
@@ -108,6 +108,14 @@ def field_flex_multiple(caption, data, small=False):
return field_multiple(caption, data, size=size)
+@register.inclusion_tag('ishtar/blocks/window_field_flex_multiple_full.html')
+def field_flex_multiple_full(caption, data, small=False):
+ size = None
+ if small:
+ size = 2
+ return field_multiple(caption, data, size=size)
+
+
@register.inclusion_tag('ishtar/blocks/window_field_detail.html')
def field_detail(caption, item, li=False, size=None):
return {'caption': caption, 'item': item, 'link': link_to_window(item),
diff --git a/ishtar_common/templatetags/window_header.py b/ishtar_common/templatetags/window_header.py
index 18dc793bf..bbd923d41 100644
--- a/ishtar_common/templatetags/window_header.py
+++ b/ishtar_common/templatetags/window_header.py
@@ -10,8 +10,17 @@ def window_nav(context, item, window_id, show_url, modify_url='', histo_url='',
extra_actions = []
if hasattr(item, 'get_extra_actions'):
extra_actions = item.get_extra_actions(context['request'])
- if modify_url and hasattr(item, 'can_do') and hasattr(item, 'SLUG') and \
- not item.can_do(context['request'], 'change_' + item.SLUG):
+ extra_templates = []
+ if hasattr(item, 'get_extra_templates'):
+ extra_templates = item.get_extra_templates(context['request'])
+
+ slug = None
+ if hasattr(item, "LONG_SLUG"):
+ slug = item.LONG_SLUG
+ elif hasattr(item, "SLUG"):
+ slug = item.SLUG
+ if modify_url and hasattr(item, 'can_do') and slug and \
+ not item.can_do(context['request'], 'change_' + slug):
modify_url = ""
return {
'show_url': show_url,
@@ -23,7 +32,21 @@ def window_nav(context, item, window_id, show_url, modify_url='', histo_url='',
'previous': previous,
'next': nxt,
'extra_actions': extra_actions,
- 'pin_action': pin_action}
+ 'pin_action': pin_action,
+ 'extra_templates': extra_templates,
+ }
+
+
+@register.inclusion_tag('ishtar/blocks/window_find_nav.html',
+ takes_context=True)
+def window_find_nav(context, item, window_id, show_url, modify_url='',
+ histo_url='', revert_url='', previous=None, nxt=None,
+ pin_action=False, baskets=None):
+ dct = window_nav(context, item, window_id, show_url, modify_url=modify_url,
+ histo_url=histo_url, revert_url=revert_url,
+ previous=previous, nxt=nxt, pin_action=pin_action)
+ dct['baskets'] = baskets
+ return dct
@register.inclusion_tag('ishtar/blocks/window_file_nav.html',
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index bd1833594..cf9f599c4 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -1235,10 +1235,14 @@ class ShortMenuTest(TestCase):
self.assertFalse(str(tf.cached_label) in response.content)
def _create_treatment(self):
- from archaeological_finds.models import Treatment
+ from archaeological_finds.models import Treatment, TreatmentState
+ completed, created = TreatmentState.objects.get_or_create(
+ txt_idx='completed', defaults={"executed": True, "label": u"Done"}
+ )
return Treatment.objects.create(
label="My treatment",
- year=2052
+ year=2052,
+ treatment_state=completed
)
def test_treatment(self):
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index 8d06b6862..aea419d08 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -174,6 +174,8 @@ urlpatterns += [
views.new_person_noorga, name='new-person-noorga'),
url(r'autocomplete-user/$',
views.autocomplete_user, name='autocomplete-user'),
+ url(r'autocomplete-ishtaruser/$',
+ views.autocomplete_ishtaruser, name='autocomplete-ishtaruser'),
url(r'autocomplete-person(?:/([0-9_]+))?(?:/([0-9_]*))?/(user)?$',
views.autocomplete_person, name='autocomplete-person'),
url(r'autocomplete-person-permissive(?:/([0-9_]+))?(?:/([0-9_]*))?'
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index 4f968af31..ff67fc470 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -145,18 +145,24 @@ def check_model_access_control(request, model, available_perms=None):
return allowed, own
-def update_data(data_1, data_2):
+def update_data(data_1, data_2, merge=False):
"""
Update a data directory taking account of key detail
"""
res = {}
if not isinstance(data_1, dict) or not isinstance(data_2, dict):
+ if data_2 and not data_1:
+ return data_2
+ if not merge:
+ return data_1
+ if data_2 and data_2 != data_1:
+ return data_1 + u" ; " + data_2
return data_1
for k in data_1:
if k not in data_2:
res[k] = data_1[k]
else:
- res[k] = update_data(data_1[k], data_2[k])
+ res[k] = update_data(data_1[k], data_2[k], merge=merge)
for k in data_2:
if k not in data_1:
res[k] = data_2[k]
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 3d64535d4..72418e4fa 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -527,6 +527,29 @@ def autocomplete_user(request):
return HttpResponse(data, content_type='text/plain')
+def autocomplete_ishtaruser(request):
+ if not request.user.has_perm('ishtar_common.view_person', models.Person):
+ return HttpResponse('[]', content_type='text/plain')
+ q = request.GET.get('term', '')
+ limit = request.GET.get('limit', 20)
+ try:
+ limit = int(limit)
+ except ValueError:
+ return HttpResponseBadRequest()
+ query = Q()
+ for q in q.split(' '):
+ qu = (Q(person__name__icontains=q) |
+ Q(person__surname__icontains=q) |
+ Q(person__raw_name__icontains=q))
+ query = query & qu
+ users = models.IshtarUser.objects.filter(query)[:limit]
+ data = json.dumps([
+ {'id': user.pk,
+ 'value': unicode(user)}
+ for user in users])
+ return HttpResponse(data, content_type='text/plain')
+
+
def autocomplete_person(request, person_types=None, attached_to=None,
is_ishtar_user=None, permissive=False):
all_items = request.user.has_perm('ishtar_common.view_person',
@@ -1754,6 +1777,32 @@ def get_bookmark(request, pk):
)
+def gen_generate_doc(model):
+
+ def func(request, pk, template_pk=None):
+ if not request.user.has_perm('view_' + model.SLUG, model):
+ return HttpResponse(content_type='text/plain')
+ try:
+ item = model.objects.get(pk=pk)
+ doc = item.publish(template_pk)
+ except model.DoesNotExist:
+ doc = None
+ if doc:
+ MIMES = {'odt': 'application/vnd.oasis.opendocument.text',
+ 'ods': 'application/vnd.oasis.opendocument.spreadsheet'}
+ ext = doc.split('.')[-1]
+ doc_name = item.get_filename() + "." + ext
+ mimetype = 'text/csv'
+ if ext in MIMES:
+ mimetype = MIMES[ext]
+ response = HttpResponse(open(doc), content_type=mimetype)
+ response['Content-Disposition'] = 'attachment; filename=%s' % \
+ doc_name
+ return response
+ return HttpResponse(content_type='text/plain')
+ return func
+
+
class SearchQueryMixin(object):
"""
Manage content type and profile init
@@ -1978,3 +2027,5 @@ class QAItemEditForm(QAItemForm):
def form_save(self, form):
form.save(self.items, self.request.user)
return HttpResponseRedirect(reverse("success"))
+
+
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index cde3f8d87..6f4abdee9 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -22,7 +22,8 @@ from django.db.models.fields import FieldDoesNotExist
from django.http import HttpResponse
from django.shortcuts import render
from django.template import loader
-from django.utils.translation import ugettext, ugettext_lazy as _
+from django.utils.translation import ugettext, ugettext_lazy as _, \
+ activate, deactivate, pgettext_lazy
from tidylib import tidy_document as tidy
from unidecode import unidecode
from weasyprint import HTML, CSS
@@ -65,17 +66,29 @@ CURRENT_ITEM_KEYS = (
CURRENT_ITEM_KEYS_DICT = dict(CURRENT_ITEM_KEYS)
+def get_autocomplete_query(request, label_attributes, extra=None):
+ q = request.GET.get('term') or ""
+ if not label_attributes:
+ return Q(pk__isnull=True)
+ query = Q()
+ if extra:
+ query = Q(**extra)
+ for q in q.split(' '):
+ if not q:
+ continue
+ sub_q = Q(**{label_attributes[0] + "__icontains": q})
+ for other_label in label_attributes[1:]:
+ sub_q = sub_q | Q(**{other_label + "__icontains": q})
+ query = query & sub_q
+ return query
+
+
def get_autocomplete_item(model, extra=None):
if not extra:
extra = {}
def func(request, current_right=None):
- q = request.GET.get('term') or ""
- query = Q(**extra)
- for q in q.split(' '):
- if not q:
- continue
- query = query & Q(cached_label__icontains=q)
+ query = get_autocomplete_query(request, ['cached_label'], extra=extra)
limit = 20
objects = model.objects.filter(query)[:limit]
data = json.dumps([{'id': obj.pk, 'value': obj.cached_label}
@@ -133,22 +146,25 @@ def display_item(model, extra_dct=None, show_url=None):
return func
-def show_item(model, name, extra_dct=None):
+def show_item(model, name, extra_dct=None, model_for_perms=None):
def func(request, pk, **dct):
- allowed, own = check_model_access_control(request, model)
+ check_model = model
+ if model_for_perms:
+ check_model = model_for_perms
+ allowed, own = check_model_access_control(request, check_model)
if not allowed:
return HttpResponse('', content_type="application/xhtml")
q = model.objects
if own:
if not hasattr(request.user, 'ishtaruser'):
- return HttpResponse('NOK')
+ return HttpResponse('')
query_own = model.get_query_owns(request.user.ishtaruser)
if query_own:
q = q.filter(query_own).distinct()
try:
item = q.get(pk=pk)
- except ObjectDoesNotExist:
- return HttpResponse('NOK')
+ except (ObjectDoesNotExist, ValueError):
+ return HttpResponse('')
doc_type = 'type' in dct and dct.pop('type')
url_name = u"/".join(reverse('show-' + name, args=['0', '']
).split('/')[:-2]) + u"/"
@@ -325,6 +341,12 @@ def _push_to_list(obj, current_group, depth):
current_group.append(obj)
+def is_true_string(val):
+ val = unicode(val).lower().replace(u'"', u"")
+ if val in (u"1", u"true", unicode(_(u"True")).lower()):
+ return True
+
+
def _parse_parentheses(s):
"""
Parse parentheses into list.
@@ -368,14 +390,31 @@ def _parse_query_string(string, request_keys, current_dct, exc_dct):
if excluded:
term = term[1:]
if term in request_keys:
- term = request_keys[term]
dct = current_dct
- if excluded:
- dct = exc_dct
- if term in dct:
- dct[term] += u";" + query
+ term = request_keys[term]
+ # callable request key for complex queries
+ if callable(term):
+ is_true = is_true_string(query)
+ if excluded:
+ is_true = not is_true
+ cfltr, cexclude, cextra = term(is_true=is_true)
+ if cfltr:
+ if 'and_reqs' not in dct:
+ dct['and_reqs'] = []
+ dct['and_reqs'].append(cfltr)
+ if cexclude:
+ if 'exc_and_reqs' not in dct:
+ dct['exc_and_reqs'] = []
+ dct['exc_and_reqs'].append(cexclude)
+ if cextra:
+ dct['extras'].append(cextra)
else:
- dct[term] = query
+ if excluded:
+ dct = exc_dct
+ if term in dct:
+ dct[term] += u";" + query
+ else:
+ dct[term] = query
return u""
for reserved_char in FORBIDDEN_CHAR:
string = string.replace(reserved_char, u"")
@@ -487,6 +526,8 @@ def _search_manage_search_vector(model, dct, exc_dct, request_keys):
search_query = \
search_query.replace(u'(', u'').replace(u')', u'').strip()
if search_query:
+ if 'extras' not in dct:
+ dct['extras'] = []
dct['extras'].append(
{'where': [model._meta.db_table +
".search_vector @@ (to_tsquery(%s, %s)) = true"],
@@ -526,13 +567,47 @@ def _manage_bool_fields(model, bool_fields, reversed_bool_fields, dct, or_reqs):
pass
+today_lbl = pgettext_lazy("key for text search", u"today"),
+TODAYS = ['today']
+
+for language_code, language_lbl in settings.LANGUAGES:
+ activate(language_code)
+ TODAYS.append(unicode(today_lbl))
+ deactivate()
+
+
def _manage_dated_fields(dated_fields, dct):
for k in dated_fields:
if k in dct:
if not dct[k]:
dct.pop(k)
+ continue
+ value = dct[k].replace('"', '').strip()
+ has_today = False
+ for today in TODAYS:
+ if value.startswith(today):
+ base_date = datetime.date.today()
+ value = value[len(today):].replace(' ', '')
+ if value and value[0] in (u"-", u"+"):
+ sign = value[0]
+ try:
+ days = int(value[1:])
+ except ValueError:
+ days = 0
+ if days:
+ if sign == u"-":
+ base_date = base_date - datetime.timedelta(
+ days=days)
+ else:
+ base_date = base_date + datetime.timedelta(
+ days=days)
+ dct[k] = base_date.strftime('%Y-%m-%d')
+ has_today = True
+ break
+ if has_today:
+ continue
try:
- items = dct[k].replace('"', '').split('/')
+ items = value.split('/')
assert len(items) == 3
dct[k] = virtualtime.datetime(*map(lambda x: int(x),
reversed(items))) \
@@ -795,7 +870,12 @@ def _construct_query(relation_types, dct, or_reqs, and_reqs):
query |= Q(**alt_dct)
query = _manage_relation_types(relation_types, dct, query, or_reqs)
+ done = []
for and_req in and_reqs:
+ str_q = unicode(and_req)
+ if str_q in done:
+ continue
+ done.append(str_q)
query = query & and_req
return query
@@ -880,11 +960,13 @@ DEFAULT_ROW_NUMBER = 10
EXCLUDED_FIELDS = ['length']
-def get_item(model, func_name, default_name, extra_request_keys=[],
- base_request=None, bool_fields=[], reversed_bool_fields=[],
- dated_fields=[], associated_models=[], relative_session_names=[],
- specific_perms=[], own_table_cols=None, relation_types_prefix={},
- do_not_deduplicate=False):
+def get_item(model, func_name, default_name, extra_request_keys=None,
+ base_request=None, bool_fields=None, reversed_bool_fields=None,
+ dated_fields=None, associated_models=None,
+ relative_session_names=None, specific_perms=None,
+ own_table_cols=None, relation_types_prefix=None,
+ do_not_deduplicate=False, model_for_perms=None,
+ alt_query_own=None):
"""
Generic treatment of tables
@@ -904,6 +986,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
:param do_not_deduplicate: duplication of id can occurs on large queryset a
mecanism of deduplication is used. But duplicate ids can be normal (for
instance for record_relations view).
+ :param model_for_perms: use another model to check permission
+ :param alt_query_own: name of alternate method to get query_own
:return:
"""
def func(request, data_type='json', full=False, force_own=False,
@@ -915,10 +999,15 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
if 'type' in dct:
data_type = dct.pop('type')
if not data_type:
- EMPTY = '[]'
data_type = 'json'
+ if data_type == "json":
+ EMPTY = '[]'
- allowed, own = check_model_access_control(request, model,
+ model_to_check = model
+ if model_for_perms:
+ model_to_check = model_for_perms
+
+ allowed, own = check_model_access_control(request, model_to_check,
available_perms)
if not allowed:
return HttpResponse(EMPTY, content_type='text/plain')
@@ -934,13 +1023,16 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
q = models.IshtarUser.objects.filter(user_ptr=request.user)
if not q.count():
return HttpResponse(EMPTY, content_type='text/plain')
- query_own = model.get_query_owns(q.all()[0])
+ if alt_query_own:
+ query_own = getattr(model, alt_query_own)(q.all()[0])
+ else:
+ query_own = model.get_query_owns(q.all()[0])
# get defaults from model
if not extra_request_keys and hasattr(model, 'EXTRA_REQUEST_KEYS'):
my_extra_request_keys = copy(model.EXTRA_REQUEST_KEYS)
else:
- my_extra_request_keys = copy(extra_request_keys)
+ my_extra_request_keys = copy(extra_request_keys or [])
if base_request is None and hasattr(model, 'BASE_REQUEST'):
if callable(model.BASE_REQUEST):
my_base_request = model.BASE_REQUEST(request)
@@ -953,32 +1045,35 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
if not bool_fields and hasattr(model, 'BOOL_FIELDS'):
my_bool_fields = model.BOOL_FIELDS[:]
else:
- my_bool_fields = bool_fields[:]
+ my_bool_fields = bool_fields[:] if bool_fields else []
if not reversed_bool_fields and hasattr(model, 'REVERSED_BOOL_FIELDS'):
my_reversed_bool_fields = model.REVERSED_BOOL_FIELDS[:]
else:
- my_reversed_bool_fields = reversed_bool_fields[:]
+ my_reversed_bool_fields = reversed_bool_fields[:] \
+ if reversed_bool_fields else []
if not dated_fields and hasattr(model, 'DATED_FIELDS'):
my_dated_fields = model.DATED_FIELDS[:]
else:
- my_dated_fields = dated_fields[:]
+ my_dated_fields = dated_fields[:] if dated_fields else []
if not associated_models and hasattr(model, 'ASSOCIATED_MODELS'):
my_associated_models = model.ASSOCIATED_MODELS[:]
else:
- my_associated_models = associated_models[:]
+ my_associated_models = associated_models[:] \
+ if associated_models else []
if not relative_session_names and hasattr(model,
'RELATIVE_SESSION_NAMES'):
my_relative_session_names = model.RELATIVE_SESSION_NAMES[:]
else:
- my_relative_session_names = relative_session_names[:]
+ my_relative_session_names = relative_session_names[:] \
+ if relative_session_names else []
if not relation_types_prefix and hasattr(model,
'RELATION_TYPES_PREFIX'):
my_relation_types_prefix = copy(model.RELATION_TYPES_PREFIX)
else:
- my_relation_types_prefix = copy(relation_types_prefix)
+ my_relation_types_prefix = copy(relation_types_prefix) \
+ if relation_types_prefix else {}
- fields = [model._meta.get_field(k)
- for k in get_all_field_names(model)]
+ fields = [model._meta.get_field(k) for k in get_all_field_names(model)]
request_keys = dict([
(field.name,
@@ -1039,6 +1134,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
excluded_dct = {}
and_reqs, or_reqs = [], []
exc_and_reqs, exc_or_reqs = [], []
+ dct['extras'], dct['and_reqs'], dct['exc_and_reqs'] = [], [], []
if full == 'shortcut':
if model.SLUG == "warehouse":
@@ -1057,7 +1153,10 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
if not val:
continue
req_keys = request_keys[k]
- if type(req_keys) not in (list, tuple):
+ if callable(req_keys):
+ # callable request key for complex queries not managed on GET
+ continue
+ elif type(req_keys) not in (list, tuple):
dct[req_keys] = val
continue
# multiple choice target
@@ -1080,7 +1179,6 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
else:
request.session[func_name] = dct
- dct['extras'] = []
dct, excluded_dct = _search_manage_search_vector(
model, dct, excluded_dct, request_keys)
search_vector = ""
@@ -1116,7 +1214,13 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
_manage_facet_search(model, dct, and_reqs)
_manage_facet_search(model, excluded_dct, exc_and_reqs)
- extras = dct.pop('extras')
+ extras = []
+ if 'extras' in dct:
+ extras = dct.pop('extras')
+ if 'and_reqs' in dct:
+ and_reqs += dct.pop('and_reqs')
+ if 'exc_and_reqs' in dct:
+ exc_and_reqs += dct.pop('exc_and_reqs')
_manage_clean_search_field(dct)
_manage_clean_search_field(excluded_dct)
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py
index 7d9e06926..5853c9675 100644
--- a/ishtar_common/widgets.py
+++ b/ishtar_common/widgets.py
@@ -224,6 +224,10 @@ class Select2Base(Select2Media):
else:
attrs['style'] = "width: 370px"
+ if value:
+ if type(value) not in (list, tuple):
+ value = value.split(',')
+
options = ""
if self.remote:
options = """{
@@ -248,8 +252,6 @@ class Select2Base(Select2Media):
}""" % self.remote
if value:
choices = []
- if type(value) not in (list, tuple):
- value = value.split(',')
for v in value:
try:
choices.append((v, self.model.objects.get(pk=v)))
@@ -300,7 +302,7 @@ class CheckboxSelectMultiple(CheckboxSelectMultipleBase):
def render(self, name, value, attrs=None, choices=()):
if type(value) in (str, unicode):
value = value.split(',')
- if type(value) not in (list, tuple):
+ if not isinstance(value, (list, tuple)):
value = [value]
return super(CheckboxSelectMultiple, self).render(name, value, attrs)
@@ -356,6 +358,14 @@ class Select2BaseField(object):
class Select2MultipleField(Select2BaseField, forms.MultipleChoiceField):
multiple = True
+ def to_python(self, value):
+ if not isinstance(value, (list, tuple)):
+ if value:
+ value = value.split(',')
+ else:
+ value = []
+ return super(Select2MultipleField, self).to_python(value)
+
class Select2SimpleField(Select2BaseField, forms.ChoiceField):
pass
@@ -470,6 +480,36 @@ class SquareMeterWidget(forms.TextInput):
return mark_safe(rendered)
+class GramKilogramWidget(forms.TextInput):
+ def render(self, name, value, attrs=None, renderer=None):
+ if not value:
+ value = u""
+ final_attrs = flatatt(
+ self.build_attrs(attrs, {"name": name, "value": value}))
+ dct = {'final_attrs': final_attrs,
+ 'unit': u"g",
+ 'id': attrs['id'],
+ "safe_id": attrs['id'].replace('-', '_')}
+ t = loader.get_template('blocks/GramKilogramWidget.html')
+ rendered = t.render(dct)
+ return mark_safe(rendered)
+
+
+class CentimeterMeterWidget(forms.TextInput):
+ def render(self, name, value, attrs=None, renderer=None):
+ if not value:
+ value = u""
+ final_attrs = flatatt(
+ self.build_attrs(attrs, {"name": name, "value": value}))
+ dct = {'final_attrs': final_attrs,
+ 'unit': u"cm",
+ 'id': attrs['id'],
+ "safe_id": attrs['id'].replace('-', '_')}
+ t = loader.get_template('blocks/CentimeterMeterWidget.html')
+ rendered = t.render(dct)
+ return mark_safe(rendered)
+
+
AreaWidget = forms.TextInput
if settings.SURFACE_UNIT == 'square-metre':
@@ -927,7 +967,7 @@ class DataTable(Select2Media, forms.RadioSelect):
:param new:
:param new_message:
:param source_full: url to get full listing
- :param multiple_select:
+ :param multiple_select: select multiple is available
:param sortname: column name (model attribute) to use to sort
:param col_prefix: prefix to remove to col_names
"""
@@ -1055,7 +1095,6 @@ class DataTable(Select2Media, forms.RadioSelect):
if hasattr(self.associated_model, "QUICK_ACTIONS"):
dct['quick_actions'] = \
self.associated_model.get_quick_actions(user=self.user)
- self.multiple_select = True
source = unicode(self.source)
dct.update({'name': name,
'col_names': col_names,
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index a439cc014..47355dd06 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -23,6 +23,7 @@ import os
# from functools import wraps
from django.conf import settings
+from django.contrib import messages
from formtools.wizard.views import NamedUrlWizardView, normalize_name, \
get_storage, StepsHelper
@@ -115,6 +116,7 @@ class Wizard(IshtarWizard):
)
main_item_select_keys = ('selec-',)
formset_pop_deleted = True
+ alt_is_own_method = None # alternate method name for "is_own" check
saved_args = {} # argument to pass on object save
@@ -145,29 +147,39 @@ class Wizard(IshtarWizard):
form, other_check)
return kwargs
+ def check_own_permissions(self, request, step=None, *args, **kwargs):
+ # reinit default dispatch of a wizard - not clean...
+ self.request = request
+ self.session = request.session
+ self.prefix = self.get_prefix(request, *args, **kwargs)
+ self.storage = get_storage(
+ self.storage_name, self.prefix, request,
+ getattr(self, 'file_storage', None))
+ self.steps = StepsHelper(self)
+
+ current_object = self.get_current_object()
+ ishtaruser = request.user.ishtaruser \
+ if hasattr(request.user, 'ishtaruser') else None
+
+ # not the first step and current object is not owned
+ if self.steps and self.steps.first != step and current_object:
+ is_own = current_object.is_own(
+ ishtaruser, alt_query_own=self.alt_is_own_method)
+ if not is_own:
+ messages.add_message(
+ request, messages.WARNING,
+ _(u"Permission error: you cannot do this action.")
+ )
+ self.session_reset(request, self.url_name)
+ return
+ return True
+
def dispatch(self, request, *args, **kwargs):
self.current_right = kwargs.get('current_right', None)
step = kwargs.get('step', None)
# check that the current object is really owned by the current user
if step and self.current_right and '_own_' in self.current_right:
-
- # reinit default dispatch of a wizard - not clean...
- self.request = request
- self.session = request.session
- self.prefix = self.get_prefix(request, *args, **kwargs)
- self.storage = get_storage(
- self.storage_name, self.prefix, request,
- getattr(self, 'file_storage', None))
- self.steps = StepsHelper(self)
-
- current_object = self.get_current_object()
- ishtaruser = request.user.ishtaruser \
- if hasattr(request.user, 'ishtaruser') else None
-
- # not the fisrt step and current object is not owned
- if self.steps and self.steps.first != step and\
- current_object and not current_object.is_own(ishtaruser):
- self.session_reset(request, self.url_name)
+ if not self.check_own_permissions(request, *args, **kwargs):
return HttpResponseRedirect('/')
# extra filter on forms
self.filter_owns_items = True
@@ -439,7 +451,7 @@ class Wizard(IshtarWizard):
datas.append((form.form_label, form_datas))
return datas
- def get_extra_model(self, dct, form_list):
+ def get_extra_model(self, dct, m2m, form_list):
dct['history_modifier'] = self.request.user
return dct
@@ -552,7 +564,7 @@ class Wizard(IshtarWizard):
def save_model(self, dct, m2m, whole_associated_models, form_list,
return_object):
- dct = self.get_extra_model(dct, form_list)
+ dct = self.get_extra_model(dct, m2m, form_list)
obj = self.get_current_saved_object()
data = {}
if obj and hasattr(obj, 'data'):
@@ -1181,7 +1193,7 @@ class Wizard(IshtarWizard):
return vals
def get_current_object(self):
- """Get the current object for an instancied wizard"""
+ """Get the current object for an instanced wizard"""
current_obj = None
for key in self.main_item_select_keys:
main_form_key = key + self.url_name
@@ -1787,8 +1799,8 @@ class AccountWizard(Wizard):
class SourceWizard(Wizard):
model = None
- def get_extra_model(self, dct, form_list):
- dct = super(SourceWizard, self).get_extra_model(dct, form_list)
+ def get_extra_model(self, dct, m2m, form_list):
+ dct = super(SourceWizard, self).get_extra_model(dct, m2m, form_list)
if 'history_modifier' in dct:
dct.pop('history_modifier')
return dct