diff --git a/djangocms_bootstrap4/constants.py b/djangocms_bootstrap4/constants.py index 05b56d8a..019ae157 100644 --- a/djangocms_bootstrap4/constants.py +++ b/djangocms_bootstrap4/constants.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ DEVICE_CHOICES = ( diff --git a/djangocms_bootstrap4/contrib/bootstrap4_alerts/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_alerts/cms_plugins.py index adcf8699..3db756e9 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_alerts/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_alerts/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_alerts/migrations/0002_alter_bootstrap4alerts_cmsplugin_ptr.py b/djangocms_bootstrap4/contrib/bootstrap4_alerts/migrations/0002_alter_bootstrap4alerts_cmsplugin_ptr.py new file mode 100644 index 00000000..1c083884 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_alerts/migrations/0002_alter_bootstrap4alerts_cmsplugin_ptr.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_alerts", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4alerts", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_alerts/models.py b/djangocms_bootstrap4/contrib/bootstrap4_alerts/models.py index fe5fee24..62b95219 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_alerts/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_alerts/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin diff --git a/djangocms_bootstrap4/contrib/bootstrap4_badge/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_badge/cms_plugins.py index 4478c741..eda1a942 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_badge/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_badge/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_badge/migrations/0002_alter_bootstrap4badge_cmsplugin_ptr.py b/djangocms_bootstrap4/contrib/bootstrap4_badge/migrations/0002_alter_bootstrap4badge_cmsplugin_ptr.py new file mode 100644 index 00000000..104fdd7f --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_badge/migrations/0002_alter_bootstrap4badge_cmsplugin_ptr.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_badge", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4badge", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_badge/models.py b/djangocms_bootstrap4/contrib/bootstrap4_badge/models.py index eee5c8f8..09e22e99 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_badge/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_badge/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin diff --git a/djangocms_bootstrap4/contrib/bootstrap4_card/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_card/cms_plugins.py index 81f3b13c..104b78bb 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_card/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_card/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_card/constants.py b/djangocms_bootstrap4/contrib/bootstrap4_card/constants.py index 5f61bf5b..a3bca5d3 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_card/constants.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_card/constants.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ CARD_TYPE_CHOICES = ( diff --git a/djangocms_bootstrap4/contrib/bootstrap4_card/migrations/0002_alter_bootstrap4card_cmsplugin_ptr_and_more.py b/djangocms_bootstrap4/contrib/bootstrap4_card/migrations/0002_alter_bootstrap4card_cmsplugin_ptr_and_more.py new file mode 100644 index 00000000..aa18236a --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_card/migrations/0002_alter_bootstrap4card_cmsplugin_ptr_and_more.py @@ -0,0 +1,41 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_card", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4card", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4cardinner", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_card/models.py b/djangocms_bootstrap4/contrib/bootstrap4_card/models.py index bd36bee9..f727ecad 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_card/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_card/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin diff --git a/djangocms_bootstrap4/contrib/bootstrap4_carousel/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_carousel/cms_plugins.py index fc649589..c3166bae 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_carousel/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_carousel/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_carousel/constants.py b/djangocms_bootstrap4/contrib/bootstrap4_carousel/constants.py index d76c1f62..fbb78f85 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_carousel/constants.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_carousel/constants.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ CAROUSEL_PAUSE_CHOICES = ( diff --git a/djangocms_bootstrap4/contrib/bootstrap4_carousel/models.py b/djangocms_bootstrap4/contrib/bootstrap4_carousel/models.py index 595472cb..30ca77fe 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_carousel/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_carousel/models.py @@ -5,7 +5,7 @@ from django.db import models from django.utils.html import strip_tags -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin diff --git a/djangocms_bootstrap4/contrib/bootstrap4_collapse/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_collapse/cms_plugins.py index 41ea6b0e..fa29f654 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_collapse/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_collapse/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_collapse/migrations/0002_alter_bootstrap4collapse_cmsplugin_ptr_and_more.py b/djangocms_bootstrap4/contrib/bootstrap4_collapse/migrations/0002_alter_bootstrap4collapse_cmsplugin_ptr_and_more.py new file mode 100644 index 00000000..211c1633 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_collapse/migrations/0002_alter_bootstrap4collapse_cmsplugin_ptr_and_more.py @@ -0,0 +1,54 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_collapse", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4collapse", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4collapsecontainer", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4collapsetrigger", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_collapse/models.py b/djangocms_bootstrap4/contrib/bootstrap4_collapse/models.py index 14d42853..94b76f04 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_collapse/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_collapse/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin diff --git a/djangocms_bootstrap4/contrib/bootstrap4_content/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_content/cms_plugins.py index 589d0c9e..ef4ff791 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_content/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_content/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_content/constants.py b/djangocms_bootstrap4/contrib/bootstrap4_content/constants.py index 326c9144..08672e18 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_content/constants.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_content/constants.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ CODE_TYPE_CHOICES = ( diff --git a/djangocms_bootstrap4/contrib/bootstrap4_content/migrations/0003_add_field_origin_subtext.py b/djangocms_bootstrap4/contrib/bootstrap4_content/migrations/0003_add_field_origin_subtext.py new file mode 100644 index 00000000..aabfe28d --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_content/migrations/0003_add_field_origin_subtext.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.4 on 2021-01-07 23:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_content', '0002_added_figure'), + ] + + operations = [ + migrations.AddField( + model_name='bootstrap4blockquote', + name='quote_origin_subtext', + field=models.CharField(blank=True, max_length=256, verbose_name='Cite subtext'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_content/migrations/0004_alter_bootstrap4blockquote_cmsplugin_ptr_and_more.py b/djangocms_bootstrap4/contrib/bootstrap4_content/migrations/0004_alter_bootstrap4blockquote_cmsplugin_ptr_and_more.py new file mode 100644 index 00000000..681d5c65 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_content/migrations/0004_alter_bootstrap4blockquote_cmsplugin_ptr_and_more.py @@ -0,0 +1,54 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_content", "0003_add_field_origin_subtext"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4blockquote", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4code", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4figure", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_content/models.py b/djangocms_bootstrap4/contrib/bootstrap4_content/models.py index c44db684..812efc27 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_content/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_content/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin @@ -51,6 +51,11 @@ class Bootstrap4Blockquote(CMSPlugin): verbose_name=_('Cite'), blank=True, ) + quote_origin_subtext = models.CharField( + verbose_name=_('Cite subtext'), + blank=True, + max_length=256, + ) quote_alignment = models.CharField( verbose_name=_('Alignment'), choices=ALIGN_CHOICES, diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/cms_plugins.py index 40ba4504..ca1daa2f 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_grid/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/cms_plugins.py @@ -1,12 +1,15 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from cms.models import CMSPlugin +from cms.utils.plugins import get_plugin_model +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool from djangocms_bootstrap4.constants import DEVICE_SIZES +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_CONTAINER_FIELDSETS from djangocms_bootstrap4.helpers import concat_classes from .forms import Bootstrap4GridColumnForm, Bootstrap4GridRowForm @@ -25,32 +28,30 @@ class Bootstrap4GridContainerPlugin(CMSPluginBase): module = _('Bootstrap 4') render_template = 'djangocms_bootstrap4/grid_container.html' allow_children = True + css_class = 'container-plugin' + fieldsets = GRID_CONTAINER_FIELDSETS - fieldsets = [ - (None, { - 'fields': ( - 'container_type', - ) - }), - (_('Advanced settings'), { - 'classes': ('collapse',), - 'fields': ( - 'tag_type', - 'attributes', - ) - }), - ] - - def render(self, context, instance, placeholder): + def render(self, context, instance: Bootstrap4GridContainer, placeholder): classes = concat_classes([ - instance.container_type, + self.css_class, + 'container-fluid', instance.attributes.get('class'), ]) instance.attributes['class'] = classes - return super(Bootstrap4GridContainerPlugin, self).render( - context, instance, placeholder - ) + instance.attributes['data-width'] = instance.width.value + instance.attributes['data-spacing-vertical-external'] = instance.spacing_vertical_external.value + instance.attributes['data-spacing-vertical-internal'] = instance.spacing_vertical_internal.value + instance.attributes['data-spacing-horizontal'] = instance.spacing_horizontal.value + instance.attributes['data-background'] = instance.background.value + + return super().render(context, instance, placeholder) + + @classmethod + def get_child_ckeditor_body_css_class(cls, plugin: CMSPlugin) -> str: + plugin_model = get_plugin_model(plugin.plugin_type) + instance: Bootstrap4GridContainer = plugin_model.objects.get(pk=plugin.pk) + return f'{cls.css_class} {cls.css_class}--{instance.background.value}' class Bootstrap4GridRowPlugin(CMSPluginBase): @@ -66,12 +67,14 @@ class Bootstrap4GridRowPlugin(CMSPluginBase): render_template = 'djangocms_bootstrap4/grid_row.html' allow_children = True child_classes = ['Bootstrap4GridColumnPlugin'] + css_class = 'row-plugin' fieldsets = [ (None, { 'fields': ( 'create', ('vertical_alignment', 'horizontal_alignment'), + 'gutters_vertical', ) }), (_('Advanced settings'), { @@ -102,10 +105,11 @@ def save_model(self, request, obj, form, change): ) obj.add_child(instance=col) - def render(self, context, instance, placeholder): + def render(self, context, instance: Bootstrap4GridRow, placeholder): gutter = 'no-gutters' if instance.gutters else '' classes = concat_classes([ 'row', + f'{self.css_class}--gutters-vertical-{instance.gutters_vertical.value}', instance.vertical_alignment, instance.horizontal_alignment, gutter, @@ -137,9 +141,11 @@ class Bootstrap4GridColumnPlugin(CMSPluginBase): fieldsets = [ (None, { - 'fields': ( - ('column_type', 'column_alignment'), - ) + 'fields': [ + 'column_type', + 'column_alignment', + 'horizontal_alignment', + ], }), (_('Responsive settings'), { 'fields': ( @@ -170,6 +176,7 @@ def render(self, context, instance, placeholder): instance.column_type, column, instance.column_alignment, + instance.horizontal_alignment, instance.attributes.get('class'), ]) instance.attributes['class'] = attr_classes diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/constants.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/constants.py index 11220f58..c3ec699b 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_grid/constants.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/constants.py @@ -2,7 +2,8 @@ from __future__ import unicode_literals from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ +from enumfields import Enum # The default grid size for Bootstrap 4 is 12. You can change this setting @@ -14,17 +15,91 @@ 12, ) -# Bootstrap 4 provides 2 container types, .container and .container-fluid -# https://getbootstrap.com/docs/4.0/layout/grid/#no-gutters -GRID_CONTAINER_CHOICES = getattr( + +class GridContainerType(Enum): + DYNAMIC_WIDTH = 'container' + FULL_WIDTH = 'container-fluid' + + +GRID_CONTAINER_TYPE: GridContainerType = getattr( settings, - 'DJANGOCMS_BOOTSTRAP4_GRID_CONTAINERS', - ( - ('container', _('Container')), - ('container-fluid', _('Fluid container')), - ), + 'DJANGOCMS_BOOTSTRAP4_GRID_CONTAINER_TYPE', + GridContainerType, +) + + +container_fieldsets_default = [ + (None, { + 'fields': ( + 'name', + 'width', + 'background', + ('spacing_vertical_external', 'spacing_vertical_internal'), + 'spacing_horizontal', + ), + }), + (_('Advanced settings'), { + 'classes': ['collapse'], + 'fields': ( + 'tag_type', + 'attributes', + ), + }), +] + +GRID_CONTAINER_FIELDSETS = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_GRID_CONTAINER_FIELDSETS', + container_fieldsets_default, ) + +class GridContainerWidthInternal(Enum): + FULL_WIDTH = 'full-width' + + +GRID_CONTAINER_WIDTH_INTERNAL: GridContainerWidthInternal = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_GRID_CONTAINER_WIDTH_INTERNAL', + GridContainerWidthInternal, +) + + +class GridContainerBackground(Enum): + NONE = 'background-none' + + +GRID_CONTAINER_BACKGROUND: GridContainerBackground = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_GRID_CONTAINER_BACKGROUND', + GridContainerBackground, +) + + +class GridContainerVerticalSpacingInternal(Enum): + NONE = 'none' + + +GRID_CONTAINER_VERTICAL_SPACING_INTERNAL: GridContainerVerticalSpacingInternal = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_GRID_CONTAINER_VERTICAL_SPACING_INTERNAL', + GridContainerVerticalSpacingInternal, +) + + +GRID_CONTAINER_VERTICAL_SPACING_EXTERNAL: GridContainerVerticalSpacingInternal = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_GRID_CONTAINER_VERTICAL_SPACING_EXTERNAL', + GridContainerVerticalSpacingInternal, +) + +GRID_CONTAINER_HORIZONTAL_SPACING: GridContainerVerticalSpacingInternal = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_GRID_CONTAINER_HORIZONTAL_SPACING', + GridContainerVerticalSpacingInternal, +) + + # Options for flexbox on the alignment of the grid # https://flexbox.webflow.com/ GRID_ROW_VERTICAL_ALIGNMENT_CHOICES = ( @@ -47,6 +122,13 @@ ('align-self-end', _('Align self end')), ) +GRID_COLUMN_HORIZONTAL_ALIGNMENT_CHOICES = ( + ('align-items-start', _('Align items start')), + ('align-items-center', _('Align items center')), + ('align-items-end', _('Align items end')), + ('align-items-stretch', _('Align items stretch')), +) + GRID_COLUMN_CHOICES = getattr( settings, 'DJANGOCMS_BOOTSTRAP4_GRID_COLUMN_CHOICES', @@ -56,3 +138,14 @@ ('', _('Empty')) ), ) + + +# deprecated, left only for migrations +GRID_CONTAINER_CHOICES = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_GRID_CONTAINERS', + ( + ('container', _('Container')), + ('container-fluid', _('Fluid container')), + ), +) diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/forms.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/forms.py index 481dfb50..bcc95c7f 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_grid/forms.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/forms.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.forms import BooleanField, IntegerField, models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from djangocms_bootstrap4.constants import DEVICE_SIZES diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0005_add_name_field_and_use_enum_for_type.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0005_add_name_field_and_use_enum_for_type.py new file mode 100644 index 00000000..1b9c26ae --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0005_add_name_field_and_use_enum_for_type.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.12 on 2020-05-24 02:55 + +from django.db import migrations, models +import djangocms_bootstrap4.contrib.bootstrap4_grid.constants +import enumfields.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0004_remove_bootstrap4gridcolumn_column_size'), + ] + + operations = [ + migrations.AddField( + model_name='bootstrap4gridcontainer', + name='name', + field=models.CharField(blank=True, help_text='Shown only to the admins in the structure mode for better orientation', max_length=1024, null=True), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='container_type', + field=enumfields.fields.EnumField(default='container', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerType, max_length=255, verbose_name='Container type'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0006_add_fields_background_and_spacing.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0006_add_fields_background_and_spacing.py new file mode 100644 index 00000000..884870cd --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0006_add_fields_background_and_spacing.py @@ -0,0 +1,25 @@ +# Generated by Django 2.2.12 on 2020-05-30 13:23 + +from django.db import migrations +import djangocms_bootstrap4.contrib.bootstrap4_grid.constants +import enumfields.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0005_add_name_field_and_use_enum_for_type'), + ] + + operations = [ + migrations.AddField( + model_name='bootstrap4gridcontainer', + name='background', + field=enumfields.fields.EnumField(default='background-none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerBackground, max_length=255, verbose_name='Background'), + ), + migrations.AddField( + model_name='bootstrap4gridcontainer', + name='spacing', + field=enumfields.fields.EnumField(default='none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerVerticalSpacingInternal, max_length=255, verbose_name='Spacing'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0007_add_field_spacing_vertical_type.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0007_add_field_spacing_vertical_type.py new file mode 100644 index 00000000..f222a081 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0007_add_field_spacing_vertical_type.py @@ -0,0 +1,43 @@ +from django.db import migrations +import djangocms_bootstrap4.contrib.bootstrap4_grid.models +import djangocms_bootstrap4.contrib.bootstrap4_grid.constants +import enumfields.fields +from enumfields import Enum + + +class SpacingVerticalType(Enum): + """ + for backward migration compatibility + """ + MARGIN = 'margin' + PADDING = 'padding' + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0006_add_fields_background_and_spacing'), + ] + + operations = [ + migrations.AddField( + model_name='bootstrap4gridcontainer', + name='spacing_vertical_type', + field=enumfields.fields.EnumField(default='margin', enum=SpacingVerticalType, max_length=255, verbose_name='Vertical spacing type'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='background', + field=enumfields.fields.EnumField(default='background-none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerBackground, max_length=255, verbose_name='Background'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='container_type', + field=enumfields.fields.EnumField(default='container', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerType, max_length=255, verbose_name='Container width'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='spacing', + field=enumfields.fields.EnumField(default='none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerVerticalSpacingInternal, max_length=255, verbose_name='Vertical spacing'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0008_rename_spacing_to_spacing_vertical.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0008_rename_spacing_to_spacing_vertical.py new file mode 100644 index 00000000..5d88a808 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0008_rename_spacing_to_spacing_vertical.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.13 on 2020-06-10 11:29 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0007_add_field_spacing_vertical_type'), + ] + + operations = [ + migrations.RenameField( + model_name='bootstrap4gridcontainer', + old_name='spacing', + new_name='spacing_vertical', + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0009_add_fields_gutters.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0009_add_fields_gutters.py new file mode 100644 index 00000000..a3c34c47 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0009_add_fields_gutters.py @@ -0,0 +1,23 @@ +from django.db import migrations +import djangocms_bootstrap4.contrib.bootstrap4_grid.models +import enumfields.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0008_rename_spacing_to_spacing_vertical'), + ] + + operations = [ + migrations.AddField( + model_name='bootstrap4gridrow', + name='gutters_horizontal', + field=enumfields.fields.EnumField(default='normal', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.models.GuttersHorizontal, max_length=32), + ), + migrations.AddField( + model_name='bootstrap4gridrow', + name='gutters_vertical', + field=enumfields.fields.EnumField(default='none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.models.GuttersVertical, max_length=32), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0010_drop_field_spacing_vertical_type.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0010_drop_field_spacing_vertical_type.py new file mode 100644 index 00000000..e75bb55b --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0010_drop_field_spacing_vertical_type.py @@ -0,0 +1,15 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0009_add_fields_gutters'), + ] + + operations = [ + migrations.RemoveField( + model_name='bootstrap4gridcontainer', + name='spacing_vertical_type', + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0011_drop_field_spacing_horizontal.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0011_drop_field_spacing_horizontal.py new file mode 100644 index 00000000..540e971f --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0011_drop_field_spacing_horizontal.py @@ -0,0 +1,20 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0010_drop_field_spacing_vertical_type'), + ] + + operations = [ + migrations.RemoveField( + model_name='bootstrap4gridrow', + name='gutters_horizontal', + ), + migrations.AlterField( + model_name='bootstrap4gridrow', + name='gutters', + field=models.BooleanField(default=False, help_text='Removes the horizontal spacing between the columns.', verbose_name='Remove gutters'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0012_add_field_width_internal.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0012_add_field_width_internal.py new file mode 100644 index 00000000..2cb999d7 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0012_add_field_width_internal.py @@ -0,0 +1,36 @@ +# Generated by Django 2.2.13 on 2020-06-15 18:29 + +from django.db import migrations +import djangocms_bootstrap4.contrib.bootstrap4_grid.constants +import djangocms_bootstrap4.contrib.bootstrap4_grid.models +import enumfields.fields + + +class Migration(migrations.Migration): + dependencies = [ + ('bootstrap4_grid', '0011_drop_field_spacing_horizontal'), + ] + + operations = [ + migrations.AddField( + model_name='bootstrap4gridcontainer', + name='width_internal', + field=enumfields.fields.EnumField( + default='full-width', + enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerWidthInternal, + help_text='You can change it eg if you want to have a full-width gray background, but a limited content width within that background', + max_length=255, + verbose_name='Internal width', + ), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='container_type', + field=enumfields.fields.EnumField( + default='container', + enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerType, + max_length=255, + verbose_name='External width', + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0013_alter_field_container_type_with_new_default.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0013_alter_field_container_type_with_new_default.py new file mode 100644 index 00000000..faea907c --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0013_alter_field_container_type_with_new_default.py @@ -0,0 +1,19 @@ +from django.db import migrations +import djangocms_bootstrap4.contrib.bootstrap4_grid.models +import djangocms_bootstrap4.contrib.bootstrap4_grid.constants +import enumfields.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0012_add_field_width_internal'), + ] + + operations = [ + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='container_type', + field=enumfields.fields.EnumField(default='container-fluid', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerType, max_length=255, verbose_name='External width'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0014_add_field_horizontal_alignment_to_column.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0014_add_field_horizontal_alignment_to_column.py new file mode 100644 index 00000000..f5c2a2b7 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0014_add_field_horizontal_alignment_to_column.py @@ -0,0 +1,37 @@ +# Generated by Django 2.2.14 on 2020-08-02 09:11 + +from django.db import migrations, models +import djangocms_bootstrap4.contrib.bootstrap4_grid.models +import enumfields.fields +import djangocms_bootstrap4.contrib.bootstrap4_grid.constants + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0013_alter_field_container_type_with_new_default'), + ] + + operations = [ + migrations.AddField( + model_name='bootstrap4gridcolumn', + name='horizontal_alignment', + field=models.CharField(choices=[('align-items-start', 'Align items start'), ('align-items-center', 'Align items center'), ('align-items-end', 'Align items end'), ('align-items-stretch', 'Align items stretch')], default='align-items-start', help_text='Read more in the documentation.', max_length=255, verbose_name='Horizontal alignment'), + preserve_default=False, + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='spacing_vertical', + field=enumfields.fields.EnumField(default='none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerVerticalSpacingInternal, max_length=255, verbose_name='Vertical spacing'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='width_internal', + field=enumfields.fields.EnumField(default='full-width', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerWidthInternal, max_length=255, verbose_name='Internal content width'), + ), + migrations.AlterField( + model_name='bootstrap4gridrow', + name='gutters_vertical', + field=enumfields.fields.EnumField(default='none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.models.GuttersVertical, help_text='Vertical spacing between the columns inside', max_length=32), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0015_alter_metadata.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0015_alter_metadata.py new file mode 100644 index 00000000..c3ca7c47 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0015_alter_metadata.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.14 on 2020-08-02 09:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0014_add_field_horizontal_alignment_to_column'), + ] + + operations = [ + migrations.AlterField( + model_name='bootstrap4gridcolumn', + name='column_alignment', + field=models.CharField(blank=True, choices=[('align-self-start', 'Align self start'), ('align-self-center', 'Align self center'), ('align-self-end', 'Align self end')], max_length=255, verbose_name='Vertical alignment'), + ), + migrations.AlterField( + model_name='bootstrap4gridcolumn', + name='horizontal_alignment', + field=models.CharField(choices=[('align-items-start', 'Align items start'), ('align-items-center', 'Align items center'), ('align-items-end', 'Align items end'), ('align-items-stretch', 'Align items stretch')], max_length=255, verbose_name='Horizontal alignment'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0016_rename_fields_spacing_vertical_and_width_internal.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0016_rename_fields_spacing_vertical_and_width_internal.py new file mode 100644 index 00000000..cdd61cdb --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0016_rename_fields_spacing_vertical_and_width_internal.py @@ -0,0 +1,25 @@ +# Generated by Django 3.1.4 on 2021-01-20 20:58 + +from django.db import migrations +import djangocms_bootstrap4.contrib.bootstrap4_grid.constants +import enumfields.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0015_alter_metadata'), + ] + + operations = [ + migrations.RenameField( + model_name='bootstrap4gridcontainer', + old_name='spacing_vertical', + new_name='spacing_vertical_external', + ), + migrations.RenameField( + model_name='bootstrap4gridcontainer', + old_name='width_internal', + new_name='width', + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0017_add_fields_for_spacing.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0017_add_fields_for_spacing.py new file mode 100644 index 00000000..e8ea5bd2 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0017_add_fields_for_spacing.py @@ -0,0 +1,35 @@ +# Generated by Django 3.1.4 on 2021-01-20 21:08 + +from django.db import migrations +import djangocms_bootstrap4.contrib.bootstrap4_grid.constants +import enumfields.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0016_rename_fields_spacing_vertical_and_width_internal'), + ] + + operations = [ + migrations.AddField( + model_name='bootstrap4gridcontainer', + name='spacing_horizontal', + field=enumfields.fields.EnumField(default='none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerVerticalSpacingInternal, max_length=255, verbose_name='Horizontal spacing (padding)'), + ), + migrations.AddField( + model_name='bootstrap4gridcontainer', + name='spacing_vertical_internal', + field=enumfields.fields.EnumField(default='none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerVerticalSpacingInternal, max_length=255, verbose_name='Vertical internal spacing'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='spacing_vertical_external', + field=enumfields.fields.EnumField(default='none', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerVerticalSpacingInternal, max_length=255, verbose_name='Vertical external spacing'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='width', + field=enumfields.fields.EnumField(default='full-width', enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerWidthInternal, max_length=255, verbose_name='Width'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0018_auto_20210719_2034.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0018_auto_20210719_2034.py new file mode 100644 index 00000000..e3c4bc32 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0018_auto_20210719_2034.py @@ -0,0 +1,45 @@ +# Generated by Django 3.1.4 on 2021-07-19 18:34 + +import backend.settings +from django.db import migrations, models +import enumfields.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_grid', '0017_add_fields_for_spacing'), + ] + + operations = [ + migrations.AlterField( + model_name='bootstrap4gridcolumn', + name='horizontal_alignment', + field=models.CharField(choices=[('align-items-start', 'Align items start'), ('align-items-center', 'Align items center'), ('align-items-end', 'Align items end'), ('align-items-stretch', 'Align items stretch')], default='align-items-start', max_length=255, verbose_name='Horizontal alignment'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='background', + field=enumfields.fields.EnumField(default='background-none', enum=backend.settings.GridContainerBackground, max_length=255, verbose_name='Background'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='container_type', + field=enumfields.fields.EnumField(default='container-fluid', enum=backend.settings.GridContainerType, max_length=255, verbose_name='External width'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='spacing_vertical_external', + field=enumfields.fields.EnumField(default='spacing-none', enum=backend.settings.GridContainerSpacing, max_length=255, verbose_name='Vertical external spacing'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='spacing_vertical_internal', + field=enumfields.fields.EnumField(default='none', enum=backend.settings.GridVerticalContainerSpacing, max_length=255, verbose_name='Vertical internal spacing'), + ), + migrations.AlterField( + model_name='bootstrap4gridcontainer', + name='width', + field=enumfields.fields.EnumField(default='full-width', enum=backend.settings.GridContainerWidthInternal, max_length=255, verbose_name='Width'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0019_alter_bootstrap4gridcolumn_cmsplugin_ptr_and_more.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0019_alter_bootstrap4gridcolumn_cmsplugin_ptr_and_more.py new file mode 100644 index 00000000..1c72c986 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/migrations/0019_alter_bootstrap4gridcolumn_cmsplugin_ptr_and_more.py @@ -0,0 +1,96 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion +import djangocms_bootstrap4.contrib.bootstrap4_grid.constants +import enumfields.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_grid", "0018_auto_20210719_2034"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4gridcolumn", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4gridcontainer", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4gridcontainer", + name="container_type", + field=enumfields.fields.EnumField( + default="container-fluid", + enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerType, + max_length=255, + verbose_name="External width", + ), + ), + migrations.AlterField( + model_name="bootstrap4gridcontainer", + name="spacing_vertical_external", + field=enumfields.fields.EnumField( + default="none", + enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerVerticalSpacingInternal, + max_length=255, + verbose_name="Vertical external spacing", + ), + ), + migrations.AlterField( + model_name="bootstrap4gridcontainer", + name="spacing_vertical_internal", + field=enumfields.fields.EnumField( + default="none", + enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerVerticalSpacingInternal, + max_length=255, + verbose_name="Vertical internal spacing", + ), + ), + migrations.AlterField( + model_name="bootstrap4gridcontainer", + name="width", + field=enumfields.fields.EnumField( + default="full-width", + enum=djangocms_bootstrap4.contrib.bootstrap4_grid.constants.GridContainerWidthInternal, + max_length=255, + verbose_name="Width", + ), + ), + migrations.AlterField( + model_name="bootstrap4gridrow", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/models.py b/djangocms_bootstrap4/contrib/bootstrap4_grid/models.py index 57fd6366..b34e740a 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_grid/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/models.py @@ -1,27 +1,30 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from functools import partial -from django.db import models -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ungettext - from cms.models import CMSPlugin - +from django.db import models +from django.utils.translation import gettext_lazy as _ +from django.utils.translation import gettext +from enumfields import Enum +from enumfields import EnumField from six import python_2_unicode_compatible from djangocms_bootstrap4.constants import DEVICE_SIZES -from djangocms_bootstrap4.fields import ( - AttributesField, IntegerRangeField, TagTypeField, -) +from djangocms_bootstrap4.fields import AttributesField +from djangocms_bootstrap4.fields import IntegerRangeField +from djangocms_bootstrap4.fields import TagTypeField from djangocms_bootstrap4.helpers import mark_safe_lazy - -from .constants import ( - GRID_COLUMN_ALIGNMENT_CHOICES, GRID_COLUMN_CHOICES, GRID_CONTAINER_CHOICES, - GRID_ROW_HORIZONTAL_ALIGNMENT_CHOICES, GRID_ROW_VERTICAL_ALIGNMENT_CHOICES, - GRID_SIZE, -) +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_COLUMN_HORIZONTAL_ALIGNMENT_CHOICES +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_COLUMN_ALIGNMENT_CHOICES +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_COLUMN_CHOICES +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_CONTAINER_BACKGROUND +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_CONTAINER_HORIZONTAL_SPACING +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_CONTAINER_VERTICAL_SPACING_INTERNAL +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_CONTAINER_VERTICAL_SPACING_EXTERNAL +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_CONTAINER_TYPE +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_CONTAINER_WIDTH_INTERNAL +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_ROW_HORIZONTAL_ALIGNMENT_CHOICES +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_ROW_VERTICAL_ALIGNMENT_CHOICES +from djangocms_bootstrap4.contrib.bootstrap4_grid.constants import GRID_SIZE @python_2_unicode_compatible @@ -30,31 +33,89 @@ class Bootstrap4GridContainer(CMSPlugin): Layout > Grid: "Container" Plugin https://getbootstrap.com/docs/4.0/layout/grid/ """ - container_type = models.CharField( - verbose_name=_('Container type'), - choices=GRID_CONTAINER_CHOICES, - default=GRID_CONTAINER_CHOICES[0][0], + name = models.CharField( + max_length=1024, + null=True, blank=True, + help_text=_('Shown only to the admins in the structure mode for better orientation'), + ) + container_type = EnumField( + GRID_CONTAINER_TYPE, + default=GRID_CONTAINER_TYPE.FULL_WIDTH, + verbose_name=_('External width'), + max_length=255, + ) + width = EnumField( + GRID_CONTAINER_WIDTH_INTERNAL, + default=GRID_CONTAINER_WIDTH_INTERNAL.FULL_WIDTH, + verbose_name=_('Width'), + max_length=255, + ) + background = EnumField( + GRID_CONTAINER_BACKGROUND, + default=GRID_CONTAINER_BACKGROUND.NONE, + verbose_name=_('Background'), + max_length=255, + ) + spacing_vertical_external = EnumField( + GRID_CONTAINER_VERTICAL_SPACING_EXTERNAL, + default=GRID_CONTAINER_VERTICAL_SPACING_EXTERNAL.NONE, + verbose_name=_('Vertical external spacing'), + max_length=255, + ) + spacing_vertical_internal = EnumField( + GRID_CONTAINER_VERTICAL_SPACING_INTERNAL, + default=GRID_CONTAINER_VERTICAL_SPACING_INTERNAL.NONE, + verbose_name=_('Vertical internal spacing'), + max_length=255, + ) + spacing_horizontal = EnumField( + GRID_CONTAINER_HORIZONTAL_SPACING, + default=GRID_CONTAINER_HORIZONTAL_SPACING.NONE, + verbose_name=_('Horizontal spacing (padding)'), max_length=255, - help_text=mark_safe_lazy(_( - 'Defines if the grid should use fixed width (.container) ' - 'or fluid width (.container-fluid).' - )), ) tag_type = TagTypeField() attributes = AttributesField() - def __str__(self): + def __str__(self) -> str: return str(self.pk) - def get_short_description(self): - text = '' - for item in GRID_CONTAINER_CHOICES: - if item[0] == self.container_type: - text = item[1] - return '({})'.format(text) + def get_short_description(self) -> str: + desc: str = '' + if self.name: + desc += f'{self.name} ' + + is_width_selected = self.width != self._meta.get_field('width').get_default() + is_background_selected = self.background != self._meta.get_field('background').get_default() + if is_background_selected or is_width_selected: + desc += '[' + if is_background_selected and is_width_selected: + desc += f'{self.background}, {self.width}' + elif is_background_selected: + desc += str(self.background) + elif is_width_selected: + desc += str(self.width) + desc += ']' + + return desc + + +class GuttersVertical(Enum): + NONE = 'none' + SMALL = 'small' + NORMAL = 'normal' + LARGE = 'large' + EXTRA_LARGE = 'extra_large' + + +class GuttersHorizontal(Enum): + NONE = 'none' + SMALL = 'small' + NORMAL = 'normal' + LARGE = 'large' + EXTRA_LARGE = 'extra_large' -@python_2_unicode_compatible class Bootstrap4GridRow(CMSPlugin): """ Layout > Grid: "Row" Plugin @@ -80,10 +141,16 @@ class Bootstrap4GridRow(CMSPlugin): .format(link='https://getbootstrap.com/docs/4.0/layout/grid/#horizontal-alignment') ), ) + gutters_vertical = EnumField( + GuttersVertical, + default=GuttersVertical.NONE, + max_length=32, + help_text=_("Vertical spacing between the columns inside"), + ) gutters = models.BooleanField( verbose_name=_('Remove gutters'), default=False, - help_text=_('Removes the marginal gutters from the grid.'), + help_text=_('Removes the horizontal spacing between the columns.'), ) tag_type = TagTypeField() attributes = AttributesField() @@ -93,7 +160,7 @@ def __str__(self): def get_short_description(self): column_count = len(self.child_plugin_instances or []) - column_count_str = ungettext( + column_count_str = gettext( '(1 column)', '(%(count)i columns)', column_count @@ -116,11 +183,17 @@ class Bootstrap4GridColumn(CMSPlugin): max_length=255, ) column_alignment = models.CharField( - verbose_name=_('Alignment'), + verbose_name=_('Vertical alignment'), choices=GRID_COLUMN_ALIGNMENT_CHOICES, blank=True, max_length=255, ) + horizontal_alignment = models.CharField( + verbose_name=_('Horizontal alignment'), + choices=GRID_COLUMN_HORIZONTAL_ALIGNMENT_CHOICES, + default=GRID_COLUMN_HORIZONTAL_ALIGNMENT_CHOICES[0][0], + max_length=255, + ) tag_type = TagTypeField() attributes = AttributesField() diff --git a/djangocms_bootstrap4/contrib/bootstrap4_grid/templates/djangocms_bootstrap4/grid_container.html b/djangocms_bootstrap4/contrib/bootstrap4_grid/templates/djangocms_bootstrap4/grid_container.html index a490dfc9..0abd2f09 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_grid/templates/djangocms_bootstrap4/grid_container.html +++ b/djangocms_bootstrap4/contrib/bootstrap4_grid/templates/djangocms_bootstrap4/grid_container.html @@ -1,7 +1,9 @@ {% load cms_tags %} <{{ instance.tag_type }} {{ instance.attributes_str }}> - {% for plugin in instance.child_plugin_instances %} - {% with forloop as parentloop %}{% render_plugin plugin %}{% endwith %} - {% endfor %} +
+ {% for plugin in instance.child_plugin_instances %} + {% with forloop as parentloop %}{% render_plugin plugin %}{% endwith %} + {% endfor %} +
diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/__init__.py b/djangocms_bootstrap4/contrib/bootstrap4_heading/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_heading/cms_plugins.py new file mode 100644 index 00000000..2d7b5946 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/cms_plugins.py @@ -0,0 +1,42 @@ +from cms.plugin_base import CMSPluginBase +from cms.plugin_pool import plugin_pool +from django.db import models +from django.forms import Textarea +from django.utils.translation import gettext_lazy as _ + +from djangocms_bootstrap4.contrib.bootstrap4_heading.models import Bootstrap4Heading + + +@plugin_pool.register_plugin +class Bootstrap4HeadingPlugin(CMSPluginBase): + model = Bootstrap4Heading + name = _('Heading') + module = _('Bootstrap 4') + render_template = 'djangocms_bootstrap4/heading.html' + text_enabled = True + + fieldsets = [ + (None, { + 'fields': ( + 'name', + 'tag', + 'alignment', + 'color', + 'type', + ) + }), + (_('Advanced settings'), { + 'classes': ('collapse',), + 'fields': ( + 'size', + 'size_unit', + 'attributes', + ) + }), + ] + + formfield_overrides = { + models.TextField: { + 'widget': Textarea(attrs={'rows': 2}) + }, + } diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/constants.py b/djangocms_bootstrap4/contrib/bootstrap4_heading/constants.py new file mode 100644 index 00000000..4ba005ae --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/constants.py @@ -0,0 +1,67 @@ +from django.conf import settings +from enumfields import Enum +from django.utils.translation import gettext_lazy as _ + + +class SizeUnit(Enum): + PX = 'px' + REM = 'rem' + EM = 'em' + + class Labels: + PX = _('Pixels') + REM = _('Font size of the root element (rem)') + EM = _('Font size of the parent (em)') + + +class HeadingTag(Enum): + H1 = 'h1' + H2 = 'h2' + H3 = 'h3' + H4 = 'h4' + H5 = 'h5' + H6 = 'h6' + DIV = 'div' + P = 'p' + + +class HeadingColor(Enum): + DARK = 'dark' + WHITE = 'white' + + +class HeadingAlignment(Enum): + LEFT = 'left' + CENTER = 'center' + RIGHT = 'right' + + +class HeadingType(Enum): + NORMAL = 'normal' + + +HEADING_SIZE_UNIT_ENUM = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_HEADING_SIZE_UNIT_ENUM', + SizeUnit, +) +HEADING_TAG_ENUM = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_HEADING_TAG_ENUM', + HeadingTag, +) +HEADING_COLOR_ENUM = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_HEADING_COLOR_ENUM', + HeadingColor, +) +HEADING_ALIGNMENT_ENUM = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_HEADING_ALIGNMENT_ENUM', + HeadingAlignment, +) +HEADING_TYPE_ENUM = getattr( + settings, + 'DJANGOCMS_BOOTSTRAP4_HEADING_TYPE_ENUM', + HeadingType, +) diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/0001_initial.py b/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/0001_initial.py new file mode 100644 index 00000000..94079f7a --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/0001_initial.py @@ -0,0 +1,37 @@ +# Generated by Django 2.2.12 on 2020-05-03 11:47 + +from django.db import migrations, models +import django.db.models.deletion +import djangocms_bootstrap4.contrib.bootstrap4_heading.constants +import djangocms_bootstrap4.fields +import enumfields.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('cms', '0022_auto_20180620_1551'), + ] + + operations = [ + migrations.CreateModel( + name='Bootstrap4Heading', + fields=[ + ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, related_name='bootstrap4_heading_bootstrap4heading', serialize=False, to='cms.CMSPlugin')), + ('text', models.TextField(max_length=2048)), + ('tag', enumfields.fields.EnumField(default='h1', enum=djangocms_bootstrap4.contrib.bootstrap4_heading.constants.HeadingTag, max_length=32)), + ('alignment', enumfields.fields.EnumField(default='left', enum=djangocms_bootstrap4.contrib.bootstrap4_heading.constants.HeadingAlignment, max_length=32)), + ('size', models.FloatField(blank=True, help_text='Optional', null=True)), + ('size_unit', enumfields.fields.EnumField(default='px', enum=djangocms_bootstrap4.contrib.bootstrap4_heading.constants.SizeUnit, max_length=32)), + ('type', enumfields.fields.EnumField(blank=True, default='normal', enum=djangocms_bootstrap4.contrib.bootstrap4_heading.constants.HeadingType, max_length=32, null=True)), + ('color', enumfields.fields.EnumField(default='dark', enum=djangocms_bootstrap4.contrib.bootstrap4_heading.constants.HeadingColor, max_length=32)), + ('attributes', djangocms_bootstrap4.fields.AttributesField(blank=True, default=dict, verbose_name='Attributes')), + ], + options={ + 'abstract': False, + }, + bases=('cms.cmsplugin',), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/0002_rename_field_text_to_name.py b/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/0002_rename_field_text_to_name.py new file mode 100644 index 00000000..965595ae --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/0002_rename_field_text_to_name.py @@ -0,0 +1,21 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_heading', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='bootstrap4heading', + old_name='text', + new_name='name', + ), + migrations.AlterField( + model_name='bootstrap4heading', + name='name', + field=models.TextField(max_length=2048, verbose_name='Text'), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/0003_auto_20210719_2034.py b/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/0003_auto_20210719_2034.py new file mode 100644 index 00000000..5090ec02 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/0003_auto_20210719_2034.py @@ -0,0 +1,25 @@ +# Generated by Django 3.1.4 on 2021-07-19 18:34 + +import backend.settings +from django.db import migrations +import enumfields.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('bootstrap4_heading', '0002_rename_field_text_to_name'), + ] + + operations = [ + migrations.AlterField( + model_name='bootstrap4heading', + name='color', + field=enumfields.fields.EnumField(default='dark', enum=backend.settings.HeadingColor, max_length=32), + ), + migrations.AlterField( + model_name='bootstrap4heading', + name='type', + field=enumfields.fields.EnumField(blank=True, default='normal', enum=backend.settings.HeadingType, max_length=32, null=True), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/__init__.py b/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/migrations/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/models.py b/djangocms_bootstrap4/contrib/bootstrap4_heading/models.py new file mode 100644 index 00000000..f6804057 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/models.py @@ -0,0 +1,49 @@ +from cms.models import CMSPlugin +from django.db import models +from django.utils.translation import gettext_lazy as _ +from enumfields import EnumField +from slugify import slugify + +from djangocms_bootstrap4.contrib.bootstrap4_heading.constants import HEADING_ALIGNMENT_ENUM +from djangocms_bootstrap4.contrib.bootstrap4_heading.constants import HEADING_COLOR_ENUM +from djangocms_bootstrap4.contrib.bootstrap4_heading.constants import HEADING_SIZE_UNIT_ENUM +from djangocms_bootstrap4.contrib.bootstrap4_heading.constants import HEADING_TAG_ENUM +from djangocms_bootstrap4.contrib.bootstrap4_heading.constants import HEADING_TYPE_ENUM +from djangocms_bootstrap4.fields import AttributesField + + +class Bootstrap4Heading(CMSPlugin): + # this name isn't self-explanatory because djangocms-text-ckeditor#528 + name = models.TextField(max_length=2048, verbose_name=_("Text")) + + tag = EnumField( + HEADING_TAG_ENUM, default=HEADING_TAG_ENUM.H1, max_length=32, + ) + alignment = EnumField( + HEADING_ALIGNMENT_ENUM, default=HEADING_ALIGNMENT_ENUM.LEFT, max_length=32, + ) + + size = models.FloatField(blank=True, null=True, help_text=_("Optional")) + size_unit = EnumField( + HEADING_SIZE_UNIT_ENUM, default=HEADING_SIZE_UNIT_ENUM.PX, max_length=32, + ) + + type = EnumField( + HEADING_TYPE_ENUM, + default=HEADING_TYPE_ENUM.NORMAL, + max_length=32, + blank=True, null=True, + ) + color = EnumField( + HEADING_COLOR_ENUM, default=HEADING_COLOR_ENUM.DARK, max_length=32, + ) + + attributes = AttributesField() + + def get_anchor(self) -> str: + return slugify(self.name) + + def __str__(self) -> str: + if self.name: + return self.name + return "" diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/templates/djangocms_bootstrap4/admin/spacing.html b/djangocms_bootstrap4/contrib/bootstrap4_heading/templates/djangocms_bootstrap4/admin/spacing.html new file mode 100644 index 00000000..f401a7a3 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/templates/djangocms_bootstrap4/admin/spacing.html @@ -0,0 +1,13 @@ +{% extends "djangocms_bootstrap4/admin/base.html" %} +{% load i18n static %} + +{% block extrahead %} + {{ block.super }} + +{% endblock %} + +{% block field_sets %} +
+ {{ block.super }} +
+{% endblock %} diff --git a/djangocms_bootstrap4/contrib/bootstrap4_heading/templates/djangocms_bootstrap4/heading.html b/djangocms_bootstrap4/contrib/bootstrap4_heading/templates/djangocms_bootstrap4/heading.html new file mode 100644 index 00000000..73ad9431 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_heading/templates/djangocms_bootstrap4/heading.html @@ -0,0 +1,10 @@ +{% load cms_tags menu_tags %} + + +<{{ instance.tag.value }} + class="heading-plugin heading-plugin--{{ instance.type.value }} heading-plugin--color-{{ instance.color.value }} text-{{ instance.alignment.value }}" + style="{% if instance.size %}font-size: {{ instance.size }}{{ instance.size_unit.value }}{% endif %}" + id="{{ instance.get_anchor }}" +> + {{ instance.name|linebreaksbr }} + diff --git a/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/cms_plugins.py index 4c53a0da..865d95eb 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/migrations/0002_alter_bootstrap4jumbotron_cmsplugin_ptr.py b/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/migrations/0002_alter_bootstrap4jumbotron_cmsplugin_ptr.py new file mode 100644 index 00000000..4ed501ee --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/migrations/0002_alter_bootstrap4jumbotron_cmsplugin_ptr.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_jumbotron", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4jumbotron", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/models.py b/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/models.py index 6fd8469e..af0ee204 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_jumbotron/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin diff --git a/djangocms_bootstrap4/contrib/bootstrap4_link/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_link/cms_plugins.py index 936d18dc..0a040635 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_link/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_link/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_link/constants.py b/djangocms_bootstrap4/contrib/bootstrap4_link/constants.py index af847f85..16727532 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_link/constants.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_link/constants.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ LINK_CHOICES = ( diff --git a/djangocms_bootstrap4/contrib/bootstrap4_link/models.py b/djangocms_bootstrap4/contrib/bootstrap4_link/models.py index 495b8722..022802f1 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_link/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_link/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from djangocms_icon.fields import Icon from djangocms_link.models import AbstractLink diff --git a/djangocms_bootstrap4/contrib/bootstrap4_listgroup/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_listgroup/cms_plugins.py index 18d5a405..950ad7ff 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_listgroup/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_listgroup/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_listgroup/constants.py b/djangocms_bootstrap4/contrib/bootstrap4_listgroup/constants.py index 6eabcd6b..510f226b 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_listgroup/constants.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_listgroup/constants.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ LISTGROUP_STATE_CHOICES = ( diff --git a/djangocms_bootstrap4/contrib/bootstrap4_listgroup/migrations/0002_alter_bootstrap4listgroup_cmsplugin_ptr_and_more.py b/djangocms_bootstrap4/contrib/bootstrap4_listgroup/migrations/0002_alter_bootstrap4listgroup_cmsplugin_ptr_and_more.py new file mode 100644 index 00000000..ce0680b8 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_listgroup/migrations/0002_alter_bootstrap4listgroup_cmsplugin_ptr_and_more.py @@ -0,0 +1,41 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_listgroup", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4listgroup", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4listgroupitem", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_listgroup/models.py b/djangocms_bootstrap4/contrib/bootstrap4_listgroup/models.py index a10f9ba1..1b23c713 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_listgroup/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_listgroup/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin diff --git a/djangocms_bootstrap4/contrib/bootstrap4_media/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_media/cms_plugins.py index e04348a3..af50149d 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_media/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_media/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_media/migrations/0002_alter_bootstrap4media_cmsplugin_ptr_and_more.py b/djangocms_bootstrap4/contrib/bootstrap4_media/migrations/0002_alter_bootstrap4media_cmsplugin_ptr_and_more.py new file mode 100644 index 00000000..293177f0 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_media/migrations/0002_alter_bootstrap4media_cmsplugin_ptr_and_more.py @@ -0,0 +1,41 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_media", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4media", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4mediabody", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_picture/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_picture/cms_plugins.py index 7ded0252..0fde64d7 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_picture/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_picture/cms_plugins.py @@ -3,7 +3,7 @@ import copy -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_pool import plugin_pool @@ -46,6 +46,7 @@ def render(self, context, instance, placeholder): classes = concat_classes(link_classes + [ instance.attributes.get('class'), + 'flex-column', ]) instance.attributes['class'] = classes diff --git a/djangocms_bootstrap4/contrib/bootstrap4_picture/migrations/0005_alter_bootstrap4picture_cmsplugin_ptr.py b/djangocms_bootstrap4/contrib/bootstrap4_picture/migrations/0005_alter_bootstrap4picture_cmsplugin_ptr.py new file mode 100644 index 00000000..2e4d2cf0 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_picture/migrations/0005_alter_bootstrap4picture_cmsplugin_ptr.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_picture", "0004_auto_20190703_0831"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4picture", + name="cmsplugin_ptr", + field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_picture/models.py b/djangocms_bootstrap4/contrib/bootstrap4_picture/models.py index 87ad4b7d..c5d2ee0f 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_picture/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_picture/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from djangocms_picture.models import AbstractPicture from six import python_2_unicode_compatible diff --git a/djangocms_bootstrap4/contrib/bootstrap4_picture/templates/djangocms_picture/default/picture.html b/djangocms_bootstrap4/contrib/bootstrap4_picture/templates/djangocms_picture/default/picture.html new file mode 100644 index 00000000..ef611bd3 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_picture/templates/djangocms_picture/default/picture.html @@ -0,0 +1,81 @@ +{% load thumbnail %} + +{% if picture_link %} + +{% endif %} + +{# start render figure/figcaption #} +{% if instance.caption_text %} +
+{% endif %} +{# end render figure/figcaption #} + + +{% if instance.attributes.alt %}{{ instance.attributes.alt }}{% elif instance.picture.default_alt_text %}{{ instance.picture.default_alt_text }}{% endif %} + +{# start render figure/figcaption #} +{% if instance.caption_text %} +
{{ instance.caption_text }}
+
+{% endif %} +{# end render figure/figcaption #} + +{% if picture_link %} +
+{% endif %} + +{% comment %} + # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img + # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure + # https://github.com/divio/django-filer/blob/master/filer/models/imagemodels.py + # http://easy-thumbnails.readthedocs.io/en/2.1/usage/#templates + {{ instance.picture }} + # Available variables: + {{ instance.img_src }} + {{ instance.width }} + {{ instance.height }} + {{ instance.alignment }} + {{ instance.caption_text }} + {{ instance.img_srcset_data }} or {{ img_srcset_data }} + {{ instance.attributes_str }} + # picture helper + {{ instance.get_size }} or {{ picture_size }} + # link settings + {{ instance.link_url }} + {{ instance.link_page }} + {{ instance.link_target }} + {{ instance.link_attributes_str }} + # link helper + {{ instance.get_link }} or {{ picture_link }} + # cropping settings + {{ instance.use_automatic_scaling }} + {{ instance.use_no_cropping }} + {{ instance.use_crop }} + {{ instance.use_upscale }} + {{ instance.thumbnail_options }} + # activate DJANGOCMS_PICTURE_NESTING to enable nested plugins: + {% for plugin in instance.child_plugin_instances %} + {% render_plugin plugin %} + {% endfor %} +{% endcomment %} diff --git a/djangocms_bootstrap4/contrib/bootstrap4_tabs/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_tabs/cms_plugins.py index 9086446b..b5587b64 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_tabs/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_tabs/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_tabs/constants.py b/djangocms_bootstrap4/contrib/bootstrap4_tabs/constants.py index 39114c13..91e9639a 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_tabs/constants.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_tabs/constants.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ TAB_TYPE_CHOICES = ( diff --git a/djangocms_bootstrap4/contrib/bootstrap4_tabs/migrations/0003_alter_bootstrap4tab_cmsplugin_ptr_and_more.py b/djangocms_bootstrap4/contrib/bootstrap4_tabs/migrations/0003_alter_bootstrap4tab_cmsplugin_ptr_and_more.py new file mode 100644 index 00000000..cd4456e5 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_tabs/migrations/0003_alter_bootstrap4tab_cmsplugin_ptr_and_more.py @@ -0,0 +1,41 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_tabs", "0002_auto_20180610_1106"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4tab", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + migrations.AlterField( + model_name="bootstrap4tabitem", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_tabs/models.py b/djangocms_bootstrap4/contrib/bootstrap4_tabs/models.py index 6e5fe93c..704cad2e 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_tabs/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_tabs/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin diff --git a/djangocms_bootstrap4/contrib/bootstrap4_utilities/cms_plugins.py b/djangocms_bootstrap4/contrib/bootstrap4_utilities/cms_plugins.py index 2eed3957..9887d473 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_utilities/cms_plugins.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_utilities/cms_plugins.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool diff --git a/djangocms_bootstrap4/contrib/bootstrap4_utilities/migrations/0002_alter_bootstrap4spacing_cmsplugin_ptr.py b/djangocms_bootstrap4/contrib/bootstrap4_utilities/migrations/0002_alter_bootstrap4spacing_cmsplugin_ptr.py new file mode 100644 index 00000000..1b3d6af0 --- /dev/null +++ b/djangocms_bootstrap4/contrib/bootstrap4_utilities/migrations/0002_alter_bootstrap4spacing_cmsplugin_ptr.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.4 on 2023-08-20 15:56 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("cms", "0022_auto_20180620_1551"), + ("bootstrap4_utilities", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="bootstrap4spacing", + name="cmsplugin_ptr", + field=models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + related_name="%(app_label)s_%(class)s", + serialize=False, + to="cms.cmsplugin", + ), + ), + ] diff --git a/djangocms_bootstrap4/contrib/bootstrap4_utilities/models.py b/djangocms_bootstrap4/contrib/bootstrap4_utilities/models.py index 171fad52..5b2af7eb 100644 --- a/djangocms_bootstrap4/contrib/bootstrap4_utilities/models.py +++ b/djangocms_bootstrap4/contrib/bootstrap4_utilities/models.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from cms.models import CMSPlugin diff --git a/djangocms_bootstrap4/fields.py b/djangocms_bootstrap4/fields.py index e6dc4490..435397b1 100644 --- a/djangocms_bootstrap4/fields.py +++ b/djangocms_bootstrap4/fields.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from djangocms_attributes_field import fields diff --git a/djangocms_bootstrap4/static/djangocms_bootstrap4/css/base.css b/djangocms_bootstrap4/static/djangocms_bootstrap4/css/base.css index 2688fec3..6ad129f4 100644 --- a/djangocms_bootstrap4/static/djangocms_bootstrap4/css/base.css +++ b/djangocms_bootstrap4/static/djangocms_bootstrap4/css/base.css @@ -5,4 +5,4 @@ /private/sass instead */ -: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,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}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{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.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(38,143,255,.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{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.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(130,138,145,.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{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.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(72,180,97,.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{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.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(58,176,195,.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{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.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(222,170,12,.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{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.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(225,83,97,.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{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.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(216,217,219,.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{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.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(82,88,93,.5)}.btn-outline-primary{color:#007bff;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,.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,.5)}.btn-outline-secondary{color:#6c757d;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,.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,.5)}.btn-outline-success{color:#28a745;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,.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,.5)}.btn-outline-info{color:#17a2b8;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,.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,.5)}.btn-outline-warning{color:#ffc107;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,.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,.5)}.btn-outline-danger{color:#dc3545;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,.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,.5)}.btn-outline-light{color:#f8f9fa;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,.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,.5)}.btn-outline-dark{color:#343a40;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,.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,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm{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=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.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:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{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-sm{border-radius:.2rem!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-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!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:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;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 embed,.embed-responsive iframe,.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.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;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}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;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:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.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}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.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-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-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-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-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-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-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-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-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-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-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-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!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-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.icon{display:inline-block;vertical-align:top;width:1em;height:1em}.icon svg{display:block;width:100%;height:100%}.icon-white{color:#fff}.icon-white svg{fill:#fff}.icon-black{color:#000}.icon-black svg{fill:#000}.icon-primary{color:#0bf}.icon-primary svg{fill:#0bf}svg path{fill:inherit}.djangocms-icon .icon>input{float:left;position:relative;top:12px}.djangocms-icon .caret{margin-left:8px}.bootstrap4-button-group .btn{box-sizing:border-box;cursor:pointer;-webkit-appearance:none;margin:2px;overflow:hidden;text-overflow:ellipsis}.bootstrap4-button-group .btn.active{outline:3px solid #0bf;border-color:#fff!important}.bootstrap4-button-group .btn-default.active{border-radius:0;background-color:#0bf!important}.bootstrap4-button-group-context-colors>div,.bootstrap4-button-group-context-size>div{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;min-height:75px}.bootstrap4-button-group-context-colors .btn{-ms-flex-preferred-size:calc(25% - 4px);flex-basis:calc(25% - 4px)}@media (min-width:820px){.bootstrap4-button-group-context-colors .btn{-ms-flex-preferred-size:calc(20% - 4px);flex-basis:calc(20% - 4px)}}.bootstrap4-button-group-icons .icon{font-size:21px}.bootstrap4-button-group-icons .icon-flex-align-center,.bootstrap4-button-group-icons .icon-flex-align-end,.bootstrap4-button-group-icons .icon-flex-align-start{transform:scale(1.4)}.bootstrap4-button-group-icons .icon-flex-content-around,.bootstrap4-button-group-icons .icon-flex-content-between{transform:scale(1.6)}.bootstrap4-button-group-icons .icon-flex-self-center,.bootstrap4-button-group-icons .icon-flex-self-end,.bootstrap4-button-group-icons .icon-flex-self-start{transform:scale(1.4)}.bootstrap4-button-group-icons .icon-size-sm{transform:rotate(90deg)}.module{margin:0 0 20px}.djangocms-bootstrap4-row .form-row.field-create .icon{position:absolute;font-size:30px;margin-top:28px;margin-left:4px}.djangocms-bootstrap4-row .form-row.field-create input{width:130px!important;padding-right:5px!important;text-align:right}.djangocms-bootstrap4-column .form-row.field-xs_col,.djangocms-bootstrap4-column .form-row.field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset,.djangocms-bootstrap4-column .form-row.field-xs_order{position:relative;display:-ms-flexbox;display:flex;padding:0;min-width:860px}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox{position:relative;text-align:center;width:110px!important;padding:15px 10px;margin:0!important;border-bottom:1px solid #eee;float:left!important}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox input{text-align:right;padding-right:5px!important}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox label{font-size:12px!important;font-weight:400!important;color:#ccc!important;position:absolute;left:20px;bottom:18px;text-transform:lowercase}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox .disabled,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox .disabled,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox .disabled,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox .disabled,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox .disabled{color:#ccc;background:#eee}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox:last-child,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox:last-child,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox:last-child,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox:last-child,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox:last-child{border-right:none}.djangocms-bootstrap4-column .form-row.field-xs_col .errors,.djangocms-bootstrap4-column .form-row.field-xs_ml .errors,.djangocms-bootstrap4-column .form-row.field-xs_mr .errors,.djangocms-bootstrap4-column .form-row.field-xs_offset .errors,.djangocms-bootstrap4-column .form-row.field-xs_order .errors{margin-bottom:0}.djangocms-bootstrap4-column .form-row.field-xs_col .errorlist,.djangocms-bootstrap4-column .form-row.field-xs_ml .errorlist,.djangocms-bootstrap4-column .form-row.field-xs_mr .errorlist,.djangocms-bootstrap4-column .form-row.field-xs_offset .errorlist,.djangocms-bootstrap4-column .form-row.field-xs_order .errorlist{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.djangocms-bootstrap4-column .form-row.field-xs_col.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_ml.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_mr.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_offset.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_order.field-xs_mr .field-box{border-bottom:none}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box-label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box-label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box-label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box-label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box-label{display:-ms-flexbox;display:flex;margin-top:auto;color:#999}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box-label a{width:100%}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box-label .icon,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box-label .icon,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box-label .icon,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box-label .icon,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box-label .icon{position:relative;top:3px}.djangocms-bootstrap4-column .form-row.field-xs_col.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_col.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_col.field-xs_order .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_ml.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_ml.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_ml.field-xs_order .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_mr.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_mr.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_mr.field-xs_order .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_offset.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_offset.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_offset.field-xs_order .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_order.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_order.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_order.field-xs_order .field-box-label a{position:relative;top:8px}.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_mr{text-align:left}.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_mr label{left:30px;bottom:14px}.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_mr input{position:relative;top:-3px}.djangocms-bootstrap4-column .grid-reset{position:absolute;right:5px;top:0}.djangocms-bootstrap4-column .icon-thead{text-align:center;margin-bottom:15px}.djangocms-bootstrap4-column .icon-thead .icon{font-size:30px}.djangocms-bootstrap4-column .icon-thead .icon-size-sm{transform:rotate(90deg)}.djangocms-bootstrap4-column .icon-title{display:block;font-size:12px;color:#999;padding:5px 0 0}.djangocms-bootstrap4-preview{position:fixed;top:0;right:0;z-index:10;text-align:center;border-radius:0 0 0 3px;padding:10px 20px 27px;border:1px solid #ccc;border-top:none;border-right:none;background:#fff}.djangocms-bootstrap4-preview h2{font-size:14px;min-width:150px;margin:0 0 12px}.djangocms-bootstrap4-preview .b4-preview{margin:0 0 -15px}.djangocms-bootstrap4-preview .b4-close{position:absolute;right:10px;top:8px;z-index:100;display:block;color:#5e5d5d;font-size:12px;font-weight:700;text-transform:uppercase;width:20px;height:20px;border-radius:3px;background:#ddd}.djangocms-bootstrap4-preview .b4-close:hover{color:#fff!important;text-decoration:none;background:#0bf}.djangocms-bootstrap4-preview .btn>span{vertical-align:middle}.djangocms-bootstrap4-preview .btn>span>.icon{vertical-align:middle}.djangocms-bootstrap4-preview .btn>span svg,.djangocms-bootstrap4-preview .btn>span use{fill:currentColor}.djangocms-bootstrap4-blockquote textarea{height:110px}#id_link_type{padding:0;margin:0;border:none}#id_link_type li{padding:0;margin:0 15px 5px 0;border:none}#id_link_type label input{position:relative;top:-4px} \ No newline at end of file +: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,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}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{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.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(38,143,255,.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{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.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(130,138,145,.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{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.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(72,180,97,.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{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.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(58,176,195,.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{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.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(222,170,12,.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{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.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(225,83,97,.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{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.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(216,217,219,.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{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.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(82,88,93,.5)}.btn-outline-primary{color:#007bff;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,.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,.5)}.btn-outline-secondary{color:#6c757d;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,.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,.5)}.btn-outline-success{color:#28a745;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,.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,.5)}.btn-outline-info{color:#17a2b8;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,.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,.5)}.btn-outline-warning{color:#ffc107;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,.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,.5)}.btn-outline-danger{color:#dc3545;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,.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,.5)}.btn-outline-light{color:#f8f9fa;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,.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,.5)}.btn-outline-dark{color:#343a40;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,.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,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm{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=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.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:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{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-sm{border-radius:.2rem!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-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!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:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;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:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;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 embed,.embed-responsive iframe,.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.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;-ms-grid-row-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;-ms-grid-row-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;-ms-grid-row-align:stretch!important;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}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;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:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.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}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.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-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-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-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-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-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-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-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-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-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-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-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!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-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.icon{display:inline-block;vertical-align:top;width:1em;height:1em}.icon svg{display:block;width:100%;height:100%}.icon-info{width:.9em}.icon-white{color:#fff}.icon-white svg{fill:#fff}.icon-black{color:#000}.icon-black svg{fill:#000}.icon-primary{color:#0bf}.icon-primary svg{fill:#0bf}svg path{fill:inherit}.djangocms-icon .icon>input{float:left;position:relative;top:12px}.djangocms-icon .caret{margin-left:8px}.bootstrap4-button-group .btn{box-sizing:border-box;cursor:pointer;-webkit-appearance:none;margin:2px;overflow:hidden;text-overflow:ellipsis}.bootstrap4-button-group .btn.active{outline:3px solid #0bf;border-color:#fff!important}.bootstrap4-button-group .btn-default.active{border-radius:0;background-color:#0bf!important}.bootstrap4-button-group-context-colors>div,.bootstrap4-button-group-context-size>div{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;min-height:75px}.bootstrap4-button-group-context-colors .btn{-ms-flex-preferred-size:calc(25% - 4px);flex-basis:calc(25% - 4px)}@media (min-width:820px){.bootstrap4-button-group-context-colors .btn{-ms-flex-preferred-size:calc(20% - 4px);flex-basis:calc(20% - 4px)}}.bootstrap4-button-group-icons .icon{font-size:21px}.bootstrap4-button-group-icons .icon-flex-align-center,.bootstrap4-button-group-icons .icon-flex-align-end,.bootstrap4-button-group-icons .icon-flex-align-start{transform:scale(1.4)}.bootstrap4-button-group-icons .icon-flex-content-around,.bootstrap4-button-group-icons .icon-flex-content-between{transform:scale(1.6)}.bootstrap4-button-group-icons .icon-flex-self-center,.bootstrap4-button-group-icons .icon-flex-self-end,.bootstrap4-button-group-icons .icon-flex-self-start{transform:scale(1.4)}.bootstrap4-button-group-icons .icon-size-sm{transform:rotate(90deg)}.bootstrap4-button-group-icons .icon-align-reset{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-align-start{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-align-center{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-align-end{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-content-start{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-content-center{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-content-end{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-content-around{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-content-between{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-self-start{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-self-center{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-flex-self-end{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-size-xs{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-size-sm{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-size-md{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-size-lg{background-image:url('data:image/svg+xml;utf8,')}.bootstrap4-button-group-icons .icon-size-xl{background-image:url('data:image/svg+xml;utf8,')}.icon-info{background-image:url('data:image/svg+xml;utf8,')}.module{margin:0 0 20px}.djangocms-bootstrap4-row .form-row.field-create .icon{position:absolute;font-size:30px;margin-top:28px;margin-left:4px}.djangocms-bootstrap4-row .form-row.field-create input{width:130px!important;padding-right:5px!important;text-align:right}.djangocms-bootstrap4-column .form-row.field-xs_col,.djangocms-bootstrap4-column .form-row.field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset,.djangocms-bootstrap4-column .form-row.field-xs_order{position:relative;display:-ms-flexbox;display:flex;padding:0;min-width:860px}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox{position:relative;text-align:center;width:110px!important;padding:15px 10px;margin:0!important;border-bottom:1px solid #eee;float:left!important}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box input,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox input{text-align:right;padding-right:5px!important}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box label,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox label{font-size:12px!important;font-weight:400!important;color:#ccc!important;position:absolute;left:20px;bottom:18px;text-transform:lowercase}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox .disabled,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox .disabled,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox .disabled,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox .disabled,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box .disabled,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox .disabled{color:#ccc;background:#eee}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_col .fieldBox:last-child,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_ml .fieldBox:last-child,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_mr .fieldBox:last-child,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_offset .fieldBox:last-child,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box:last-child,.djangocms-bootstrap4-column .form-row.field-xs_order .fieldBox:last-child{border-right:none}.djangocms-bootstrap4-column .form-row.field-xs_col .errors,.djangocms-bootstrap4-column .form-row.field-xs_ml .errors,.djangocms-bootstrap4-column .form-row.field-xs_mr .errors,.djangocms-bootstrap4-column .form-row.field-xs_offset .errors,.djangocms-bootstrap4-column .form-row.field-xs_order .errors{margin-bottom:0}.djangocms-bootstrap4-column .form-row.field-xs_col .errorlist,.djangocms-bootstrap4-column .form-row.field-xs_ml .errorlist,.djangocms-bootstrap4-column .form-row.field-xs_mr .errorlist,.djangocms-bootstrap4-column .form-row.field-xs_offset .errorlist,.djangocms-bootstrap4-column .form-row.field-xs_order .errorlist{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.djangocms-bootstrap4-column .form-row.field-xs_col.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_ml.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_mr.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_offset.field-xs_mr .field-box,.djangocms-bootstrap4-column .form-row.field-xs_order.field-xs_mr .field-box{border-bottom:none}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box-label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box-label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box-label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box-label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box-label{display:-ms-flexbox;display:flex;margin-top:auto;color:#999}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box-label a{width:100%}.djangocms-bootstrap4-column .form-row.field-xs_col .field-box-label .icon,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-box-label .icon,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-box-label .icon,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-box-label .icon,.djangocms-bootstrap4-column .form-row.field-xs_order .field-box-label .icon{position:relative;top:3px}.djangocms-bootstrap4-column .form-row.field-xs_col.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_col.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_col.field-xs_order .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_ml.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_ml.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_ml.field-xs_order .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_mr.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_mr.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_mr.field-xs_order .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_offset.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_offset.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_offset.field-xs_order .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_order.field-xs_col .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_order.field-xs_offset .field-box-label a,.djangocms-bootstrap4-column .form-row.field-xs_order.field-xs_order .field-box-label a{position:relative;top:8px}.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_mr,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_ml,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_mr{text-align:left}.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_mr label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_ml label,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_mr label{left:30px;bottom:14px}.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_col .field-xs_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_ml .field-xs_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_mr .field-xs_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_offset .field-xs_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-lg_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-md_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-sm_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xl_mr input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_ml input,.djangocms-bootstrap4-column .form-row.field-xs_order .field-xs_mr input{position:relative;top:-3px}.djangocms-bootstrap4-column .grid-reset{position:absolute;right:5px;top:0}.djangocms-bootstrap4-column .icon-thead{text-align:center;margin-bottom:15px}.djangocms-bootstrap4-column .icon-thead .icon{font-size:30px}.djangocms-bootstrap4-column .icon-thead .icon-size-sm{transform:rotate(90deg)}.djangocms-bootstrap4-column .icon-title{display:block;font-size:12px;color:#999;padding:5px 0 0}.djangocms-bootstrap4-preview{position:fixed;top:0;right:0;z-index:10;text-align:center;border-radius:0 0 0 3px;padding:10px 20px 27px;border:1px solid #ccc;border-top:none;border-right:none;background:#fff}.djangocms-bootstrap4-preview h2{font-size:14px;min-width:150px;margin:0 0 12px}.djangocms-bootstrap4-preview .b4-preview{margin:0 0 -15px}.djangocms-bootstrap4-preview .b4-close{position:absolute;right:10px;top:8px;z-index:100;display:block;color:#5e5d5d;font-size:12px;font-weight:700;text-transform:uppercase;width:20px;height:20px;border-radius:3px;background:#ddd}.djangocms-bootstrap4-preview .b4-close:hover{color:#fff!important;text-decoration:none;background:#0bf}.djangocms-bootstrap4-preview .btn>span{vertical-align:middle}.djangocms-bootstrap4-preview .btn>span>.icon{vertical-align:middle}.djangocms-bootstrap4-preview .btn>span svg,.djangocms-bootstrap4-preview .btn>span use{fill:currentColor}.djangocms-bootstrap4-blockquote textarea{height:110px}#id_link_type{padding:0;margin:0;border:none}#id_link_type li{padding:0;margin:0 15px 5px 0;border:none}#id_link_type label input{position:relative;top:-4px} \ No newline at end of file diff --git a/djangocms_bootstrap4/static/djangocms_bootstrap4/js/bundle.base.js b/djangocms_bootstrap4/static/djangocms_bootstrap4/js/bundle.base.js index bb73a299..0b5bff50 100644 --- a/djangocms_bootstrap4/static/djangocms_bootstrap4/js/bundle.base.js +++ b/djangocms_bootstrap4/static/djangocms_bootstrap4/js/bundle.base.js @@ -1 +1 @@ -!function(e){function __webpack_require__(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}var t=window.webpackJsonp;window.webpackJsonp=function(n,o,i){for(var s,a,u,c=0,l=[];c0&&t-1 in e)}function nodeName(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function winnow(e,t,n){return b(t)?T.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?T.grep(e,function(e){return e===t!==n}):"string"!=typeof t?T.grep(e,function(e){return p.call(t,e)>-1!==n}):T.filter(t,e,n)}function sibling(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function createOptions(e){var t={};return T.each(e.match(P)||[],function(e,n){t[n]=!0}),t}function Identity(e){return e}function Thrower(e){throw e}function adoptValue(e,t,n,r){var o;try{e&&b(o=e.promise)?o.call(e).done(t).fail(n):e&&b(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function completed(){a.removeEventListener("DOMContentLoaded",completed),n.removeEventListener("load",completed),T.ready()}function fcamelCase(e,t){return t.toUpperCase()}function camelCase(e){return e.replace(H,"ms-").replace(F,fcamelCase)}function Data(){this.expando=T.expando+Data.uid++}function getData(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:W.test(e)?JSON.parse(e):e)}function dataAttr(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(B,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=getData(n)}catch(e){}I.set(e,t,n)}else n=void 0;return n}function adjustCSS(e,t,n,r){var o,i,s=20,a=r?function(){return r.cur()}:function(){return T.css(e,t,"")},u=a(),c=n&&n[3]||(T.cssNumber[t]?"":"px"),l=e.nodeType&&(T.cssNumber[t]||"px"!==c&&+u)&&G.exec(T.css(e,t));if(l&&l[3]!==c){for(u/=2,c=c||l[3],l=+u||1;s--;)T.style(e,t,l+c),(1-i)*(1-(i=a()/u||.5))<=0&&(s=0),l/=i;l*=2,T.style(e,t,l+c),n=n||[]}return n&&(l=+l||+u||0,o=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=o)),o}function getDefaultDisplay(e){var t,n=e.ownerDocument,r=e.nodeName,o=K[r];return o||(t=n.body.appendChild(n.createElement(r)),o=T.css(t,"display"),t.parentNode.removeChild(t),"none"===o&&(o="block"),K[r]=o,o)}function showHide(e,t){for(var n,r,o=[],i=0,s=e.length;i-1)o&&o.push(i);else if(c=X(i),s=getAll(f.appendChild(i),"script"),c&&setGlobalEval(s),n)for(l=0;i=s[l++];)te.test(i.type||"")&&n.push(i);return f}function returnTrue(){return!0}function returnFalse(){return!1}function expectSync(e,t){return e===safeActiveElement()==("focus"===t)}function safeActiveElement(){try{return a.activeElement}catch(e){}}function on(e,t,n,r,o,i){var s,a;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(a in t)on(e,a,n,r,t[a],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=returnFalse;else if(!o)return e;return 1===i&&(s=o,o=function(e){return T().off(e),s.apply(this,arguments)},o.guid=s.guid||(s.guid=T.guid++)),e.each(function(){T.event.add(this,t,o,r,n)})}function leverageNative(e,t,n){if(!n)return void(void 0===R.get(e,t)&&T.event.add(e,t,returnTrue));R.set(e,t,!1),T.event.add(e,t,{namespace:!1,handler:function(e){var r,o,i=R.get(this,t);if(1&e.isTrigger&&this[t]){if(i.length)(T.event.special[t]||{}).delegateType&&e.stopPropagation();else if(i=c.call(arguments),R.set(this,t,i),r=n(this,t),this[t](),o=R.get(this,t),i!==o||r?R.set(this,t,!1):o={},i!==o)return e.stopImmediatePropagation(),e.preventDefault(),o.value}else i.length&&(R.set(this,t,{value:T.event.trigger(T.extend(i[0],T.Event.prototype),i.slice(1),this)}),e.stopImmediatePropagation())}})}function manipulationTarget(e,t){return nodeName(e,"table")&&nodeName(11!==t.nodeType?t:t.firstChild,"tr")?T(e).children("tbody")[0]||e:e}function disableScript(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function restoreScript(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function cloneCopyEvent(e,t){var n,r,o,i,s,a,u,c;if(1===t.nodeType){if(R.hasData(e)&&(i=R.access(e),s=R.set(t,i),c=i.events)){delete s.handle,s.events={};for(o in c)for(n=0,r=c[o].length;n1&&"string"==typeof h&&!y.checkClone&&ce.test(h))return e.each(function(o){var i=e.eq(o);v&&(t[0]=h.call(this,o,i.html())),domManip(i,t,n,r)});if(p&&(o=buildFragment(t,e[0].ownerDocument,!1,e,r),i=o.firstChild,1===o.childNodes.length&&(o=i),i||r)){for(s=T.map(getAll(o,"script"),disableScript),a=s.length;f=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-u-a-.5))||0),u}function getWidthOrHeight(e,t,n){var r=pe(e),o=!y.boxSizingReliable()||n,i=o&&"border-box"===T.css(e,"boxSizing",!1,r),s=i,a=curCSS(e,t,r),u="offset"+t[0].toUpperCase()+t.slice(1);if(fe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||"auto"===a||!parseFloat(a)&&"inline"===T.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===T.css(e,"boxSizing",!1,r),(s=u in e)&&(a=e[u])),(a=parseFloat(a)||0)+boxModelAdjustment(e,t,n||(i?"border":"content"),s,r,a)+"px"}function Tween(e,t,n,r,o){return new Tween.prototype.init(e,t,n,r,o)}function schedule(){Te&&(!1===a.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(schedule):n.setTimeout(schedule,T.fx.interval),T.fx.tick())}function createFxNow(){return n.setTimeout(function(){we=void 0}),we=Date.now()}function genFx(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)n=V[r],o["margin"+n]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function createTween(e,t,n){for(var r,o=(Animation.tweeners[t]||[]).concat(Animation.tweeners["*"]),i=0,s=o.length;i=0&&nr.cacheLength&&delete cache[e.shift()],cache[t+" "]=n}var e=[];return cache}function markFunction(e){return e[x]=!0,e}function assert(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function addHandle(e,t){for(var n=e.split("|"),o=n.length;o--;)r.attrHandle[n[o]]=t}function siblingCheck(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function createDisabledPseudo(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&se(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function createPositionalPseudo(e){return markFunction(function(t){return t=+t,markFunction(function(n,r){for(var o,i=e([],n.length,t),s=i.length;s--;)n[o=i[s]]&&(n[o]=!(r[o]=n[o]))})})}function testContext(e){return e&&void 0!==e.getElementsByTagName&&e}function setFilters(){}function toSelector(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function multipleContexts(e,t,n){for(var r=0,o=t.length;r-1&&(i[c]=!(s[c]=f))}}else m=condense(m===s?m.splice(h,m.length):m),o?o(null,s,m,u):P.apply(s,m)})}function matcherFromTokens(e){for(var t,n,o,i=e.length,s=r.relative[e[0].type],a=s||r.relative[" "],u=s?1:0,l=addCombinator(function(e){return e===t},a,!0),f=addCombinator(function(e){return q(t,e)>-1},a,!0),p=[function(e,n,r){var o=!s&&(r||n!==c)||((t=n).nodeType?l(e,n,r):f(e,n,r));return t=null,o}];u1&&elementMatcher(p),u>1&&toSelector(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(W,"$1"),n,u0,o=e.length>0,i=function(i,s,a,u,l){var f,h,g,m=0,y="0",b=i&&[],x=[],w=c,C=i||o&&r.find.TAG("*",l),S=T+=null==w?1:Math.random()||.1,k=C.length;for(l&&(c=s===d||s||l);y!==k&&null!=(f=C[y]);y++){if(o&&f){for(h=0,s||f.ownerDocument===d||(p(f),a=!v);g=e[h++];)if(g(f,s||d,a)){u.push(f);break}l&&(T=S)}n&&((f=!g&&f)&&m--,i&&b.push(f))}if(m+=y,n&&y!==m){for(h=0;g=t[h++];)g(b,x,s,a);if(i){if(m>0)for(;y--;)b[y]||x[y]||(x[y]=D.call(u));x=condense(x)}P.apply(u,x),l&&!i&&x.length>0&&m+t.length>1&&Sizzle.uniqueSort(u)}return l&&(T=S,c=w),b};return n?markFunction(i):i}var t,n,r,o,i,s,a,u,c,l,f,p,d,h,v,g,m,y,b,x="sizzle"+1*new Date,w=e.document,T=0,C=0,S=createCache(),k=createCache(),_=createCache(),j=createCache(),A=function(e,t){return e===t&&(f=!0),0},E={}.hasOwnProperty,N=[],D=N.pop,O=N.push,P=N.push,L=N.slice,q=function(e,t){for(var n=0,r=e.length;n+~]|"+H+")"+H+"*"),G=new RegExp(H+"|>"),V=new RegExp(R),U=new RegExp("^"+F+"$"),X={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),TAG:new RegExp("^("+F+"|[*])"),ATTR:new RegExp("^"+z),PSEUDO:new RegExp("^"+R),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+H+"*(even|odd|(([+-]|)(\\d*)n|)"+H+"*(?:([+-]|)"+H+"*(\\d+)|))"+H+"*\\)|)","i"),bool:new RegExp("^(?:"+M+")$","i"),needsContext:new RegExp("^"+H+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+H+"*((?:-\\d)?\\d*)"+H+"*\\)|)(?=[^-]|$)","i")},J=/HTML$/i,Y=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+H+"?|("+H+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,oe=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){p()},se=addCombinator(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{P.apply(N=L.call(w.childNodes),w.childNodes),N[w.childNodes.length].nodeType}catch(e){P={apply:N.length?function(e,t){O.apply(e,L.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}n=Sizzle.support={},i=Sizzle.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!J.test(t||n&&n.nodeName||"HTML")},p=Sizzle.setDocument=function(e){var t,o,s=e?e.ownerDocument||e:w;return s!==d&&9===s.nodeType&&s.documentElement?(d=s,h=d.documentElement,v=!i(d),w!==d&&(o=d.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener("unload",ie,!1):o.attachEvent&&o.attachEvent("onunload",ie)),n.attributes=assert(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=assert(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=K.test(d.getElementsByClassName),n.getById=assert(function(e){return h.appendChild(e).id=x,!d.getElementsByName||!d.getElementsByName(x).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&v){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&v){var n,r,o,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&v)return t.getElementsByClassName(e)},m=[],g=[],(n.qsa=K.test(d.querySelectorAll))&&(assert(function(e){h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]="+H+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\["+H+"*(?:value|"+M+")"),e.querySelectorAll("[id~="+x+"-]").length||g.push("~="),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+x+"+*").length||g.push(".#.+[+~]")}),assert(function(e){e.innerHTML="";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name"+H+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(n.matchesSelector=K.test(y=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&assert(function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),m.push("!=",R)}),g=g.length&&new RegExp(g.join("|")),m=m.length&&new RegExp(m.join("|")),t=K.test(h.compareDocumentPosition),b=t||K.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},A=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&r||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&b(w,e)?-1:t===d||t.ownerDocument===w&&b(w,t)?1:l?q(l,e)-q(l,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,s=[e],a=[t];if(!o||!i)return e===d?-1:t===d?1:o?-1:i?1:l?q(l,e)-q(l,t):0;if(o===i)return siblingCheck(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)a.unshift(n);for(;s[r]===a[r];)r++;return r?siblingCheck(s[r],a[r]):s[r]===w?-1:a[r]===w?1:0},d):d},Sizzle.matches=function(e,t){return Sizzle(e,null,null,t)},Sizzle.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),n.matchesSelector&&v&&!j[t+" "]&&(!m||!m.test(t))&&(!g||!g.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){j(t,!0)}return Sizzle(t,d,null,[e]).length>0},Sizzle.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),b(e,t)},Sizzle.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var o=r.attrHandle[t.toLowerCase()],i=o&&E.call(r.attrHandle,t.toLowerCase())?o(e,t,!v):void 0;return void 0!==i?i:n.attributes||!v?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},Sizzle.escape=function(e){return(e+"").replace(re,oe)},Sizzle.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},Sizzle.uniqueSort=function(e){var t,r=[],o=0,i=0;if(f=!n.detectDuplicates,l=!n.sortStable&&e.slice(0),e.sort(A),f){for(;t=e[i++];)t===e[i]&&(o=r.push(i));for(;o--;)e.splice(r[o],1)}return l=null,e},o=Sizzle.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=o(t);return n},r=Sizzle.selectors={cacheLength:50,createPseudo:markFunction,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||Sizzle.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&Sizzle.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return X.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=s(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=S[e+" "];return t||(t=new RegExp("(^|"+H+")"+e+"("+H+"|$)"))&&S(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var o=Sizzle.attr(r,e);return null==o?"!="===t:!t||(o+="","="===t?o===n:"!="===t?o!==n:"^="===t?n&&0===o.indexOf(n):"*="===t?n&&o.indexOf(n)>-1:"$="===t?n&&o.slice(-n.length)===n:"~="===t?(" "+o.replace(I," ")+" ").indexOf(n)>-1:"|="===t&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,o){var i="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,p,d,h,v=i!==s?"nextSibling":"previousSibling",g=t.parentNode,m=a&&t.nodeName.toLowerCase(),y=!u&&!a,b=!1;if(g){if(i){for(;v;){for(p=t;p=p[v];)if(a?p.nodeName.toLowerCase()===m:1===p.nodeType)return!1;h=v="only"===e&&!h&&"nextSibling"}return!0}if(h=[s?g.firstChild:g.lastChild],s&&y){for(p=g,f=p[x]||(p[x]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[e]||[],d=c[0]===T&&c[1],b=d&&c[2],p=d&&g.childNodes[d];p=++d&&p&&p[v]||(b=d=0)||h.pop();)if(1===p.nodeType&&++b&&p===t){l[e]=[T,d,b];break}}else if(y&&(p=t,f=p[x]||(p[x]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[e]||[],d=c[0]===T&&c[1],b=d),!1===b)for(;(p=++d&&p&&p[v]||(b=d=0)||h.pop())&&((a?p.nodeName.toLowerCase()!==m:1!==p.nodeType)||!++b||(y&&(f=p[x]||(p[x]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),l[e]=[T,b]),p!==t)););return(b-=o)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,o=r.pseudos[e]||r.setFilters[e.toLowerCase()]||Sizzle.error("unsupported pseudo: "+e);return o[x]?o(t):o.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?markFunction(function(e,n){for(var r,i=o(e,t),s=i.length;s--;)r=q(e,i[s]),e[r]=!(n[r]=i[s])}):function(e){return o(e,0,n)}):o}},pseudos:{not:markFunction(function(e){var t=[],n=[],r=a(e.replace(W,"$1"));return r[x]?markFunction(function(e,t,n,o){for(var i,s=r(e,null,o,[]),a=e.length;a--;)(i=s[a])&&(e[a]=!(t[a]=i))}):function(e,o,i){return t[0]=e,r(t,null,i,n),t[0]=null,!n.pop()}}),has:markFunction(function(e){return function(t){return Sizzle(e,t).length>0}}),contains:markFunction(function(e){return e=e.replace(te,ne),function(t){return(t.textContent||o(t)).indexOf(e)>-1}}),lang:markFunction(function(e){return U.test(e||"")||Sizzle.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=v?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:createDisabledPseudo(!1),disabled:createDisabledPseudo(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return Y.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:createPositionalPseudo(function(){return[0]}),last:createPositionalPseudo(function(e,t){return[t-1]}),eq:createPositionalPseudo(function(e,t,n){return[n<0?n+t:n]}),even:createPositionalPseudo(function(e,t){for(var n=0;nt?t:n;--r>=0;)e.push(r);return e}),gt:createPositionalPseudo(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(c=u[0]).type&&9===t.nodeType&&v&&r.relative[u[1].type]){if(!(t=(r.find.ID(c.matches[0].replace(te,ne),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}for(i=X.needsContext.test(e)?0:u.length;i--&&(c=u[i],!r.relative[l=c.type]);)if((f=r.find[l])&&(o=f(c.matches[0].replace(te,ne),ee.test(u[0].type)&&testContext(t.parentNode)||t))){if(u.splice(i,1),!(e=o.length&&toSelector(u)))return P.apply(n,o),n;break}}return(p||a(e,d))(o,t,!v,n,!t||ee.test(e)&&testContext(t.parentNode)||t),n},n.sortStable=x.split("").sort(A).join("")===x,n.detectDuplicates=!!f,p(),n.sortDetached=assert(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),assert(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||addHandle("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&assert(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||addHandle("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),assert(function(e){return null==e.getAttribute("disabled")})||addHandle(M,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),Sizzle}(n);T.find=S,T.expr=S.selectors,T.expr[":"]=T.expr.pseudos,T.uniqueSort=T.unique=S.uniqueSort,T.text=S.getText,T.isXMLDoc=S.isXML,T.contains=S.contains,T.escapeSelector=S.escape;var k=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&T(e).is(n))break;r.push(e)}return r},_=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},j=T.expr.match.needsContext,A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;T.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?T.find.matchesSelector(r,e)?[r]:[]:T.find.matches(e,T.grep(t,function(e){return 1===e.nodeType}))},T.fn.extend({find:function(e){var t,n,r=this.length,o=this;if("string"!=typeof e)return this.pushStack(T(e).filter(function(){for(t=0;t1?T.uniqueSort(n):n},filter:function(e){return this.pushStack(winnow(this,e||[],!1))},not:function(e){return this.pushStack(winnow(this,e||[],!0))},is:function(e){return!!winnow(this,"string"==typeof e&&j.test(e)?T(e):e||[],!1).length}});var E,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(T.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||E,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:N.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof T?t[0]:t,T.merge(this,T.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:a,!0)),A.test(r[1])&&T.isPlainObject(t))for(r in t)b(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return o=a.getElementById(r[2]),o&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):b(e)?void 0!==n.ready?n.ready(e):e(T):T.makeArray(e,this)}).prototype=T.fn,E=T(a);var D=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};T.fn.extend({has:function(e){var t=T(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&T.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?T.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?p.call(T(e),this[0]):p.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(T.uniqueSort(T.merge(this.get(),T(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),T.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return sibling(e,"nextSibling")},prev:function(e){return sibling(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return _((e.parentNode||{}).firstChild,e)},children:function(e){return _(e.firstChild)},contents:function(e){return void 0!==e.contentDocument?e.contentDocument:(nodeName(e,"template")&&(e=e.content||e),T.merge([],e.childNodes))}},function(e,t){T.fn[e]=function(n,r){var o=T.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=T.filter(r,o)),this.length>1&&(O[e]||T.uniqueSort(o),D.test(e)&&o.reverse()),this.pushStack(o)}});var P=/[^\x20\t\r\n\f]+/g;T.Callbacks=function(e){e="string"==typeof e?createOptions(e):T.extend({},e);var t,n,r,o,i=[],s=[],a=-1,u=function(){for(o=o||e.once,r=t=!0;s.length;a=-1)for(n=s.shift();++a-1;)i.splice(n,1),n<=a&&a--}),this},has:function(e){return e?T.inArray(e,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=s=[],i=n="",this},disabled:function(){return!i},lock:function(){return o=s=[],n||t||(i=n=""),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},T.extend({Deferred:function(e){var t=[["notify","progress",T.Callbacks("memory"),T.Callbacks("memory"),2],["resolve","done",T.Callbacks("once memory"),T.Callbacks("once memory"),0,"resolved"],["reject","fail",T.Callbacks("once memory"),T.Callbacks("once memory"),1,"rejected"]],r="pending",o={state:function(){return r},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return T.Deferred(function(n){T.each(t,function(t,r){var o=b(e[r[4]])&&e[r[4]];i[r[1]](function(){var e=o&&o.apply(this,arguments);e&&b(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,o?[e]:arguments)})}),e=null}).promise()},then:function(e,r,o){function resolve(e,t,r,o){return function(){var s=this,a=arguments,u=function(){var n,u;if(!(e=i&&(r!==Thrower&&(s=void 0,a=[n]),t.rejectWith(s,a))}};e?c():(T.Deferred.getStackHook&&(c.stackTrace=T.Deferred.getStackHook()),n.setTimeout(c))}}var i=0;return T.Deferred(function(n){t[0][3].add(resolve(0,n,b(o)?o:Identity,n.notifyWith)),t[1][3].add(resolve(0,n,b(e)?e:Identity)),t[2][3].add(resolve(0,n,b(r)?r:Thrower))}).promise()},promise:function(e){return null!=e?T.extend(e,o):o}},i={};return T.each(t,function(e,n){var s=n[2],a=n[5];o[n[1]]=s.add,a&&s.add(function(){r=a},t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),s.add(n[3].fire),i[n[0]]=function(){return i[n[0]+"With"](this===i?void 0:this,arguments),this},i[n[0]+"With"]=s.fireWith}),o.promise(i),e&&e.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),o=c.call(arguments),i=T.Deferred(),s=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?c.call(arguments):n,--t||i.resolveWith(r,o)}};if(t<=1&&(adoptValue(e,i.done(s(n)).resolve,i.reject,!t),"pending"===i.state()||b(o[n]&&o[n].then)))return i.then();for(;n--;)adoptValue(o[n],s(n),i.reject);return i.promise()}});var L=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;T.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&L.test(e.name)&&n.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},T.readyException=function(e){n.setTimeout(function(){throw e})};var q=T.Deferred();T.fn.ready=function(e){return q.then(e).catch(function(e){T.readyException(e)}),this},T.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--T.readyWait:T.isReady)||(T.isReady=!0,!0!==e&&--T.readyWait>0||q.resolveWith(a,[T]))}}),T.ready.then=q.then,"complete"===a.readyState||"loading"!==a.readyState&&!a.documentElement.doScroll?n.setTimeout(T.ready):(a.addEventListener("DOMContentLoaded",completed),n.addEventListener("load",completed));var M=function(e,t,n,r,o,i,s){var a=0,u=e.length,c=null==n;if("object"===toType(n)){o=!0;for(a in n)M(e,t,a,n[a],!0,i,s)}else if(void 0!==r&&(o=!0,b(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(T(e),n)})),t))for(;a1,null,!0)},removeData:function(e){return this.each(function(){I.remove(this,e)})}}),T.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=R.get(e,t),n&&(!r||Array.isArray(n)?r=R.access(e,t,T.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=T.queue(e,t),r=n.length,o=n.shift(),i=T._queueHooks(e,t),s=function(){T.dequeue(e,t)};"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete i.stop,o.call(e,s,i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return R.get(e,n)||R.access(e,n,{empty:T.Callbacks("once memory").add(function(){R.remove(e,[t+"queue",n])})})}}),T.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,te=/^$|^module$|\/(?:java|ecma)script/i,ne={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ne.optgroup=ne.option,ne.tbody=ne.tfoot=ne.colgroup=ne.caption=ne.thead,ne.th=ne.td;var re=/<|&#?\w+;/;!function(){var e=a.createDocumentFragment(),t=e.appendChild(a.createElement("div")),n=a.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),y.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",y.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var oe=/^key/,ie=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,se=/^([^.]*)(?:\.(.+)|)/;T.event={global:{},add:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,d,h,v,g=R.get(e);if(g)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&T.find.matchesSelector(U,o),n.guid||(n.guid=T.guid++),(u=g.events)||(u=g.events={}),(s=g.handle)||(s=g.handle=function(t){return void 0!==T&&T.event.triggered!==t.type?T.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(P)||[""],c=t.length;c--;)a=se.exec(t[c])||[],d=v=a[1],h=(a[2]||"").split(".").sort(),d&&(f=T.event.special[d]||{},d=(o?f.delegateType:f.bindType)||d,f=T.event.special[d]||{},l=T.extend({type:d,origType:v,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&T.expr.match.needsContext.test(o),namespace:h.join(".")},i),(p=u[d])||(p=u[d]=[],p.delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,s)||e.addEventListener&&e.addEventListener(d,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),T.event.global[d]=!0)},remove:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,d,h,v,g=R.hasData(e)&&R.get(e);if(g&&(u=g.events)){for(t=(t||"").match(P)||[""],c=t.length;c--;)if(a=se.exec(t[c])||[],d=v=a[1],h=(a[2]||"").split(".").sort(),d){for(f=T.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=i=p.length;i--;)l=p[i],!o&&v!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));s&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,g.handle)||T.removeEvent(e,d,g.handle),delete u[d])}else for(d in u)T.event.remove(e,d+t[c],n,r,!0);T.isEmptyObject(u)&&R.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,s,a=T.event.fix(e),u=new Array(arguments.length),c=(R.get(this,"events")||{})[a.type]||[],l=T.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(i=[],s={},n=0;n-1:T.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,ue=/\s*$/g;T.extend({htmlPrefilter:function(e){return e.replace(ae,"<$1>")},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),u=X(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||T.isXMLDoc(e)))for(s=getAll(a),i=getAll(e),r=0,o=i.length;r0&&setGlobalEval(s,!u&&getAll(e,"script")),a},cleanData:function(e){for(var t,n,r,o=T.event.special,i=0;void 0!==(n=e[i]);i++)if(z(n)){if(t=n[R.expando]){if(t.events)for(r in t.events)o[r]?T.event.remove(n,r):T.removeEvent(n,r,t.handle);n[R.expando]=void 0}n[I.expando]&&(n[I.expando]=void 0)}}}),T.fn.extend({detach:function(e){return remove(this,e,!0)},remove:function(e){return remove(this,e)},text:function(e){return M(this,function(e){return void 0===e?T.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return domManip(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){manipulationTarget(this,e).appendChild(e)}})},prepend:function(){return domManip(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=manipulationTarget(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return domManip(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return domManip(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(T.cleanData(getAll(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return T.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ue.test(e)&&!ne[(ee.exec(e)||["",""])[1].toLowerCase()]){e=T.htmlPrefilter(e);try{for(;n1)}}),T.Tween=Tween,Tween.prototype={constructor:Tween,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||T.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(T.cssNumber[n]?"":"px")},cur:function(){var e=Tween.propHooks[this.prop];return e&&e.get?e.get(this):Tween.propHooks._default.get(this)},run:function(e){var t,n=Tween.propHooks[this.prop];return this.options.duration?this.pos=t=T.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Tween.propHooks._default.set(this),this}},Tween.prototype.init.prototype=Tween.prototype,Tween.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=T.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){T.fx.step[e.prop]?T.fx.step[e.prop](e):1!==e.elem.nodeType||!T.cssHooks[e.prop]&&null==e.elem.style[finalPropName(e.prop)]?e.elem[e.prop]=e.now:T.style(e.elem,e.prop,e.now+e.unit)}}},Tween.propHooks.scrollTop=Tween.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},T.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},T.fx=Tween.prototype.init,T.fx.step={};var we,Te,Ce=/^(?:toggle|show|hide)$/,Se=/queueHooks$/;T.Animation=T.extend(Animation,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return adjustCSS(n.elem,e,G.exec(t),n),n}]},tweener:function(e,t){b(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,o=e.length;r1)},removeAttr:function(e){return this.each(function(){T.removeAttr(this,e)})}}),T.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?T.prop(e,t,n):(1===i&&T.isXMLDoc(e)||(o=T.attrHooks[t.toLowerCase()]||(T.expr.match.bool.test(t)?ke:void 0)),void 0!==n?null===n?void T.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:(r=T.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(P);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),ke={set:function(e,t,n){return!1===t?T.removeAttr(e,n):e.setAttribute(n,n),n}},T.each(T.expr.match.bool.source.match(/\w+/g),function(e,t){var n=_e[t]||T.find.attr;_e[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=_e[s],_e[s]=o,o=null!=n(e,t,r)?s:null,_e[s]=i),o}});var je=/^(?:input|select|textarea|button)$/i,Ae=/^(?:a|area)$/i;T.fn.extend({prop:function(e,t){return M(this,T.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[T.propFix[e]||e]})}}),T.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&T.isXMLDoc(e)||(t=T.propFix[t]||t,o=T.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=T.find.attr(e,"tabindex");return t?parseInt(t,10):je.test(e.nodeName)||Ae.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),y.optSelected||(T.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),T.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){T.propFix[this.toLowerCase()]=this}),T.fn.extend({addClass:function(e){var t,n,r,o,i,s,a,u=0;if(b(e))return this.each(function(t){T(this).addClass(e.call(this,t,getClass(this)))});if(t=classesToArray(e),t.length)for(;n=this[u++];)if(o=getClass(n),r=1===n.nodeType&&" "+stripAndCollapse(o)+" "){for(s=0;i=t[s++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a=stripAndCollapse(r),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,o,i,s,a,u=0;if(b(e))return this.each(function(t){T(this).removeClass(e.call(this,t,getClass(this)))});if(!arguments.length)return this.attr("class","");if(t=classesToArray(e),t.length)for(;n=this[u++];)if(o=getClass(n),r=1===n.nodeType&&" "+stripAndCollapse(o)+" "){for(s=0;i=t[s++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");a=stripAndCollapse(r),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):b(e)?this.each(function(n){T(this).toggleClass(e.call(this,n,getClass(this),t),t)}):this.each(function(){var t,o,i,s;if(r)for(o=0,i=T(this),s=classesToArray(e);t=s[o++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=getClass(this),t&&R.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":R.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+stripAndCollapse(getClass(n))+" ").indexOf(t)>-1)return!0;return!1}});var Ee=/\r/g;T.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=b(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,T(this).val()):e,null==o?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=T.map(o,function(e){return null==e?"":e+""})),(t=T.valHooks[this.type]||T.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return(t=T.valHooks[o.type]||T.valHooks[o.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(Ee,""):null==n?"":n)}}}),T.extend({valHooks:{option:{get:function(e){var t=T.find.attr(e,"value");return null!=t?t:stripAndCollapse(T.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s="select-one"===e.type,a=s?null:[],u=s?i+1:o.length;for(r=i<0?u:s?i:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),T.each(["radio","checkbox"],function(){T.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=T.inArray(T(e).val(),t)>-1}},y.checkOn||(T.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in n;var Ne=/^(?:focusinfocus|focusoutblur)$/,De=function(e){e.stopPropagation()};T.extend(T.event,{trigger:function(e,t,r,o){var i,s,u,c,l,f,p,d,h=[r||a],g=v.call(e,"type")?e.type:e,m=v.call(e,"namespace")?e.namespace.split("."):[];if(s=d=u=r=r||a,3!==r.nodeType&&8!==r.nodeType&&!Ne.test(g+T.event.triggered)&&(g.indexOf(".")>-1&&(m=g.split("."),g=m.shift(),m.sort()),l=g.indexOf(":")<0&&"on"+g,e=e[T.expando]?e:new T.Event(g,"object"==typeof e&&e),e.isTrigger=o?2:3,e.namespace=m.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:T.makeArray(t,[e]),p=T.event.special[g]||{},o||!p.trigger||!1!==p.trigger.apply(r,t))){if(!o&&!p.noBubble&&!x(r)){for(c=p.delegateType||g,Ne.test(c+g)||(s=s.parentNode);s;s=s.parentNode)h.push(s),u=s;u===(r.ownerDocument||a)&&h.push(u.defaultView||u.parentWindow||n)}for(i=0;(s=h[i++])&&!e.isPropagationStopped();)d=s,e.type=i>1?c:p.bindType||g,f=(R.get(s,"events")||{})[e.type]&&R.get(s,"handle"),f&&f.apply(s,t),(f=l&&s[l])&&f.apply&&z(s)&&(e.result=f.apply(s,t),!1===e.result&&e.preventDefault());return e.type=g,o||e.isDefaultPrevented()||p._default&&!1!==p._default.apply(h.pop(),t)||!z(r)||l&&b(r[g])&&!x(r)&&(u=r[l],u&&(r[l]=null),T.event.triggered=g,e.isPropagationStopped()&&d.addEventListener(g,De),r[g](),e.isPropagationStopped()&&d.removeEventListener(g,De),T.event.triggered=void 0,u&&(r[l]=u)),e.result}},simulate:function(e,t,n){var r=T.extend(new T.Event,n,{type:e,isSimulated:!0});T.event.trigger(r,null,t)}}),T.fn.extend({trigger:function(e,t){return this.each(function(){T.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return T.event.trigger(e,t,n,!0)}}),y.focusin||T.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){T.event.simulate(t,e.target,T.event.fix(e))};T.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=R.access(r,t);o||r.addEventListener(e,n,!0),R.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=R.access(r,t)-1;o?R.access(r,t,o):(r.removeEventListener(e,n,!0),R.remove(r,t))}}});var Oe=n.location,Pe=Date.now(),Le=/\?/;T.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||T.error("Invalid XML: "+e),t};var qe=/\[\]$/,Me=/\r?\n/g,He=/^(?:submit|button|image|reset|file)$/i,Fe=/^(?:input|select|textarea|keygen)/i;T.param=function(e,t){var n,r=[],o=function(e,t){var n=b(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!T.isPlainObject(e))T.each(e,function(){o(this.name,this.value)});else for(n in e)buildParams(n,e[n],t,o);return r.join("&")},T.fn.extend({serialize:function(){return T.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=T.prop(this,"elements");return e?T.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!T(this).is(":disabled")&&Fe.test(this.nodeName)&&!He.test(e)&&(this.checked||!Z.test(e))}).map(function(e,t){var n=T(this).val();return null==n?null:Array.isArray(n)?T.map(n,function(e){return{name:t.name,value:e.replace(Me,"\r\n")}}):{name:t.name,value:n.replace(Me,"\r\n")}}).get()}});var ze=/%20/g,Re=/#.*$/,Ie=/([?&])_=[^&]*/,We=/^(.*?):[ \t]*([^\r\n]*)$/gm,Be=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,$e=/^(?:GET|HEAD)$/,Ge=/^\/\//,Ve={},Ue={},Xe="*/".concat("*"),Je=a.createElement("a");Je.href=Oe.href,T.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Oe.href,type:"GET",isLocal:Be.test(Oe.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Xe,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":T.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?ajaxExtend(ajaxExtend(e,T.ajaxSettings),t):ajaxExtend(T.ajaxSettings,e)},ajaxPrefilter:addToPrefiltersOrTransports(Ve),ajaxTransport:addToPrefiltersOrTransports(Ue),ajax:function(e,t){function done(e,t,s,a){var c,p,d,x,w,C=t;l||(l=!0,u&&n.clearTimeout(u),r=void 0,i=a||"",S.readyState=e>0?4:0,c=e>=200&&e<300||304===e,s&&(x=ajaxHandleResponses(h,S,s)),x=ajaxConvert(h,x,S,c),c?(h.ifModified&&(w=S.getResponseHeader("Last-Modified"),w&&(T.lastModified[o]=w),(w=S.getResponseHeader("etag"))&&(T.etag[o]=w)),204===e||"HEAD"===h.type?C="nocontent":304===e?C="notmodified":(C=x.state,p=x.data,d=x.error,c=!d)):(d=C,!e&&C||(C="error",e<0&&(e=0))),S.status=e,S.statusText=(t||C)+"",c?m.resolveWith(v,[p,C,S]):m.rejectWith(v,[S,C,d]),S.statusCode(b),b=void 0,f&&g.trigger(c?"ajaxSuccess":"ajaxError",[S,h,c?p:d]),y.fireWith(v,[S,C]),f&&(g.trigger("ajaxComplete",[S,h]),--T.active||T.event.trigger("ajaxStop")))}"object"==typeof e&&(t=e,e=void 0),t=t||{};var r,o,i,s,u,c,l,f,p,d,h=T.ajaxSetup({},t),v=h.context||h,g=h.context&&(v.nodeType||v.jquery)?T(v):T.event,m=T.Deferred(),y=T.Callbacks("once memory"),b=h.statusCode||{},x={},w={},C="canceled",S={readyState:0,getResponseHeader:function(e){var t;if(l){if(!s)for(s={};t=We.exec(i);)s[t[1].toLowerCase()+" "]=(s[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=s[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return l?i:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,x[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)S.always(e[S.status]);else for(t in e)b[t]=[b[t],e[t]];return this},abort:function(e){var t=e||C;return r&&r.abort(t),done(0,t),this}};if(m.promise(S),h.url=((e||h.url||Oe.href)+"").replace(Ge,Oe.protocol+"//"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(P)||[""],null==h.crossDomain){c=a.createElement("a");try{c.href=h.url,c.href=c.href,h.crossDomain=Je.protocol+"//"+Je.host!=c.protocol+"//"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=T.param(h.data,h.traditional)),inspectPrefiltersOrTransports(Ve,h,t,S),l)return S;f=T.event&&h.global,f&&0==T.active++&&T.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!$e.test(h.type),o=h.url.replace(Re,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(ze,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(Le.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ie,"$1"),d=(Le.test(o)?"&":"?")+"_="+Pe+++d),h.url=o+d),h.ifModified&&(T.lastModified[o]&&S.setRequestHeader("If-Modified-Since",T.lastModified[o]),T.etag[o]&&S.setRequestHeader("If-None-Match",T.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&S.setRequestHeader("Content-Type",h.contentType),S.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Xe+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)S.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(v,S,h)||l))return S.abort();if(C="abort",y.add(h.complete),S.done(h.success),S.fail(h.error),r=inspectPrefiltersOrTransports(Ue,h,t,S)){if(S.readyState=1,f&&g.trigger("ajaxSend",[S,h]),l)return S;h.async&&h.timeout>0&&(u=n.setTimeout(function(){S.abort("timeout")},h.timeout));try{l=!1,r.send(x,done)}catch(e){if(l)throw e;done(-1,e)}}else done(-1,"No Transport");return S},getJSON:function(e,t,n){return T.get(e,t,n,"json")},getScript:function(e,t){return T.get(e,void 0,t,"script")}}),T.each(["get","post"],function(e,t){T[t]=function(e,n,r,o){return b(n)&&(o=o||r,r=n,n=void 0),T.ajax(T.extend({url:e,type:t,dataType:o,data:n,success:r},T.isPlainObject(e)&&e))}}),T._evalUrl=function(e,t){return T.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){T.globalEval(e,t)}})},T.fn.extend({wrapAll:function(e){var t;return this[0]&&(b(e)&&(e=e.call(this[0])),t=T(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return b(e)?this.each(function(t){T(this).wrapInner(e.call(this,t))}):this.each(function(){var t=T(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b(e);return this.each(function(n){T(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){T(this).replaceWith(this.childNodes)}),this}}),T.expr.pseudos.hidden=function(e){return!T.expr.pseudos.visible(e)},T.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},T.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var Ye={0:200,1223:204},Qe=T.ajaxSettings.xhr();y.cors=!!Qe&&"withCredentials"in Qe,y.ajax=Qe=!!Qe,T.ajaxTransport(function(e){var t,r;if(y.cors||Qe&&!e.crossDomain)return{send:function(o,i){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);t=function(e){return function(){t&&(t=r=a.onload=a.onerror=a.onabort=a.ontimeout=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?i(0,"error"):i(a.status,a.statusText):i(Ye[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=t(),r=a.onerror=a.ontimeout=t("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&n.setTimeout(function(){t&&r()})},t=t("abort");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),T.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),T.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return T.globalEval(e),e}}}),T.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),T.ajaxTransport("script",function(e){if(e.crossDomain||e.scriptAttrs){var t,n;return{send:function(r,o){t=T("