From fa3d921e2df9fbf10ec3aec2cd8c92ad4c75ae3c Mon Sep 17 00:00:00 2001 From: Muhammad Date: Sun, 7 Apr 2024 12:43:39 +0500 Subject: [PATCH] [ADD] base modules --- kk_odoo_saas/__init__.py | 6 + kk_odoo_saas/__manifest__.py | 50 + kk_odoo_saas/controllers/__init__.py | 3 + kk_odoo_saas/controllers/logs_viewer.py | 17 + kk_odoo_saas/data/data.xml | 103 + kk_odoo_saas/data/email_templates.xml | 143 + kk_odoo_saas/models/__init__.py | 13 + kk_odoo_saas/models/cluster.py | 80 + kk_odoo_saas/models/k8s_config.py | 125 + kk_odoo_saas/models/models.py | 486 + kk_odoo_saas/models/product_template.py | 16 + kk_odoo_saas/models/res_config_settings.py | 34 + kk_odoo_saas/models/res_users.py | 0 kk_odoo_saas/models/saas_app_website.py | 102 + kk_odoo_saas/models/saas_package.py | 61 + .../models/saas_period_product_mixin.py | 54 + kk_odoo_saas/models/sale_order.py | 86 + kk_odoo_saas/models/sale_subscription.py | 20 + kk_odoo_saas/security/ir.model.access.csv | 17 + kk_odoo_saas/security/security.xml | 36 + kk_odoo_saas/static/description/icon.png | Bin 0 -> 118441 bytes kk_odoo_saas/static/src/css/bootstrap.css | 10037 +++++++++++++++ kk_odoo_saas/static/src/css/calculator.css | 171 + kk_odoo_saas/static/src/css/font-awesome.css | 2338 ++++ kk_odoo_saas/static/src/css/logs-viewer.css | 71 + kk_odoo_saas/static/src/img/add-users.png | Bin 0 -> 6516 bytes kk_odoo_saas/static/src/img/base.png | Bin 0 -> 39422 bytes kk_odoo_saas/static/src/img/default.png | Bin 0 -> 25193 bytes kk_odoo_saas/static/src/img/loader.gif | Bin 0 -> 24200 bytes kk_odoo_saas/static/src/img/starter_pack.png | Bin 0 -> 139708 bytes kk_odoo_saas/static/src/img/substr-users.png | Bin 0 -> 4628 bytes kk_odoo_saas/static/src/img/user.png | Bin 0 -> 12915 bytes kk_odoo_saas/static/src/js/jquery.js | 10364 ++++++++++++++++ kk_odoo_saas/static/src/js/logs-viewer.js | 169 + kk_odoo_saas/static/src/js/refresh_button.js | 29 + kk_odoo_saas/static/src/xml/base.xml | 10 + kk_odoo_saas/utils/__init__.py | 1 + kk_odoo_saas/utils/del_git_code.py | 52 + kk_odoo_saas/utils/deployment.py | 167 + kk_odoo_saas/utils/ingress.py | 235 + kk_odoo_saas/utils/k8s_deployment.py | 249 + kk_odoo_saas/utils/logs.py | 34 + kk_odoo_saas/utils/odoo_components.py | 37 + kk_odoo_saas/utils/pg_query.py | 61 + kk_odoo_saas/utils/pg_server.py | 50 + kk_odoo_saas/utils/pv_claim.py | 60 + kk_odoo_saas/utils/service.py | 69 + kk_odoo_saas/utils/utils.py | 29 + kk_odoo_saas/views/app_views.xml | 303 + kk_odoo_saas/views/assets.xml | 10 + kk_odoo_saas/views/config_views.xml | 274 + kk_odoo_saas/views/logs_viewer.xml | 49 + .../views/res_config_settings_views.xml | 53 + kk_odoo_saas/views/saas_app_website.xml | 75 + kk_odoo_saas/views/saas_package_views.xml | 73 + kk_odoo_saas/views/sale_subscription.xml | 15 + kk_odoo_saas/views/templates.xml | 66 + kk_odoo_saas/wizards/__init__.py | 2 + kk_odoo_saas/wizards/saas_app_delete.py | 31 + kk_odoo_saas/wizards/saas_app_delete.xml | 40 + kk_odoo_saas/wizards/update_docker_image.py | 99 + kk_odoo_saas/wizards/update_docker_image.xml | 73 + portal_stripe_payment/__init__.py | 2 + portal_stripe_payment/__manifest__.py | 34 + portal_stripe_payment/controllers/__init__.py | 1 + .../controllers/stripe_payment.py | 96 + portal_stripe_payment/models/__init__.py | 4 + portal_stripe_payment/models/account_move.py | 10 + portal_stripe_payment/models/models.py | 43 + portal_stripe_payment/models/res_partner.py | 10 + portal_stripe_payment/models/subscription.py | 117 + .../security/ir.model.access.csv | 2 + .../static/description/icon.png | Bin 0 -> 24871 bytes portal_stripe_payment/views/account_move.xml | 16 + portal_stripe_payment/views/res_partner.xml | 18 + .../views/sale_subscription.xml | 15 + portal_stripe_payment/views/views.xml | 34 + queue_job/README.rst | 384 + queue_job/__init__.py | 9 + queue_job/__manifest__.py | 29 + queue_job/controllers/__init__.py | 1 + queue_job/controllers/main.py | 144 + queue_job/data/queue_data.xml | 37 + queue_job/data/queue_job_function_data.xml | 6 + queue_job/exception.py | 43 + queue_job/fields.py | 118 + queue_job/i18n/de.po | 826 ++ queue_job/i18n/queue_job.pot | 782 ++ queue_job/i18n/zh_CN.po | 820 ++ queue_job/job.py | 736 ++ queue_job/jobrunner/__init__.py | 149 + queue_job/jobrunner/channels.py | 1060 ++ queue_job/jobrunner/runner.py | 520 + queue_job/models/__init__.py | 5 + queue_job/models/base.py | 191 + queue_job/models/ir_model_fields.py | 13 + queue_job/models/queue_job.py | 386 + queue_job/models/queue_job_channel.py | 94 + queue_job/models/queue_job_function.py | 253 + queue_job/post_init_hook.py | 33 + queue_job/readme/CONFIGURE.rst | 43 + queue_job/readme/CONTRIBUTORS.rst | 11 + queue_job/readme/DESCRIPTION.rst | 46 + queue_job/readme/HISTORY.rst | 18 + queue_job/readme/INSTALL.rst | 1 + queue_job/readme/ROADMAP.rst | 18 + queue_job/readme/USAGE.rst | 147 + queue_job/security/ir.model.access.csv | 6 + queue_job/security/security.xml | 27 + queue_job/static/description/icon.png | Bin 0 -> 2067 bytes queue_job/static/description/icon.svg | 150 + queue_job/static/description/index.html | 697 ++ queue_job/tests/__init__.py | 6 + queue_job/tests/common.py | 149 + queue_job/tests/test_json_field.py | 140 + queue_job/tests/test_model_job_channel.py | 50 + queue_job/tests/test_model_job_function.py | 56 + .../tests/test_queue_job_protected_write.py | 25 + queue_job/tests/test_runner_channels.py | 10 + queue_job/tests/test_runner_runner.py | 10 + queue_job/views/queue_job_channel_views.xml | 58 + queue_job/views/queue_job_function_views.xml | 58 + queue_job/views/queue_job_menus.xml | 34 + queue_job/views/queue_job_views.xml | 188 + queue_job/wizards/__init__.py | 2 + queue_job/wizards/queue_jobs_to_done.py | 15 + .../wizards/queue_jobs_to_done_views.xml | 34 + queue_job/wizards/queue_requeue_job.py | 25 + queue_job/wizards/queue_requeue_job_views.xml | 34 + queue_job_cron/README.rst | 94 + queue_job_cron/__init__.py | 1 + queue_job_cron/__manifest__.py | 14 + queue_job_cron/data/data.xml | 12 + queue_job_cron/i18n/de.po | 39 + queue_job_cron/i18n/queue_job_cron.pot | 49 + queue_job_cron/i18n/zh_CN.po | 37 + queue_job_cron/models/__init__.py | 1 + queue_job_cron/models/ir_cron.py | 61 + queue_job_cron/readme/CONFIGURATION.rst | 3 + queue_job_cron/readme/CONTRIBUTORS.rst | 1 + queue_job_cron/readme/DESCRIPTION.rst | 2 + queue_job_cron/readme/INSTALL.rst | 3 + queue_job_cron/readme/USAGE.rst | 9 + queue_job_cron/static/description/icon.png | Bin 0 -> 9455 bytes queue_job_cron/static/description/index.html | 439 + queue_job_cron/tests/__init__.py | 1 + queue_job_cron/tests/test_queue_job_cron.py | 41 + queue_job_cron/views/ir_cron_view.xml | 38 + queue_job_subscribe/README.rst | 62 + queue_job_subscribe/__init__.py | 3 + queue_job_subscribe/__manifest__.py | 14 + queue_job_subscribe/i18n/ar.po | 47 + queue_job_subscribe/i18n/bg.po | 46 + queue_job_subscribe/i18n/ca.po | 46 + queue_job_subscribe/i18n/da.po | 46 + queue_job_subscribe/i18n/de.po | 60 + queue_job_subscribe/i18n/el_GR.po | 47 + queue_job_subscribe/i18n/es.po | 46 + queue_job_subscribe/i18n/es_ES.po | 47 + queue_job_subscribe/i18n/fi.po | 46 + queue_job_subscribe/i18n/fr.po | 49 + queue_job_subscribe/i18n/fr_CH.po | 47 + queue_job_subscribe/i18n/hr.po | 47 + queue_job_subscribe/i18n/hr_HR.po | 48 + queue_job_subscribe/i18n/hu.po | 46 + queue_job_subscribe/i18n/it.po | 46 + queue_job_subscribe/i18n/nl.po | 46 + queue_job_subscribe/i18n/pt_BR.po | 55 + .../i18n/queue_job_subscribe.pot | 41 + queue_job_subscribe/i18n/sl.po | 60 + queue_job_subscribe/i18n/tr.po | 46 + queue_job_subscribe/i18n/tr_TR.po | 47 + queue_job_subscribe/i18n/zh_CN.po | 48 + queue_job_subscribe/models/__init__.py | 5 + queue_job_subscribe/models/queue_job.py | 13 + queue_job_subscribe/models/res_users.py | 18 + .../static/description/icon.png | Bin 0 -> 9455 bytes queue_job_subscribe/tests/__init__.py | 4 + .../tests/test_job_subscribe.py | 87 + queue_job_subscribe/views/res_users_view.xml | 17 + smile_log/README.rst | 134 + smile_log/__init__.py | 6 + smile_log/__manifest__.py | 33 + smile_log/i18n/fr.po | 111 + smile_log/models/__init__.py | 5 + smile_log/models/smile_log.py | 65 + smile_log/security/ir.model.access.csv | 2 + smile_log/security/smile_log_security.xml | 10 + smile_log/static/description/action.png | Bin 0 -> 76844 bytes smile_log/static/description/exported_log.png | Bin 0 -> 132711 bytes smile_log/static/description/icon.png | Bin 0 -> 9433 bytes smile_log/static/description/index.html | 686 + .../inherit_and_import_smile_log.png | Bin 0 -> 43147 bytes smile_log/static/description/logs.png | Bin 0 -> 111248 bytes smile_log/static/description/manifest.png | Bin 0 -> 21896 bytes .../static/description/scheduled_action.png | Bin 0 -> 49073 bytes .../static/description/smile_logs_user.png | Bin 0 -> 60348 bytes smile_log/tools/__init__.py | 6 + smile_log/tools/db_handler.py | 64 + smile_log/tools/db_logger.py | 84 + smile_log/tools/misc.py | 23 + smile_log/views/smile_log_view.xml | 69 + web_cohort/__init__.py | 6 + web_cohort/__manifest__.py | 15 + web_cohort/controllers/__init__.py | 4 + web_cohort/controllers/main.py | 102 + web_cohort/i18n/ar.po | 174 + web_cohort/i18n/az.po | 232 + web_cohort/i18n/bg.po | 172 + web_cohort/i18n/bn.po | 171 + web_cohort/i18n/bs.po | 236 + web_cohort/i18n/ca.po | 172 + web_cohort/i18n/ckb.po | 169 + web_cohort/i18n/cs.po | 172 + web_cohort/i18n/da.po | 177 + web_cohort/i18n/de.po | 171 + web_cohort/i18n/el.po | 170 + web_cohort/i18n/es.po | 173 + web_cohort/i18n/es_MX.po | 170 + web_cohort/i18n/et.po | 174 + web_cohort/i18n/eu.po | 173 + web_cohort/i18n/fa.po | 171 + web_cohort/i18n/fi.po | 175 + web_cohort/i18n/fr.po | 174 + web_cohort/i18n/gu.po | 235 + web_cohort/i18n/he.po | 172 + web_cohort/i18n/hi.po | 169 + web_cohort/i18n/hr.po | 176 + web_cohort/i18n/hu.po | 173 + web_cohort/i18n/id.po | 174 + web_cohort/i18n/is.po | 238 + web_cohort/i18n/it.po | 173 + web_cohort/i18n/ja.po | 172 + web_cohort/i18n/ka.po | 172 + web_cohort/i18n/km.po | 170 + web_cohort/i18n/ko.po | 172 + web_cohort/i18n/lb.po | 156 + web_cohort/i18n/lt.po | 174 + web_cohort/i18n/lv.po | 171 + web_cohort/i18n/mn.po | 171 + web_cohort/i18n/nb.po | 171 + web_cohort/i18n/nl.po | 171 + web_cohort/i18n/pl.po | 176 + web_cohort/i18n/pt.po | 174 + web_cohort/i18n/pt_BR.po | 179 + web_cohort/i18n/ro.po | 171 + web_cohort/i18n/ru.po | 173 + web_cohort/i18n/si.po | 165 + web_cohort/i18n/sk.po | 173 + web_cohort/i18n/sl.po | 172 + web_cohort/i18n/sr.po | 236 + web_cohort/i18n/sv.po | 173 + web_cohort/i18n/th.po | 172 + web_cohort/i18n/tr.po | 178 + web_cohort/i18n/uk.po | 171 + web_cohort/i18n/ur.po | 165 + web_cohort/i18n/vi.po | 174 + web_cohort/i18n/web_cohort.pot | 165 + web_cohort/i18n/zh_CN.po | 176 + web_cohort/i18n/zh_TW.po | 169 + web_cohort/models/__init__.py | 6 + web_cohort/models/ir_action_act_window.py | 10 + web_cohort/models/ir_ui_view.py | 8 + web_cohort/models/models.py | 181 + web_cohort/static/src/js/cohort_controller.js | 207 + web_cohort/static/src/js/cohort_model.js | 143 + web_cohort/static/src/js/cohort_renderer.js | 83 + web_cohort/static/src/js/cohort_view.js | 136 + web_cohort/static/src/js/sample_server.js | 92 + web_cohort/static/src/scss/web_cohort.scss | 67 + web_cohort/static/src/xml/web_cohort.xml | 157 + web_cohort/static/tests/cohort_tests.js | 672 + web_cohort/static/tests/mock_server.js | 171 + web_cohort/validation.py | 32 + web_cohort/views/assets.xml | 22 + web_cohort/views/cohort.rng | 104 + 276 files changed, 51186 insertions(+) create mode 100755 kk_odoo_saas/__init__.py create mode 100755 kk_odoo_saas/__manifest__.py create mode 100755 kk_odoo_saas/controllers/__init__.py create mode 100755 kk_odoo_saas/controllers/logs_viewer.py create mode 100755 kk_odoo_saas/data/data.xml create mode 100755 kk_odoo_saas/data/email_templates.xml create mode 100755 kk_odoo_saas/models/__init__.py create mode 100755 kk_odoo_saas/models/cluster.py create mode 100755 kk_odoo_saas/models/k8s_config.py create mode 100755 kk_odoo_saas/models/models.py create mode 100755 kk_odoo_saas/models/product_template.py create mode 100755 kk_odoo_saas/models/res_config_settings.py create mode 100755 kk_odoo_saas/models/res_users.py create mode 100755 kk_odoo_saas/models/saas_app_website.py create mode 100755 kk_odoo_saas/models/saas_package.py create mode 100755 kk_odoo_saas/models/saas_period_product_mixin.py create mode 100755 kk_odoo_saas/models/sale_order.py create mode 100755 kk_odoo_saas/models/sale_subscription.py create mode 100755 kk_odoo_saas/security/ir.model.access.csv create mode 100755 kk_odoo_saas/security/security.xml create mode 100755 kk_odoo_saas/static/description/icon.png create mode 100755 kk_odoo_saas/static/src/css/bootstrap.css create mode 100755 kk_odoo_saas/static/src/css/calculator.css create mode 100755 kk_odoo_saas/static/src/css/font-awesome.css create mode 100755 kk_odoo_saas/static/src/css/logs-viewer.css create mode 100755 kk_odoo_saas/static/src/img/add-users.png create mode 100755 kk_odoo_saas/static/src/img/base.png create mode 100755 kk_odoo_saas/static/src/img/default.png create mode 100755 kk_odoo_saas/static/src/img/loader.gif create mode 100755 kk_odoo_saas/static/src/img/starter_pack.png create mode 100755 kk_odoo_saas/static/src/img/substr-users.png create mode 100755 kk_odoo_saas/static/src/img/user.png create mode 100755 kk_odoo_saas/static/src/js/jquery.js create mode 100755 kk_odoo_saas/static/src/js/logs-viewer.js create mode 100755 kk_odoo_saas/static/src/js/refresh_button.js create mode 100755 kk_odoo_saas/static/src/xml/base.xml create mode 100755 kk_odoo_saas/utils/__init__.py create mode 100644 kk_odoo_saas/utils/del_git_code.py create mode 100755 kk_odoo_saas/utils/deployment.py create mode 100755 kk_odoo_saas/utils/ingress.py create mode 100755 kk_odoo_saas/utils/k8s_deployment.py create mode 100755 kk_odoo_saas/utils/logs.py create mode 100755 kk_odoo_saas/utils/odoo_components.py create mode 100755 kk_odoo_saas/utils/pg_query.py create mode 100755 kk_odoo_saas/utils/pg_server.py create mode 100755 kk_odoo_saas/utils/pv_claim.py create mode 100755 kk_odoo_saas/utils/service.py create mode 100755 kk_odoo_saas/utils/utils.py create mode 100755 kk_odoo_saas/views/app_views.xml create mode 100755 kk_odoo_saas/views/assets.xml create mode 100755 kk_odoo_saas/views/config_views.xml create mode 100755 kk_odoo_saas/views/logs_viewer.xml create mode 100755 kk_odoo_saas/views/res_config_settings_views.xml create mode 100755 kk_odoo_saas/views/saas_app_website.xml create mode 100755 kk_odoo_saas/views/saas_package_views.xml create mode 100755 kk_odoo_saas/views/sale_subscription.xml create mode 100755 kk_odoo_saas/views/templates.xml create mode 100755 kk_odoo_saas/wizards/__init__.py create mode 100755 kk_odoo_saas/wizards/saas_app_delete.py create mode 100755 kk_odoo_saas/wizards/saas_app_delete.xml create mode 100755 kk_odoo_saas/wizards/update_docker_image.py create mode 100755 kk_odoo_saas/wizards/update_docker_image.xml create mode 100755 portal_stripe_payment/__init__.py create mode 100755 portal_stripe_payment/__manifest__.py create mode 100755 portal_stripe_payment/controllers/__init__.py create mode 100755 portal_stripe_payment/controllers/stripe_payment.py create mode 100755 portal_stripe_payment/models/__init__.py create mode 100755 portal_stripe_payment/models/account_move.py create mode 100755 portal_stripe_payment/models/models.py create mode 100755 portal_stripe_payment/models/res_partner.py create mode 100755 portal_stripe_payment/models/subscription.py create mode 100755 portal_stripe_payment/security/ir.model.access.csv create mode 100755 portal_stripe_payment/static/description/icon.png create mode 100755 portal_stripe_payment/views/account_move.xml create mode 100755 portal_stripe_payment/views/res_partner.xml create mode 100755 portal_stripe_payment/views/sale_subscription.xml create mode 100755 portal_stripe_payment/views/views.xml create mode 100755 queue_job/README.rst create mode 100755 queue_job/__init__.py create mode 100755 queue_job/__manifest__.py create mode 100755 queue_job/controllers/__init__.py create mode 100755 queue_job/controllers/main.py create mode 100755 queue_job/data/queue_data.xml create mode 100755 queue_job/data/queue_job_function_data.xml create mode 100755 queue_job/exception.py create mode 100755 queue_job/fields.py create mode 100755 queue_job/i18n/de.po create mode 100755 queue_job/i18n/queue_job.pot create mode 100755 queue_job/i18n/zh_CN.po create mode 100755 queue_job/job.py create mode 100755 queue_job/jobrunner/__init__.py create mode 100755 queue_job/jobrunner/channels.py create mode 100755 queue_job/jobrunner/runner.py create mode 100755 queue_job/models/__init__.py create mode 100755 queue_job/models/base.py create mode 100755 queue_job/models/ir_model_fields.py create mode 100755 queue_job/models/queue_job.py create mode 100755 queue_job/models/queue_job_channel.py create mode 100755 queue_job/models/queue_job_function.py create mode 100755 queue_job/post_init_hook.py create mode 100755 queue_job/readme/CONFIGURE.rst create mode 100755 queue_job/readme/CONTRIBUTORS.rst create mode 100755 queue_job/readme/DESCRIPTION.rst create mode 100755 queue_job/readme/HISTORY.rst create mode 100755 queue_job/readme/INSTALL.rst create mode 100755 queue_job/readme/ROADMAP.rst create mode 100755 queue_job/readme/USAGE.rst create mode 100755 queue_job/security/ir.model.access.csv create mode 100755 queue_job/security/security.xml create mode 100755 queue_job/static/description/icon.png create mode 100755 queue_job/static/description/icon.svg create mode 100755 queue_job/static/description/index.html create mode 100755 queue_job/tests/__init__.py create mode 100755 queue_job/tests/common.py create mode 100755 queue_job/tests/test_json_field.py create mode 100755 queue_job/tests/test_model_job_channel.py create mode 100755 queue_job/tests/test_model_job_function.py create mode 100755 queue_job/tests/test_queue_job_protected_write.py create mode 100755 queue_job/tests/test_runner_channels.py create mode 100755 queue_job/tests/test_runner_runner.py create mode 100755 queue_job/views/queue_job_channel_views.xml create mode 100755 queue_job/views/queue_job_function_views.xml create mode 100755 queue_job/views/queue_job_menus.xml create mode 100755 queue_job/views/queue_job_views.xml create mode 100755 queue_job/wizards/__init__.py create mode 100755 queue_job/wizards/queue_jobs_to_done.py create mode 100755 queue_job/wizards/queue_jobs_to_done_views.xml create mode 100755 queue_job/wizards/queue_requeue_job.py create mode 100755 queue_job/wizards/queue_requeue_job_views.xml create mode 100755 queue_job_cron/README.rst create mode 100755 queue_job_cron/__init__.py create mode 100755 queue_job_cron/__manifest__.py create mode 100755 queue_job_cron/data/data.xml create mode 100755 queue_job_cron/i18n/de.po create mode 100755 queue_job_cron/i18n/queue_job_cron.pot create mode 100755 queue_job_cron/i18n/zh_CN.po create mode 100755 queue_job_cron/models/__init__.py create mode 100755 queue_job_cron/models/ir_cron.py create mode 100755 queue_job_cron/readme/CONFIGURATION.rst create mode 100755 queue_job_cron/readme/CONTRIBUTORS.rst create mode 100755 queue_job_cron/readme/DESCRIPTION.rst create mode 100755 queue_job_cron/readme/INSTALL.rst create mode 100755 queue_job_cron/readme/USAGE.rst create mode 100755 queue_job_cron/static/description/icon.png create mode 100755 queue_job_cron/static/description/index.html create mode 100755 queue_job_cron/tests/__init__.py create mode 100755 queue_job_cron/tests/test_queue_job_cron.py create mode 100755 queue_job_cron/views/ir_cron_view.xml create mode 100755 queue_job_subscribe/README.rst create mode 100755 queue_job_subscribe/__init__.py create mode 100755 queue_job_subscribe/__manifest__.py create mode 100755 queue_job_subscribe/i18n/ar.po create mode 100755 queue_job_subscribe/i18n/bg.po create mode 100755 queue_job_subscribe/i18n/ca.po create mode 100755 queue_job_subscribe/i18n/da.po create mode 100755 queue_job_subscribe/i18n/de.po create mode 100755 queue_job_subscribe/i18n/el_GR.po create mode 100755 queue_job_subscribe/i18n/es.po create mode 100755 queue_job_subscribe/i18n/es_ES.po create mode 100755 queue_job_subscribe/i18n/fi.po create mode 100755 queue_job_subscribe/i18n/fr.po create mode 100755 queue_job_subscribe/i18n/fr_CH.po create mode 100755 queue_job_subscribe/i18n/hr.po create mode 100755 queue_job_subscribe/i18n/hr_HR.po create mode 100755 queue_job_subscribe/i18n/hu.po create mode 100755 queue_job_subscribe/i18n/it.po create mode 100755 queue_job_subscribe/i18n/nl.po create mode 100755 queue_job_subscribe/i18n/pt_BR.po create mode 100755 queue_job_subscribe/i18n/queue_job_subscribe.pot create mode 100755 queue_job_subscribe/i18n/sl.po create mode 100755 queue_job_subscribe/i18n/tr.po create mode 100755 queue_job_subscribe/i18n/tr_TR.po create mode 100755 queue_job_subscribe/i18n/zh_CN.po create mode 100755 queue_job_subscribe/models/__init__.py create mode 100755 queue_job_subscribe/models/queue_job.py create mode 100755 queue_job_subscribe/models/res_users.py create mode 100755 queue_job_subscribe/static/description/icon.png create mode 100755 queue_job_subscribe/tests/__init__.py create mode 100755 queue_job_subscribe/tests/test_job_subscribe.py create mode 100755 queue_job_subscribe/views/res_users_view.xml create mode 100755 smile_log/README.rst create mode 100755 smile_log/__init__.py create mode 100755 smile_log/__manifest__.py create mode 100755 smile_log/i18n/fr.po create mode 100755 smile_log/models/__init__.py create mode 100755 smile_log/models/smile_log.py create mode 100755 smile_log/security/ir.model.access.csv create mode 100755 smile_log/security/smile_log_security.xml create mode 100755 smile_log/static/description/action.png create mode 100755 smile_log/static/description/exported_log.png create mode 100755 smile_log/static/description/icon.png create mode 100755 smile_log/static/description/index.html create mode 100755 smile_log/static/description/inherit_and_import_smile_log.png create mode 100755 smile_log/static/description/logs.png create mode 100755 smile_log/static/description/manifest.png create mode 100755 smile_log/static/description/scheduled_action.png create mode 100755 smile_log/static/description/smile_logs_user.png create mode 100755 smile_log/tools/__init__.py create mode 100755 smile_log/tools/db_handler.py create mode 100755 smile_log/tools/db_logger.py create mode 100755 smile_log/tools/misc.py create mode 100755 smile_log/views/smile_log_view.xml create mode 100755 web_cohort/__init__.py create mode 100755 web_cohort/__manifest__.py create mode 100755 web_cohort/controllers/__init__.py create mode 100755 web_cohort/controllers/main.py create mode 100755 web_cohort/i18n/ar.po create mode 100755 web_cohort/i18n/az.po create mode 100755 web_cohort/i18n/bg.po create mode 100755 web_cohort/i18n/bn.po create mode 100755 web_cohort/i18n/bs.po create mode 100755 web_cohort/i18n/ca.po create mode 100755 web_cohort/i18n/ckb.po create mode 100755 web_cohort/i18n/cs.po create mode 100755 web_cohort/i18n/da.po create mode 100755 web_cohort/i18n/de.po create mode 100755 web_cohort/i18n/el.po create mode 100755 web_cohort/i18n/es.po create mode 100755 web_cohort/i18n/es_MX.po create mode 100755 web_cohort/i18n/et.po create mode 100755 web_cohort/i18n/eu.po create mode 100755 web_cohort/i18n/fa.po create mode 100755 web_cohort/i18n/fi.po create mode 100755 web_cohort/i18n/fr.po create mode 100755 web_cohort/i18n/gu.po create mode 100755 web_cohort/i18n/he.po create mode 100755 web_cohort/i18n/hi.po create mode 100755 web_cohort/i18n/hr.po create mode 100755 web_cohort/i18n/hu.po create mode 100755 web_cohort/i18n/id.po create mode 100755 web_cohort/i18n/is.po create mode 100755 web_cohort/i18n/it.po create mode 100755 web_cohort/i18n/ja.po create mode 100755 web_cohort/i18n/ka.po create mode 100755 web_cohort/i18n/km.po create mode 100755 web_cohort/i18n/ko.po create mode 100755 web_cohort/i18n/lb.po create mode 100755 web_cohort/i18n/lt.po create mode 100755 web_cohort/i18n/lv.po create mode 100755 web_cohort/i18n/mn.po create mode 100755 web_cohort/i18n/nb.po create mode 100755 web_cohort/i18n/nl.po create mode 100755 web_cohort/i18n/pl.po create mode 100755 web_cohort/i18n/pt.po create mode 100755 web_cohort/i18n/pt_BR.po create mode 100755 web_cohort/i18n/ro.po create mode 100755 web_cohort/i18n/ru.po create mode 100755 web_cohort/i18n/si.po create mode 100755 web_cohort/i18n/sk.po create mode 100755 web_cohort/i18n/sl.po create mode 100755 web_cohort/i18n/sr.po create mode 100755 web_cohort/i18n/sv.po create mode 100755 web_cohort/i18n/th.po create mode 100755 web_cohort/i18n/tr.po create mode 100755 web_cohort/i18n/uk.po create mode 100755 web_cohort/i18n/ur.po create mode 100755 web_cohort/i18n/vi.po create mode 100755 web_cohort/i18n/web_cohort.pot create mode 100755 web_cohort/i18n/zh_CN.po create mode 100755 web_cohort/i18n/zh_TW.po create mode 100755 web_cohort/models/__init__.py create mode 100755 web_cohort/models/ir_action_act_window.py create mode 100755 web_cohort/models/ir_ui_view.py create mode 100755 web_cohort/models/models.py create mode 100755 web_cohort/static/src/js/cohort_controller.js create mode 100755 web_cohort/static/src/js/cohort_model.js create mode 100755 web_cohort/static/src/js/cohort_renderer.js create mode 100755 web_cohort/static/src/js/cohort_view.js create mode 100755 web_cohort/static/src/js/sample_server.js create mode 100755 web_cohort/static/src/scss/web_cohort.scss create mode 100755 web_cohort/static/src/xml/web_cohort.xml create mode 100755 web_cohort/static/tests/cohort_tests.js create mode 100755 web_cohort/static/tests/mock_server.js create mode 100755 web_cohort/validation.py create mode 100755 web_cohort/views/assets.xml create mode 100755 web_cohort/views/cohort.rng diff --git a/kk_odoo_saas/__init__.py b/kk_odoo_saas/__init__.py new file mode 100755 index 0000000..078dbde --- /dev/null +++ b/kk_odoo_saas/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- + +from . import controllers +from . import models +from . import utils +from . import wizards diff --git a/kk_odoo_saas/__manifest__.py b/kk_odoo_saas/__manifest__.py new file mode 100755 index 0000000..d1c9a71 --- /dev/null +++ b/kk_odoo_saas/__manifest__.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +{ + 'name': "CT Odoo SaaS", + + 'summary': """ + Out of the Box SaaS Module based on Kubernetes""", + + 'description': """ + Out of the Box SaaS Module based on Kubernetes + """, + + 'author': "Muhammad Awais", + 'website': "https://codetuple.io", + 'category': 'Uncategorized', + 'version': '2.0.0', + + # any module necessary for this one to work correctly + 'depends': ['base', 'smile_log', 'website_sale', 'product', + 'portal', 'auth_signup_verify_email', 'sale_subscription', + 'queue_job'], + + 'external_dependencies': { + 'python': [ + 'kubernetes', + ], + }, + # always loaded + 'data': [ + "security/security.xml", + 'security/ir.model.access.csv', + 'wizards/saas_app_delete.xml', + 'wizards/update_docker_image.xml', + 'views/app_views.xml', + 'views/config_views.xml', + 'views/assets.xml', + 'views/saas_app_website.xml', + 'views/templates.xml', + 'views/sale_subscription.xml', + 'views/logs_viewer.xml', + 'views/res_config_settings_views.xml', + 'views/saas_package_views.xml', + 'data/data.xml', + 'data/email_templates.xml', + ], + 'qweb': [ + 'static/src/xml/base.xml', + ], + "application": True, + +} diff --git a/kk_odoo_saas/controllers/__init__.py b/kk_odoo_saas/controllers/__init__.py new file mode 100755 index 0000000..5968e43 --- /dev/null +++ b/kk_odoo_saas/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import logs_viewer diff --git a/kk_odoo_saas/controllers/logs_viewer.py b/kk_odoo_saas/controllers/logs_viewer.py new file mode 100755 index 0000000..52ab0e0 --- /dev/null +++ b/kk_odoo_saas/controllers/logs_viewer.py @@ -0,0 +1,17 @@ +from odoo.http import route, request, Controller +import logging +from odoo.addons.portal.controllers.portal import CustomerPortal + +_logger = logging.getLogger(__name__) + + +class SaaSAppsLogViewer(CustomerPortal): + @route("/saas/instance/", type="http", auth="user", methods=['GET'], website=True) + def saas_app_log_viewer(self, app_id, **values): + saas_app = request.env["kk_odoo_saas.app"].sudo().browse(app_id) + if request.params.get('_'): + logs = saas_app.get_timed_pod_logs(since_seconds=5) + return logs + return request.render( + "kk_odoo_saas.saas_app_log_viewer", values + ) diff --git a/kk_odoo_saas/data/data.xml b/kk_odoo_saas/data/data.xml new file mode 100755 index 0000000..7bea006 --- /dev/null +++ b/kk_odoo_saas/data/data.xml @@ -0,0 +1,103 @@ + + + + + + Subscription (SaaS) + 30 + select + + + + Annually + + 10 + + + + Monthly + + 20 + + + + Trial + + 30 + + + + + Users + + + + service + + 0 + + + + + + + + + + + + + + 120 + + + + 12.5 + + + + 0 + + + + + + + + + Backup Name + saas_app.backup + BACKUP + 6 + + + + \ No newline at end of file diff --git a/kk_odoo_saas/data/email_templates.xml b/kk_odoo_saas/data/email_templates.xml new file mode 100755 index 0000000..be38f7a --- /dev/null +++ b/kk_odoo_saas/data/email_templates.xml @@ -0,0 +1,143 @@ + + + + + + + KK SaaS: App Invitation + + Here are the Credentials of your Instance + "${object.admin_user.company_id.name | safe}" <${(object.admin_user.company_id.email ) | safe}> + ${object.admin_user.email_formatted | safe} + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + + +
+ Welcome to SaaS +
+ + ${object.admin_user.name} + +
+ ${object.admin_user.company_id.name} +
+
+
+
+ + + + + + + +
+
+ Dear ${object.admin_user.name}, +
+
+ You have been invited by ${object.create_uid.name} of + ${object.admin_user.company_id.name} to connect on SaaS App. + % set website_url = object.get_url() +
+ Your SaaS domain is: + + ${website_url} + +
+ Your sign in email is: + + ${object.admin_user.email} + + +
+ Your Password is: + +

${object.login_pwd}

+
+
+ +
+ +
+
+ Enjoy SaaS! +
+ --
The ${object.admin_user.company_id.name} Team +
+
+
+
+
+ + + + + + + +
+ ${object.admin_user.company_id.name} +
+ ${object.admin_user.company_id.phone} + % if object.admin_user.company_id.email + | + + ${object.admin_user.company_id.email} + + % endif + % if object.admin_user.company_id.website + | + + ${object.admin_user.company_id.website} + + % endif +
+
+
+
+ ${object.admin_user.lang} + +
+ +
+
\ No newline at end of file diff --git a/kk_odoo_saas/models/__init__.py b/kk_odoo_saas/models/__init__.py new file mode 100755 index 0000000..81612c8 --- /dev/null +++ b/kk_odoo_saas/models/__init__.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import k8s_config +from . import saas_period_product_mixin +from . import product_template +from . import saas_app_website +from . import sale_subscription +from . import sale_order +from . import res_config_settings +from . import saas_package + + diff --git a/kk_odoo_saas/models/cluster.py b/kk_odoo_saas/models/cluster.py new file mode 100755 index 0000000..b7d72c6 --- /dev/null +++ b/kk_odoo_saas/models/cluster.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields + + +class SaasK8sClusterNS(models.Model): + _name = 'kk_odoo_saas.app.cluster.ns' + _description = 'SaaS Cluster NameSpace' + + name = fields.Char() + status = fields.Char() + age = fields.Char() + all_json = fields.Text('Complete json') + + +class SaasK8sClusterPod(models.Model): + _name = 'kk_odoo_saas.app.cluster.pod' + _description = 'SaaS Cluster Pod' + + name = fields.Char() + ns = fields.Char() + ready = fields.Char() + status = fields.Char() + restarts = fields.Char() + age = fields.Char() + all_json = fields.Text('Complete json') + + +class SaasK8sClusterDeployment(models.Model): + _name = 'kk_odoo_saas.app.cluster.deployment' + _description = 'SaaS Cluster Deployment' + + name = fields.Char() + ns = fields.Char() + ready = fields.Char() + age = fields.Char() + all_json = fields.Text('Complete json') + + +class SaasK8sClusterIngress(models.Model): + _name = 'kk_odoo_saas.app.cluster.ingress' + _description = 'SaaS Cluster Ingress' + + name = fields.Char() + ns = fields.Char() + hosts = fields.Char() + ing_class = fields.Char() + addresses = fields.Char() + ports = fields.Char() + age = fields.Char() + all_json = fields.Text('Complete json') + + +class SaasK8sClusterService(models.Model): + _name = 'kk_odoo_saas.app.cluster.service' + _description = 'SaaS Cluster Service' + + name = fields.Char() + type_ = fields.Char() + cluster_ip = fields.Char() + external_ip = fields.Char() + ports = fields.Char() + age = fields.Char() + all_json = fields.Text('Complete json') + + +class SaasK8sClusterPV(models.Model): + _name = 'kk_odoo_saas.app.cluster.pv' + _description = 'SaaS Cluster PV' + + name = fields.Char() + capacity = fields.Char() + access_modes = fields.Char() + reclaim_policy = fields.Char() + status = fields.Char() + claim = fields.Char() + storage_class = fields.Char() + reason = fields.Char() + age = fields.Char() + all_json = fields.Text('Complete json') diff --git a/kk_odoo_saas/models/k8s_config.py b/kk_odoo_saas/models/k8s_config.py new file mode 100755 index 0000000..85bc06e --- /dev/null +++ b/kk_odoo_saas/models/k8s_config.py @@ -0,0 +1,125 @@ +import psycopg2 +from odoo import models, fields, api +from kubernetes import config, client +from odoo.exceptions import UserError +import yaml +import logging + +_logger = logging.getLogger(__name__) + +class SaaSAppK8sConfig(models.Model): + _name = 'kk_odoo_saas.k8s.config' + _description = 'Kubernetes Cluster Configuration' + name = fields.Char() + config_file = fields.Text('Yaml Configuration File') + cluster_name = fields.Char('') + namespaces = fields.Text('Namespaces in Cluster') + domain_name = fields.Char('Domain Name') + + def check_connectivity(self): + if self.config_file: + try: + data2 = yaml.safe_load(self.config_file) + config.load_kube_config_from_dict(data2) + v1 = client.CoreV1Api() + response = v1.list_namespace() + nss = [] + for namespace in response.items: + nss.append(namespace.metadata.name) + nl = '\n' + self.namespaces = nl.join(nss) + except config.config_exception.ConfigException as e: + raise UserError("Unable to Connect K8s Cluster") + else: + raise UserError("Please Add config file") + + def validate_domain_name(self): + if self.domain_name: + pass + + def get_default_config(self): + for conf in self.search([], limit=1): + return conf + + def update_cluster_nodes(self): + if self.config_file: + try: + data2 = yaml.safe_load(self.config_file) + config.load_kube_config_from_dict(data2) + v1 = client.CoreV1Api() + response = v1.list_node() + node_env = self.env['kk_odoo_saas.k8s.node'] + if response: + node_env.search([]).unlink() + for node in response.items: + node_env.create({'name': node.metadata.name, 'labels': str(node.metadata.labels), 'annotations': str(node.metadata.annotations), 'taints': str(node.spec.taints), 'yaml_info': str(node)}) + except config.config_exception.ConfigException as e: + _logger.error(e) + raise UserError("Unable to Connect K8s Cluster") + else: + raise UserError("Please Add config file") + + +class DockerImages(models.Model): + _name = 'kk_odoo_saas.k8s.docker.images' + + name = fields.Char('Image Name', required=True) + tag = fields.Char('Tag Name', required=True, default='latest') + description = fields.Char('Description') + is_pvt_dkr_repo = fields.Boolean('Using Private Docker Repository') + b64_dkr_config = fields.Text('base64 docker config json file') + repo_link = fields.Char('Related Repository') + base_version = fields.Selection([('14.0', '14.0'), ('15.0', '15.0'), ('16.0', '16.0')], required=True) + # base_version is for pulling git code in folder e.g /var/lib/odoo/addons/14.0 etc. + + @api.depends('name', 'tag') + def name_get(self): + res = [] + for record in self: + name = record.name + if record.tag: + name = name + ':' + record.tag + res.append((record.id, name)) + return res + + +class Node(models.Model): + _name = 'kk_odoo_saas.k8s.node' + name = fields.Char('Node Name') + labels = fields.Text('Labels') + annotations = fields.Text() + taints = fields.Text() + + yaml_info = fields.Text("Yaml Description") + + +class MasterDbCreds(models.Model): + _name = 'kk_odoo_saas.k8s.master_db_creds' + + name = fields.Char('DB Server Name') + master_username = fields.Char('Master Username', default='postgres', required=True) + master_pass = fields.Char('Master Password', required=True) + server_url = fields.Char('Server URL', required=True) + server_port = fields.Char('Server Port', default='5432', required=True) + status = fields.Selection([('connected', 'Connected'), ('not_connected', 'Not Connected')], default='not_connected') + + def check_connectivity(self): + for rec in self: + if rec.master_username and rec.master_pass and rec.server_url: + try: + conn = psycopg2.connect(database='postgres', + user=rec.master_username, + password=rec.master_pass, + host=rec.server_url, + port=rec.server_port or 5432) + if conn: + _logger.info("Connected to PG DB server") + self.status = 'connected' + return conn + except Exception as e: + _logger.exception(e) + self.status = 'not_connected' + raise UserError('Unable to Connect Postgres.\nPlease Check Postgres Credentials...!') + else: + self.status = 'not_connected' + raise UserError('Please Enter Postgres Credentials...!') diff --git a/kk_odoo_saas/models/models.py b/kk_odoo_saas/models/models.py new file mode 100755 index 0000000..5372373 --- /dev/null +++ b/kk_odoo_saas/models/models.py @@ -0,0 +1,486 @@ +# -*- coding: utf-8 -*- +import base64 + +import psycopg2 +import requests +import os +from odoo import models, fields, api, _ +from ..utils import k8s_deployment as k8s +from ..utils import ingress, logs +from ..utils import del_git_code as dc +import re +from odoo.exceptions import ValidationError, MissingError +from odoo.addons.smile_log.tools import SmileDBLogger +import logging +import xmlrpc.client +import random +import string +from odoo.addons.queue_job.exception import RetryableJobError +from odoo.exceptions import AccessError +from datetime import timedelta +from ..utils import pg_server as pgx +_logger = logging.getLogger(__name__) + + +class SaaSAppSslSecret(models.Model): + _name = 'kk_odoo_saas.app.ssl_secret' + name = fields.Char('Secret Name') + + +class SaaSApp(models.Model): + _name = 'kk_odoo_saas.app' + _description = 'SaaS App' + _inherit = ['mail.thread', 'mail.activity.mixin'] + + app_name = fields.Char('App Unique Id', + default=lambda self: self.env['ir.sequence'].next_by_code('kk_odoo_saas.app'), tracking=True, copy=False) + name = fields.Char(tracking=True) + is_custom_image = fields.Boolean(default=True) + docker_image = fields.Many2one('kk_odoo_saas.k8s.docker.images') + is_pvt_dkr_repo = fields.Boolean('Using Private Docker Repository') + + is_extra_addon = fields.Boolean('Use Extra Addons') + extra_addons = fields.Char('Git Url', tracking=True) + is_private_repo = fields.Boolean('Is Private Repository?') + git_token = fields.Char('Auth Token') + + # K8s values + client = fields.Many2one('res.partner', related='admin_user.partner_id', tracking=True) + country_id = fields.Many2one(string="Country", comodel_name='res.country', + help="Country for which this instance is being deployed") + + admin_user = fields.Many2one("res.users", "Client User", tracking=True) + + def _get_default_cluster_config(self): + cluster = self.env['kk_odoo_saas.k8s.config'].search([], limit=1) + if cluster: + return cluster.id + return False + + configuration = fields.Many2one('kk_odoo_saas.k8s.config', string='Configuration', default=_get_default_cluster_config) + + domain_name = fields.Char(related='configuration.domain_name') + sub_domain_name = fields.Char(required=True) + + is_dedicated_node = fields.Boolean(string='Any Dedicated Node') + node_id = fields.Many2one('kk_odoo_saas.k8s.node', string='Node') + node_key = fields.Char() + node_value = fields.Char() + + demo_data = fields.Boolean('Install Demo Data') + status = fields.Selection([('d', 'Draft'), ('l', 'Launched'), ('m', 'Modified'), ('del', 'Deleted')], + string='Status', default='d', tracking=True) + expiry_date = fields.Date(tracking=True) + subscription_id = fields.Many2one('sale.subscription', string='Related Subscription', tracking=True) + notes = fields.Text() + module_ids = fields.Many2many(comodel_name='saas.app', string='Modules to install') + + login_email = fields.Char('Login Email') + login_pwd = fields.Char('Login Pwd') + + master_login_email = fields.Char('Master Login Email') + master_login_pwd = fields.Char('Master Login Pwd') + + custom_domain_ids = fields.One2many('saas.app.custom.domain', 'saas_app_id', string='Custom Domains') + + def _default_db_name(self): + return self.sub_domain_name + + k8s_logs = fields.Many2many('smile.log', string='K8s Logs', compute='_get_k8s_logs') + + # db server relation + def _get_default_db_server(self): + db_server = self.env['kk_odoo_saas.k8s.master_db_creds'].search([], limit=1) + if db_server: + return db_server + return False + db_server_id = fields.Many2one('kk_odoo_saas.k8s.master_db_creds', string="DB Server", default=_get_default_db_server) + client_db_name = fields.Char("Database Name", required=True) + login_url = fields.Char('Login URL', compute='_get_instance_login_url') + + # _sql_constraints = [ + # ('hostname_uniq', 'unique(hostname)', "A Domain already exists. Domain's name must be unique!"), + # ] + + @api.model + def create(self, values): + _logger = logging.getLogger(__name__) + if self: + _logger = SmileDBLogger(self._cr.dbname, self._name, self.id, self._uid) + + res = super(SaaSApp, self).create(values) + + if not res.validate_domain_name(): + _logger.error('Either Domain or Subdomain is not valid') + raise ValidationError('Either Domain or Subdomain is not valid') + return res + + def write(self, vals): + _logger = SmileDBLogger(self._cr.dbname, self._name, self.id, self._uid) + + # if vals and 'status' not in vals and self.status not in ['d', 'del']: + # vals.update({'status': 'm'}) + + res = super(SaaSApp, self).write(vals) + + if 'custom_domain_ids' in vals: + #todo: add validation, limit number of domains per instance + self.update_app() + + if 'sub_domain_name' or 'domain_name' in vals: + if not self.validate_domain_name(): + _logger.error('Either Domain or Subdomain is not valid') + raise ValidationError('Either Domain or Subdomain is not valid') + return res + + + @api.onchange('app_name') + def set_sub_domain_name(self): + self.sub_domain_name = self.app_name + # also set the database name + self.client_db_name = self.app_name + + def validate_domain_name(self): + if self.domain_name and self.sub_domain_name: + full_name = self.sub_domain_name + self.domain_name + domain_regex = r'(([\da-zA-Z])([_\w-]{,62})\.){,127}(([\da-zA-Z])[_\w-]{,61})?([\da-zA-Z]\.((xn\-\-[a-zA-Z\d]+)|([a-zA-Z\d]{2,})))' + domain_regex = '{0}$'.format(domain_regex) + valid_domain_name_regex = re.compile(domain_regex, re.IGNORECASE) + full_name = full_name.lower().strip() + if re.match(valid_domain_name_regex, full_name): + return True + return + + def deploy_app(self): + self.ensure_one() + k8s.create_deployment(app_name=self.app_name, config_file=self.configuration.config_file, self=self) + ingress.create_ingress(app_name=self.app_name, self=self) + self.status = 'l' + self.with_delay().post_init_tasks() + + def delete_app_from_wizard(self, delete_db, delete_pv, delete_svc, delete_ing, delete_deployment): + # if delete_db: + # self.delete_database_remotely(db_master_pwd=db_master_pwd) + k8s.delete_app_with_options(self, delete_db, delete_pv, delete_svc, delete_ing, delete_deployment) + + self.status = 'del' + + def update_app(self): + k8s.update_app(self) + self.status = 'l' + + def get_url(self): + return "http://{0}{1}".format(self.sub_domain_name, self.domain_name) + + def deploy_apps_from_git(self): + k8s.deploy_apps_from_git(self) + + def restart_odoo_service(self): + k8s.restart_odoo_service(self) + + def action_show_subscription(self): + self.ensure_one() + assert self.subscription_id, "This app is not associated with any Subscription" + return { + "type": "ir.actions.act_window", + "name": "Subscription", + "res_model": "sale.subscription", + "res_id": self.subscription_id.id, + "view_mode": "form", + } + + def action_create_subscription(self): + self.ensure_one() + assert not self.subscription_id, "This app is already associated with Subscription" + return { + "type": "ir.actions.act_window", + "name": "Subscription", + "res_model": "sale.subscription", + "view_mode": "form", + "context": { + "default_name": self.name + "'s SaaS Subscription", + "default_build_id": self.id, + "default_partner_id": self.client.id, + } + } + + def _get_instance_login_url(self): + for app in self: + app.login_url = '' + response, db = pgx.get_admin_credentials(app) + if response and db: + app.login_url = "https://{0}{1}/saas/login?db={2}&login={3}&passwd={4}".format(self.sub_domain_name, + self.domain_name, db, response[0][0], + response[0][1]) + else: + _logger.info("Unknown Error!") + + def action_connect_instance(self): + self.ensure_one() + response, db = pgx.get_admin_credentials(self) + if response and db: + login = response[0][0] + password = response[0][1] + login_url = "https://{0}{1}/saas/login?db={2}&login={3}&passwd={4}".format(self.sub_domain_name, self.domain_name, db, login, password) + _logger.info("Login URL %r " % (login_url)) + return { + 'type': 'ir.actions.act_url', + 'url': login_url, + 'target': 'new', + } + else: + _logger.info("Unknown Error!") + + + def create_instance_admin_user_for_client(self, models1, db, uid, password, client_pwd): + _logger = SmileDBLogger(self._cr.dbname, self._name, self.id, self._uid) + + try: + adm_user_id = models1.execute_kw(db, uid, password, + 'res.users', 'search_read', + [[['login', '=', 'admin']]], {'fields': ['groups_id'], 'limit': 1} + ) + if adm_user_id: + adm_user_id = adm_user_id[0] + groups_ids = adm_user_id.get('groups_id', False) + if groups_ids: + new_user_id = models1.execute_kw(db, uid, password, 'res.users', 'create', + [{'name': self.client.name, + 'login': self.client.email, + 'company_ids': [1], 'company_id': 1, + 'password': client_pwd}]) + if new_user_id: + _logger.info('Created client Account on instance') + return models1.execute_kw(db, uid, password, 'res.groups', 'write', + [groups_ids, {'users': [(4, new_user_id)]}]) + except xmlrpc.client.Error as e: + _logger.error(str(e)) + return + + def reset_apps_admin_pwd(self): + _logger = SmileDBLogger(self._cr.dbname, self._name, self.id, self._uid) + + protocol = 'https' + url = protocol + '://{0}{1}'.format(self.sub_domain_name, self.domain_name) + db = self.sub_domain_name + new_pwd_client = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10)) + new_pwd_master = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10)) + username = 'admin' + password = 'admin' + try: + common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url)) + uid = common.authenticate(db, username, password, {}) + _logger.info('Sending request to app with uid {}'.format(uid)) + models1 = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url)) + try: + if self.create_instance_admin_user_for_client(models1, db, uid, password, new_pwd_client): + _logger.info('Updated Client User\'s Access Rights on instance') + self.update({'login_pwd': new_pwd_client, 'login_email': self.client.email}) + + adm_user_id = models1.execute_kw(db, uid, password, + 'res.users', 'search', + [[['login', '=', 'admin']]], {'limit': 1} + )[0] + if models1.execute_kw(db, uid, password, 'res.users', 'write', [[adm_user_id], { + 'password': new_pwd_master, + }]): + self.update({'master_login_pwd': new_pwd_master, 'master_login_email': 'admin'}) + self.send_app_pwd_cred_email() + _logger.info('Password and login changed Successfully') + except xmlrpc.client.Error as e: + _logger.error(str(e)) + except xmlrpc.client.Error as e: + _logger.error(str(e)) + + def set_user_country(self): + country_code = self.country_id.code + if self.country_id and self.country_id.code: + _logger = SmileDBLogger(self._cr.dbname, self._name, self.id, self._uid) + protocol = 'https' + url = protocol + '://{0}{1}'.format(self.sub_domain_name, self.domain_name) + db = self.sub_domain_name + username = 'admin' + password = 'admin' + try: + common = xmlrpc.client.ServerProxy('{}/xmlrpc/2/common'.format(url)) + uid = common.authenticate(db, username, password, {}) + _logger.info('Sending request to app with uid {}'.format(uid)) + models1 = xmlrpc.client.ServerProxy('{}/xmlrpc/2/object'.format(url)) + try: + country = models1.execute_kw(db, uid, password, + 'res.country', 'search_read', + [[['code', 'ilike', country_code]]], {'fields': ['id'], 'limit': 1} + ) + if country: + country = country[0] + if country: + new_user_id = models1.execute_kw(db, uid, password, 'res.company', 'write', + [[1], {'country_id': country_code and self.country_id.id, + 'currency_id': country_code and self.country_id.currency_id.id}]) + if new_user_id: + _logger.info('Updated country of the user') + except xmlrpc.client.Error as e: + _logger.error(str(e)) + except xmlrpc.client.Error as e: + _logger.error(str(e)) + + def post_init_tasks(self): + _logger = SmileDBLogger(self._cr.dbname, self._name, self.id, self._uid) + if not self.check_site_assible(): + _logger.info('Waiting for the App to become live....') + raise RetryableJobError('Unable to get the app live.') + else: + self.set_user_country() + self.reset_apps_admin_pwd() + + def check_site_assible(self): + _logger = SmileDBLogger(self._cr.dbname, self._name, self.id, self._uid) + + try: + resp = requests.get('http://' + self.sub_domain_name + self.domain_name) + _logger.info('App, sent this status code {}'.format(resp.status_code)) + if resp.status_code == 200: + return True + else: + return False + except Exception as e: + _logger.error(str(e)) + return False + + def send_app_pwd_cred_email(self): + _logger = SmileDBLogger(self._cr.dbname, self._name, self.id, self._uid) + + template = False + try: + template = self.env.ref('kk_odoo_saas.app_invitation_email', raise_if_not_found=False) + except ValueError: + pass + assert template._name == 'mail.template' + + template_values = { + 'email_to': '${object.admin_user.email|safe}', + 'email_cc': False, + 'auto_delete': True, + 'partner_to': False, + 'scheduled_date': False, + } + template.write(template_values) + + if not self.admin_user.email: + _logger.error(_("Cannot send email: user %s has no email address.", self.admin_user.name)) + with self.env.cr.savepoint(): + try: + template.send_mail(self.id, force_send=True, raise_exception=True) + except Exception as e: + _logger.error(str(e)) + _logger.info(_("App Details email sent for user <%s> to <%s>", self.admin_user.login, self.admin_user.email)) + + def _message_get_suggested_recipients(self): + recipients = super(SaaSApp, self)._message_get_suggested_recipients() + try: + for saas_app in self: + if saas_app.client: + saas_app._message_add_suggested_recipient(recipients, partner=saas_app.client, reason=_('SaaS Client')) + except AccessError: # no read access rights -> just ignore suggested recipients because this imply modifying followers + pass + return recipients + + def _get_k8s_logs(self): + for app in self: + app.k8s_logs = False + logs_ = self.env['smile.log'].search([('res_id', '=', app.id), ('model_name', '=', self._name)]) + for log in logs_: + app.k8s_logs = [(4, log.id)] + + def get_pod_logs(self): + output = logs.read_logs(app_name=self.app_name, config_file=self.configuration.config_file, self=self, tail_lines=None) + if output: + result = base64.b64encode(output.encode()) + attachment_obj = self.env['ir.attachment'] + # create attachment + attachment_id = attachment_obj.create( + {'name': self.app_name+'-odoo-logs.log', 'datas': result, 'public': False}) + # prepare download url + download_url = '/web/content/' + str(attachment_id.id) + '?download=true' + # download + return { + "type": "ir.actions.act_url", + "url": str(download_url), + "target": "new", + } + else: + raise MissingError('Unable to get logs \nReason: Running Pod / Container not found') + + def action_log_viewer(self): + return { + "type": "ir.actions.act_url", + "url": "/saas/instance/{app_id}".format(app_id=self.id), + "target": "new", + } + + def get_timed_pod_logs(self, interval=None, since_seconds=None, previous=None, tail_lines=None): + output = logs.read_logs(app_name=self.app_name, config_file=self.configuration.config_file, self=self, since_seconds=since_seconds) + if output: + return output + + def update_docker_image(self, container_arguments, env_vars=False): + patched_deployment = k8s.update_deployment(self=self, container_arguments=container_arguments, env_vars=env_vars) + if patched_deployment: + self.env['bus.bus'].sendone( + (self._cr.dbname, 'res.partner', self.env.user.partner_id.id), + {'type': 'simple_notification', 'title': 'Image Update in Progress', + 'message': 'Deployment in Progress with latest docker image'} + ) + return True + + def get_odoo_deployment(self): + deployment = k8s.read_deployment(self=self) + if deployment: + return deployment + return False + + def refresh_node_list(self): + if self.configuration: + self.configuration.update_cluster_nodes() + + def get_pg_db_connection(self, db='postgres'): + for rec in self: + if rec.db_server_id.master_pass and rec.db_server_id.master_username and rec.db_server_id.server_url: + try: + _logger.info("Going to connect to PG DB server") + conn = psycopg2.connect(database=db, + user=rec.db_server_id.master_username, + password=rec.db_server_id.master_pass, + host=rec.db_server_id.server_url, + port=rec.db_server_id.server_port or 5432 + ) + if conn: + _logger.info("Connected to PG DB server") + return conn + except Exception as e: + _logger.exception(e) + return + else: + return + + def del_git_dir(self): + base_version = self.docker_image.base_version + delete_path = "/var/lib/odoo/addons/" + str(base_version) + dc.del_git_dir(self, path=delete_path) + + +class SaaSAppDomain(models.Model): + _name = 'saas.app.custom.domain' + _description = 'SaaS App Custom Domain' + + name = fields.Char('Domain Name', required=True) + saas_app_id = fields.Many2one('kk_odoo_saas.app') + ssl = fields.Boolean('Enable SSL?', default=True) + + +class DockerAccount(models.Model): + _name = 'saas.docker.hub.account' + + username = fields.Char('docker hub username') + pwd = fields.Char('Password or Access Token') + # for more info https://docs.docker.com/docker-hub/access-tokens/ \ No newline at end of file diff --git a/kk_odoo_saas/models/product_template.py b/kk_odoo_saas/models/product_template.py new file mode 100755 index 0000000..cc52124 --- /dev/null +++ b/kk_odoo_saas/models/product_template.py @@ -0,0 +1,16 @@ +from odoo import fields, models, api + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + saas_app_id = fields.Many2one("saas.app", ondelete="cascade", index=True) + saas_package_id = fields.Many2one("saas.package", ondelete="cascade", index=True) + is_saas_product = fields.Boolean("Is SaaS product?", default=False) + + @api.model + def create(self, vals): + if vals.get("is_saas_product"): + vals["taxes_id"] = [(5,)] + vals["supplier_taxes_id"] = [(5,)] + return super(ProductTemplate, self).create(vals) diff --git a/kk_odoo_saas/models/res_config_settings.py b/kk_odoo_saas/models/res_config_settings.py new file mode 100755 index 0000000..75cf7cf --- /dev/null +++ b/kk_odoo_saas/models/res_config_settings.py @@ -0,0 +1,34 @@ +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + show_packages = fields.Boolean( + "Show packages", config_parameter="kk_odoo_saas.show_packages" + ) + show_apps = fields.Boolean("Show apps", config_parameter="kk_odoo_saas.show_apps") + show_buy_now_button = fields.Boolean( + "Show 'Buy now' button", config_parameter="kk_odoo_saas.show_buy_now_button" + ) + show_try_trial_button = fields.Boolean( + "Show 'Try trial' button", config_parameter="kk_odoo_saas.show_try_trial_button" + ) + + @api.model + def get_values(self): + res = super(ResConfigSettings, self).get_values() + select_type = self.env["ir.config_parameter"].sudo() + packages = select_type.get_param("kk_odoo_saas.show_packages") + apps = select_type.get_param("kk_odoo_saas.show_apps") + buy_now_button = select_type.get_param("kk_odoo_saas.show_buy_now_button") + try_trial_button = select_type.get_param("kk_odoo_saas.show_try_trial_button") + # fmt: off + res.update({ + "show_packages": packages, + "show_apps": apps, + "show_buy_now_button": buy_now_button, + "show_try_trial_button": try_trial_button, + }) + # fmt: on + return res diff --git a/kk_odoo_saas/models/res_users.py b/kk_odoo_saas/models/res_users.py new file mode 100755 index 0000000..e69de29 diff --git a/kk_odoo_saas/models/saas_app_website.py b/kk_odoo_saas/models/saas_app_website.py new file mode 100755 index 0000000..a17665c --- /dev/null +++ b/kk_odoo_saas/models/saas_app_website.py @@ -0,0 +1,102 @@ +import logging +from odoo import api, fields, models + +_logger = logging.getLogger(__name__) + + +class SaasApp(models.Model): + _name = "saas.app" + _description = "SaaS App" + _order = "name" + _inherit = "saas.period.product.mixin" + + name = fields.Char("Technical Name", required=True, index=True) + shortdesc = fields.Char("Module Name", required=True) + dependency_ids = fields.Many2many("saas.app", "saas_apps_dependency_rel", "dep_id", "app_id", string="Dependencies") + icon_image = fields.Binary("Icon") + + allow_to_sell = fields.Boolean(default=True, string="Sellable") + + @api.model + def create(self, vals): + res = super(SaasApp, self).create(vals) + if not res.product_tmpl_id: + res.product_tmpl_id = self.env["product.template"].create({ + "name": res.shortdesc, + "image_1920": res.icon_image, + "saas_app_id": res.id, + "is_saas_product": True, + "type": 'service', + "purchase_ok": False, + "subscription_template_id": self.env.ref("sale_subscription.monthly_subscription").id, + "recurring_invoice": True, + "website_published": True, + "list_price": 0, + }) + return res + + def write(self, vals): + res = super(SaasApp, self).write(vals) + if vals.get('month_price', None) is not None or vals.get('year_price', None) is not None: + self._update_variant_prices() + return res + + def _update_variant_prices(self): + for app in self: + for variant in app.product_tmpl_id.product_variant_ids: + for attr in variant.product_template_attribute_value_ids: + if attr.name == "Monthly": + attr.update({'price_extra': app.month_price}) + if attr.name == "Annually": + attr.update({'price_extra': app.year_price}) + + + def _search_or_create(self, ir_module): + app = self.search([("name", "=", ir_module.name)]) + if not app: + app = self.env["saas.app"].create({ + "name": ir_module.name, + "shortdesc": ir_module.shortdesc, + "icon_image": ir_module.icon_image + }) + return app + + def dependencies_str(self): + self.ensure_one() + visited_saas_module_ids = set() + + def make_list(deps): + result = [] + for dep in deps: + if dep.id in visited_saas_module_ids: + continue + + visited_saas_module_ids.add(dep.id) + result += [dep.name] + make_list(dep.dependency_ids) + return result + + return ",".join(make_list(self.dependency_ids)) + + @api.model + def action_make_applist_from_local_instance(self): + for x in map(self.browse, self._search([])): + x.unlink() + + def walk(parent_ir_module_name, parent_app_name=None): + modules = self.env["ir.module.module.dependency"].sudo().search([("name", "=", parent_ir_module_name)]).mapped("module_id") + for m in modules: + app_name = None + + if m.application: + app = self.env["saas.app"]._search_or_create(m) + + if parent_app_name: + app.dependency_ids |= self.env["saas.app"].search([("name", "=", parent_app_name)]) + + app_name = app.name + else: + app_name = parent_app_name + + walk(m.name, app_name) + + walk("base") diff --git a/kk_odoo_saas/models/saas_package.py b/kk_odoo_saas/models/saas_package.py new file mode 100755 index 0000000..053ad3d --- /dev/null +++ b/kk_odoo_saas/models/saas_package.py @@ -0,0 +1,61 @@ +import logging + +from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError, UserError + +_logger = logging.getLogger(__name__) + + + +class SaasPackage(models.Model): + _name = "saas.package" + _inherit = ["saas.period.product.mixin"] + + is_published = fields.Boolean("Publish It?", default=True) + package_image = fields.Image( + string='Package image' + ) + name = fields.Char(copy=False) + module_ids = fields.Many2many('saas.app', string="Modules to install") + docker_image = fields.Many2one('kk_odoo_saas.k8s.docker.images', 'Related Docker Image') + stripe_product_id = fields.Char('Stripe Id') + subscription_template = fields.Many2one('sale.subscription.template') + + @api.model + def create(self, vals): + res = super(SaasPackage, self).create(vals) + if not res.product_tmpl_id: + res.product_tmpl_id = self.env["product.template"].create({ + "name": res.name, + "image_1920": res.package_image, + "saas_package_id": res.id, + "is_saas_product": True, + "type": 'service', + "purchase_ok": False, + "subscription_template_id": self.env.ref("sale_subscription.monthly_subscription").id, + "recurring_invoice": True, + "website_published": True, + "list_price": 0, + }) + return res + + def write(self, vals): + res = super(SaasPackage, self).write(vals) + if vals.get('month_price', None) is not None or vals.get('year_price', None) is not None: + self._update_variant_prices() + return res + + def _update_variant_prices(self): + for app in self: + for variant in app.product_tmpl_id.product_variant_ids: + for attr in variant.product_template_attribute_value_ids: + if attr.name == "Monthly": + attr.update({'price_extra': app.month_price}) + if attr.name == "Annually": + attr.update({'price_extra': app.year_price}) + + + def refresh_page(self): + # Empty-function for purpose of refreshing page + pass + diff --git a/kk_odoo_saas/models/saas_period_product_mixin.py b/kk_odoo_saas/models/saas_period_product_mixin.py new file mode 100755 index 0000000..ba3a8c0 --- /dev/null +++ b/kk_odoo_saas/models/saas_period_product_mixin.py @@ -0,0 +1,54 @@ +from odoo import api, models, fields + + +class SaasPeriodProductMixin(models.AbstractModel): + _name = "saas.period.product.mixin" + _description = "Period Product Mixin" + + product_tmpl_id = fields.Many2one("product.template", ondelete="cascade", readonly=True) + + month_product_id = fields.Many2one("product.product", string="Product for monthly subscription", compute="_compute_product_ids", store=True) + year_product_id = fields.Many2one("product.product", string="Product for annually subscription", compute="_compute_product_ids", store=True) + currency_id = fields.Many2one("res.currency", related="product_tmpl_id.currency_id") + + # TODO: when following fields are written, you need to update prices on product.product + month_price = fields.Float("Month price", default=0.0) + year_price = fields.Float("Year price", default=0.0) + + @api.depends("product_tmpl_id") + def _compute_product_ids(self): + patvs_month = self.env.ref("kk_odoo_saas.product_attribute_value_subscription_monthly") + patvs_year = self.env.ref("kk_odoo_saas.product_attribute_value_subscription_annually") + attr = self.env.ref("kk_odoo_saas.product_attribute_subscription") + + for app in self: + if not app.product_tmpl_id: + app.month_product_id = app.year_product_id = self.env["product.product"] + continue + + line = self.env["product.template.attribute.line"].sudo().search([ + ("product_tmpl_id", "=", app.product_tmpl_id.id), + ("attribute_id", "=", attr.id), + ]) + if not line: + line = line.create({ + "product_tmpl_id": app.product_tmpl_id.id, + "attribute_id": attr.id, + "value_ids": [(6, 0, [ + patvs_year.id, patvs_month.id, + ])] + }) + + ptv_ids = line.product_template_value_ids + + month_ptv = ptv_ids.filtered(lambda x: x.product_attribute_value_id == patvs_month) + month_ptv.write({ + "price_extra": app.month_price + }) + app.month_product_id = month_ptv.ptav_product_variant_ids[:1] + + year_ptv = ptv_ids.filtered(lambda x: x.product_attribute_value_id == patvs_year) + year_ptv.write({ + "price_extra": app.year_price + }) + app.year_product_id = year_ptv.ptav_product_variant_ids[:1] diff --git a/kk_odoo_saas/models/sale_order.py b/kk_odoo_saas/models/sale_order.py new file mode 100755 index 0000000..0b73570 --- /dev/null +++ b/kk_odoo_saas/models/sale_order.py @@ -0,0 +1,86 @@ +from odoo import fields, models +import logging + +_logger = logging.getLogger(__name__) + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + build_id = fields.Many2one("kk_odoo_saas.app") + is_pkg_pdt = fields.Boolean(default=False) + + def _split_subscription_lines(self): + """Split the order line according to subscription templates that must be created.""" + self.ensure_one() + res = dict() + for line in self.order_line: + if line.product_id: + for p_id, p_name in line.product_id.name_get(): + if '(Annually)' in p_name: + line.product_id.update( + {'subscription_template_id': self.env.ref('sale_subscription.yearly_subscription').id}) + elif '(Monthly)' in p_name: + line.product_id.update( + {'subscription_template_id': self.env.ref('sale_subscription.monthly_subscription').id}) + + new_sub_lines = self.order_line.filtered(lambda + l: not l.subscription_id and l.product_id.subscription_template_id and l.product_id.recurring_invoice) + templates = new_sub_lines.mapped('product_id').mapped('subscription_template_id') + for template in templates: + lines = self.order_line.filtered( + lambda l: l.product_id.subscription_template_id == template and l.product_id.recurring_invoice) + res[template] = lines + return res + + def _action_confirm(self): + """Update and/or create subscriptions on order confirmation.""" + res = super(SaleOrder, self)._action_confirm() + # self.create_saas_app_from_subscription() + return res + + def create_saas_app_from_subscription(self): + for so in self: + lines = so.order_line.filtered(lambda l: l.subscription_id is not False) + p_ids = so.order_line.mapped('product_id') + if lines and p_ids: + saas_app_ids = [app.id for app in self.env['saas.app'].search([('year_product_id', 'in', p_ids.ids)])] + if not saas_app_ids: + saas_app_ids = [app.id for app in self.env['saas.app'].search([('month_product_id', 'in', p_ids.ids)])] + line = lines[0] + sub_id = line.subscription_id + pkg = False + if so.is_pkg_pdt: + pkg = self.env['saas.package'].search([('year_product_id', 'in', p_ids.ids)]) + if not pkg: + pkg = self.env['saas.package'].search([('month_product_id', 'in', p_ids.ids)]) + if pkg: + saas_app_ids = pkg.module_ids.ids + if so and so.build_id and sub_id: + so.build_id.update({'subscription_id': sub_id.id, + 'module_ids': [(6, 0, saas_app_ids)] + }) + sub_id.build_id = so.build_id + so.build_id.deploy_app() + else: + saas_app_env = self.env['kk_odoo_saas.app'] + def_vals = saas_app_env.default_get(fields_list=['app_name', ]) + if self.partner_id.user_ids: + def_vals['admin_user'] = self.partner_id.user_ids.ids[0] + configurations = self.env["kk_odoo_saas.k8s.config"] + config = configurations.get_default_config() + if config: + def_vals['configuration'] = config.id + def_vals['sub_domain_name'] = def_vals.get('app_name') + def_vals['subscription_id'] = sub_id.id + def_vals['module_ids'] = [(6, 0, saas_app_ids)] + def_vals['docker_image'] = pkg.docker_image.id + def_vals['name'] = '{}\'s SaaS App'.format(self.partner_id.name) + saas_app = saas_app_env.create(def_vals) + + sub_id.build_id = saas_app.id + self.build_id = saas_app.id + + _logger.info('Going to Deploy SaaS App, Subscription is going to start') + saas_app.deploy_app() + else: + _logger.error('Cant create SaaS App, No K8s configuration found') diff --git a/kk_odoo_saas/models/sale_subscription.py b/kk_odoo_saas/models/sale_subscription.py new file mode 100755 index 0000000..c85ea70 --- /dev/null +++ b/kk_odoo_saas/models/sale_subscription.py @@ -0,0 +1,20 @@ +from odoo import fields, models, api +import logging +_logger = logging.getLogger(__name__) + + +class SaleSubscription(models.Model): + _inherit = 'sale.subscription' + build_id = fields.Many2one("kk_odoo_saas.app", string="Related SaaS Instance") + is_saas = fields.Boolean('Is SaaS Subscription') + + def start_subscription(self): + res = super(SaleSubscription, self).start_subscription() + if self.build_id: + self.build_id.deploy_app() + return res + + @api.model + def create(self, vals): + res = super(SaleSubscription, self).create(vals) + return res diff --git a/kk_odoo_saas/security/ir.model.access.csv b/kk_odoo_saas/security/ir.model.access.csv new file mode 100755 index 0000000..80e55bd --- /dev/null +++ b/kk_odoo_saas/security/ir.model.access.csv @@ -0,0 +1,17 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_saas_app_client,kk_odoo_saas.kk_odoo_saas,model_kk_odoo_saas_app,kk_odoo_saas.group_saas_client,1,0,0,0 +access_kk_odoo_saas_k8s_config,kk_odoo_saas.kk_odoo_saas_k8s_config,model_kk_odoo_saas_k8s_config,base.group_user,1,1,1,1 +access_kk_odoo_saas_k8s_docker_images_config,kk_odoo_saas.kk_odoo_saas_docker_images_config,model_kk_odoo_saas_k8s_docker_images,base.group_user,1,1,1,1 +access_saas_app_user,access_saas_app_user,model_saas_app,base.group_user,1,1,1,1 +access_saas_app_admin,access_saas_app_admin,model_saas_app,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_kk_odoo_saas_k8s_node,access_kk_odoo_saas.k8s.node,model_kk_odoo_saas_k8s_node,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_kk_odoo_saas_app_delete_wizard,access_saas_app_delete_wizard,model_kk_odoo_saas_app_delete_wizard,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_kk_odoo_saas_app_update_dkr_img_wizard,access_kk_odoo_saas_app_update_dkr_img_wizard,model_kk_odoo_saas_app_update_dkr_img_wizard,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_saas_app_secret_admin,access_saas_app_secret_admin,model_kk_odoo_saas_app_ssl_secret,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_saas_app_custom_domain,admin_access_saas_app_domain,model_saas_app_custom_domain,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_saas_app_custom_domain_portal,portal_access_saas_app_domain,model_saas_app_custom_domain,base.group_portal,1,0,0,0 +access_kk_odoo_saas_master_db_creds,kk_odoo_saas.kk_odoo_saas_master_db_creds,model_kk_odoo_saas_k8s_master_db_creds,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_saas_package_admin,access_saas_package_admin,model_saas_package,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_saas_app_container_argument,access_saas_app_container_argument,model_saas_app_container_argument,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_saas_app_container_env_var,access_saas_app_container_env_var,model_saas_app_container_env_var,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_saas_app_manager,kk_odoo_saas.kk_odoo_saas,model_kk_odoo_saas_app,kk_odoo_saas.group_saas_manager,1,1,1,1 \ No newline at end of file diff --git a/kk_odoo_saas/security/security.xml b/kk_odoo_saas/security/security.xml new file mode 100755 index 0000000..8b8829c --- /dev/null +++ b/kk_odoo_saas/security/security.xml @@ -0,0 +1,36 @@ + + + + + SaaS Management + 22 + + + SaaS Manager + + + + + SaaS Client + + + + + + + + + + + Personal SaaS App Visibility to Customer + + [('admin_user','=',user.id)] + + + + + + diff --git a/kk_odoo_saas/static/description/icon.png b/kk_odoo_saas/static/description/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..3e18afac83f1f4a421261348b4d09320c3419f7c GIT binary patch literal 118441 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 CP$9Me literal 0 HcmV?d00001 diff --git a/kk_odoo_saas/static/src/css/bootstrap.css b/kk_odoo_saas/static/src/css/bootstrap.css new file mode 100755 index 0000000..c46012c --- /dev/null +++ b/kk_odoo_saas/static/src/css/bootstrap.css @@ -0,0 +1,10037 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #007bff; + --secondary: #6c757d; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "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; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -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-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +select { + word-wrap: normal; +} + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: 400; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d; +} + +.blockquote-footer::before { + content: "\2014\00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #6c757d; +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-break: break-word; +} + +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; +} + +pre { + display: block; + font-size: 87.5%; + color: #212529; +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +.container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + -ms-flex-order: -1; + order: -1; +} + +.order-last { + -ms-flex-order: 13; + order: 13; +} + +.order-0 { + -ms-flex-order: 0; + order: 0; +} + +.order-1 { + -ms-flex-order: 1; + order: 1; +} + +.order-2 { + -ms-flex-order: 2; + order: 2; +} + +.order-3 { + -ms-flex-order: 3; + order: 3; +} + +.order-4 { + -ms-flex-order: 4; + order: 4; +} + +.order-5 { + -ms-flex-order: 5; + order: 5; +} + +.order-6 { + -ms-flex-order: 6; + order: 6; +} + +.order-7 { + -ms-flex-order: 7; + order: 7; +} + +.order-8 { + -ms-flex-order: 8; + order: 8; +} + +.order-9 { + -ms-flex-order: 9; + order: 9; +} + +.order-10 { + -ms-flex-order: 10; + order: 10; +} + +.order-11 { + -ms-flex-order: 11; + order: 11; +} + +.order-12 { + -ms-flex-order: 12; + order: 12; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.table { + width: 100%; + margin-bottom: 1rem; + color: #212529; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dee2e6; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6; +} + +.table tbody + tbody { + border-top: 2px solid #dee2e6; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #dee2e6; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #dee2e6; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-borderless th, +.table-borderless td, +.table-borderless thead th, +.table-borderless tbody + tbody { + border: 0; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + color: #212529; + background-color: rgba(0, 0, 0, 0.075); +} + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #b8daff; +} + +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #7abaff; +} + +.table-hover .table-primary:hover { + background-color: #9fcdff; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #9fcdff; +} + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #d6d8db; +} + +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #b3b7bb; +} + +.table-hover .table-secondary:hover { + background-color: #c8cbcf; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #c8cbcf; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #c3e6cb; +} + +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #8fd19e; +} + +.table-hover .table-success:hover { + background-color: #b1dfbb; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #b1dfbb; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #bee5eb; +} + +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #86cfda; +} + +.table-hover .table-info:hover { + background-color: #abdde5; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #abdde5; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #ffeeba; +} + +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #ffdf7e; +} + +.table-hover .table-warning:hover { + background-color: #ffe8a1; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #ffe8a1; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f5c6cb; +} + +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #ed969e; +} + +.table-hover .table-danger:hover { + background-color: #f1b0b7; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #f1b0b7; +} + +.table-light, +.table-light > th, +.table-light > td { + background-color: #fdfdfe; +} + +.table-light th, +.table-light td, +.table-light thead th, +.table-light tbody + tbody { + border-color: #fbfcfc; +} + +.table-hover .table-light:hover { + background-color: #ececf6; +} + +.table-hover .table-light:hover > td, +.table-hover .table-light:hover > th { + background-color: #ececf6; +} + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #c6c8ca; +} + +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #95999c; +} + +.table-hover .table-dark:hover { + background-color: #b9bbbe; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #b9bbbe; +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table .thead-dark th { + color: #fff; + background-color: #343a40; + border-color: #454d55; +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.table-dark { + color: #fff; + background-color: #343a40; +} + +.table-dark th, +.table-dark td, +.table-dark thead th { + border-color: #454d55; +} + +.table-dark.table-bordered { + border: 0; +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} + +.table-dark.table-hover tbody tr:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.075); +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-sm > .table-bordered { + border: 0; + } +} + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-md > .table-bordered { + border: 0; + } +} + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-lg > .table-bordered { + border: 0; + } +} + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-xl > .table-bordered { + border: 0; + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +.table-responsive > .table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.form-control::-webkit-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; + width: 100%; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; + line-height: 1.5; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.form-control-lg { + height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +select.form-control[size], select.form-control[multiple] { + height: auto; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; +} + +.form-row > .col, +.form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; +} + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem; +} + +.form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; +} + +.form-check-input:disabled ~ .form-check-label { + color: #6c757d; +} + +.form-check-label { + margin-bottom: 0; +} + +.form-check-inline { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; +} + +.form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #28a745; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(40, 167, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #28a745; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .form-control:valid ~ .valid-feedback, +.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, +.form-control.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #28a745; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-select:valid ~ .valid-feedback, +.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, +.custom-select.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control-file:valid ~ .valid-feedback, +.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback, +.form-control-file.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #28a745; +} + +.was-validated .form-check-input:valid ~ .valid-feedback, +.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, +.form-check-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #28a745; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + border-color: #28a745; +} + +.was-validated .custom-control-input:valid ~ .valid-feedback, +.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, +.custom-control-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #34ce57; + background-color: #34ce57; +} + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #28a745; +} + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #28a745; +} + +.was-validated .custom-file-input:valid ~ .valid-feedback, +.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, +.custom-file-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-control:invalid ~ .invalid-feedback, +.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, +.form-control.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #dc3545; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-select:invalid ~ .invalid-feedback, +.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, +.custom-select.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control-file:invalid ~ .invalid-feedback, +.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback, +.form-control-file.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.was-validated .form-check-input:invalid ~ .invalid-feedback, +.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, +.form-check-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #dc3545; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + border-color: #dc3545; +} + +.was-validated .custom-control-input:invalid ~ .invalid-feedback, +.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, +.custom-control-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #e4606d; + background-color: #e4606d; +} + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #dc3545; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #dc3545; +} + +.was-validated .custom-file-input:invalid ~ .invalid-feedback, +.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, +.custom-file-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.form-inline { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-plaintext { + display: inline-block; + } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; + } + .form-inline .form-check { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + -ms-flex-negative: 0; + flex-shrink: 0; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } +} + +.btn { + display: inline-block; + font-weight: 400; + color: #212529; + text-align: center; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@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 0.2rem rgba(0, 123, 255, 0.25); +} + +.btn.disabled, .btn:disabled { + opacity: 0.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 { + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0062cc; + border-color: #005cbf; +} + +.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62; +} + +.btn-secondary:focus, .btn-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #545b62; + border-color: #4e555b; +} + +.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); +} + +.btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; +} + +.btn-success:focus, .btn-success.focus { + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; +} + +.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); +} + +.btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; +} + +.btn-info:focus, .btn-info.focus { + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #117a8b; + border-color: #10707f; +} + +.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); +} + +.btn-warning { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; +} + +.btn-warning:focus, .btn-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, +.show > .btn-warning.dropdown-toggle { + color: #212529; + background-color: #d39e00; + border-color: #c69500; +} + +.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; +} + +.btn-danger:focus, .btn-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d; +} + +.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); +} + +.btn-light { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; +} + +.btn-light:focus, .btn-light.focus { + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); +} + +.btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, +.show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df; +} + +.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); +} + +.btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; +} + +.btn-dark:focus, .btn-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1d2124; + border-color: #171a1d; +} + +.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.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 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #007bff; + background-color: transparent; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, +.show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.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 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #6c757d; + background-color: transparent; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, +.show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.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 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #28a745; + background-color: transparent; +} + +.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, +.show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.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 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent; +} + +.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, +.show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.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 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, +.show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.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 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, +.show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.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 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; +} + +.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, +.show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.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 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #343a40; + background-color: transparent; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, +.show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.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, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + transition: opacity 0.15s linear; +} + +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} + +.dropup, +.dropright, +.dropdown, +.dropleft { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} + +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; + } + .dropdown-menu-sm-right { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; + } + .dropdown-menu-md-right { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; + } + .dropdown-menu-lg-right { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; + } + .dropdown-menu-xl-right { + right: 0; + left: auto; + } +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} + +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} + +.dropright .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.dropright .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-toggle::after { + vertical-align: 0; +} + +.dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} + +.dropleft .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.dropleft .dropdown-toggle::after { + display: none; +} + +.dropleft .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { + right: auto; + bottom: auto; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.dropdown-item:hover, .dropdown-item:focus { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #007bff; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 1; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} + +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after, +.dropright .dropdown-toggle-split::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: center; + justify-content: center; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} + +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.btn-group-toggle > .btn, +.btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; +} + +.btn-group-toggle > .btn input[type="radio"], +.btn-group-toggle > .btn input[type="checkbox"], +.btn-group-toggle > .btn-group > .btn input[type="radio"], +.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; +} + +.input-group > .form-control, +.input-group > .form-control-plaintext, +.input-group > .custom-select, +.input-group > .custom-file { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} + +.input-group > .form-control + .form-control, +.input-group > .form-control + .custom-select, +.input-group > .form-control + .custom-file, +.input-group > .form-control-plaintext + .form-control, +.input-group > .form-control-plaintext + .custom-select, +.input-group > .form-control-plaintext + .custom-file, +.input-group > .custom-select + .form-control, +.input-group > .custom-select + .custom-select, +.input-group > .custom-select + .custom-file, +.input-group > .custom-file + .form-control, +.input-group > .custom-file + .custom-select, +.input-group > .custom-file + .custom-file { + margin-left: -1px; +} + +.input-group > .form-control:focus, +.input-group > .custom-select:focus, +.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; +} + +.input-group > .custom-file .custom-file-input:focus { + z-index: 4; +} + +.input-group > .form-control:not(:last-child), +.input-group > .custom-select:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .form-control:not(:first-child), +.input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group > .custom-file { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; +} + +.input-group > .custom-file:not(:last-child) .custom-file-label, +.input-group > .custom-file:not(:last-child) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .custom-file:not(:first-child) .custom-file-label { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group-prepend, +.input-group-append { + display: -ms-flexbox; + display: flex; +} + +.input-group-prepend .btn, +.input-group-append .btn { + position: relative; + z-index: 2; +} + +.input-group-prepend .btn:focus, +.input-group-append .btn:focus { + z-index: 3; +} + +.input-group-prepend .btn + .btn, +.input-group-prepend .btn + .input-group-text, +.input-group-prepend .input-group-text + .input-group-text, +.input-group-prepend .input-group-text + .btn, +.input-group-append .btn + .btn, +.input-group-append .btn + .input-group-text, +.input-group-append .input-group-text + .input-group-text, +.input-group-append .input-group-text + .btn { + margin-left: -1px; +} + +.input-group-prepend { + margin-right: -1px; +} + +.input-group-append { + margin-left: -1px; +} + +.input-group-text { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.input-group-text input[type="radio"], +.input-group-text input[type="checkbox"] { + margin-top: 0; +} + +.input-group-lg > .form-control:not(textarea), +.input-group-lg > .custom-select { + height: calc(1.5em + 1rem + 2px); +} + +.input-group-lg > .form-control, +.input-group-lg > .custom-select, +.input-group-lg > .input-group-prepend > .input-group-text, +.input-group-lg > .input-group-append > .input-group-text, +.input-group-lg > .input-group-prepend > .btn, +.input-group-lg > .input-group-append > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.input-group-sm > .form-control:not(textarea), +.input-group-sm > .custom-select { + height: calc(1.5em + 0.5rem + 2px); +} + +.input-group-sm > .form-control, +.input-group-sm > .custom-select, +.input-group-sm > .input-group-prepend > .input-group-text, +.input-group-sm > .input-group-append > .input-group-text, +.input-group-sm > .input-group-prepend > .btn, +.input-group-sm > .input-group-append > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.input-group-lg > .custom-select, +.input-group-sm > .custom-select { + padding-right: 1.75rem; +} + +.input-group > .input-group-prepend > .btn, +.input-group > .input-group-prepend > .input-group-text, +.input-group > .input-group-append:not(:last-child) > .btn, +.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .input-group-append > .btn, +.input-group > .input-group-append > .input-group-text, +.input-group > .input-group-prepend:not(:first-child) > .btn, +.input-group > .input-group-prepend:not(:first-child) > .input-group-text, +.input-group > .input-group-prepend:first-child > .btn:not(:first-child), +.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.custom-control { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; +} + +.custom-control-inline { + display: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem; +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #007bff; + background-color: #007bff; +} + +.custom-control-input:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #80bdff; +} + +.custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #b3d7ff; + border-color: #b3d7ff; +} + +.custom-control-input:disabled ~ .custom-control-label { + color: #6c757d; +} + +.custom-control-input:disabled ~ .custom-control-label::before { + background-color: #e9ecef; +} + +.custom-control-label { + position: relative; + margin-bottom: 0; + vertical-align: top; +} + +.custom-control-label::before { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + background-color: #fff; + border: #adb5bd solid 1px; +} + +.custom-control-label::after { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background: no-repeat 50% / 50% 50%; +} + +.custom-checkbox .custom-control-label::before { + border-radius: 0.25rem; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #007bff; + background-color: #007bff; +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); +} + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-radio .custom-control-label::before { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-switch { + padding-left: 2.25rem; +} + +.custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; +} + +.custom-switch .custom-control-label::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + transition: none; + } +} + +.custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + -webkit-transform: translateX(0.75rem); + transform: translateX(0.75rem); +} + +.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-select { + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-select:focus { + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 0.75rem; + background-image: none; +} + +.custom-select:disabled { + color: #6c757d; + background-color: #e9ecef; +} + +.custom-select::-ms-expand { + display: none; +} + +.custom-select-sm { + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; +} + +.custom-select-lg { + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; +} + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin-bottom: 0; +} + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin: 0; + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-label { + border-color: #80bdff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-file-input:disabled ~ .custom-file-label { + background-color: #e9ecef; +} + +.custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; +} + +.custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); +} + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: calc(1.5em + 0.75rem); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background-color: #e9ecef; + border-left: inherit; + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-range { + width: 100%; + height: calc(1rem + 0.4rem); + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-range:focus { + outline: none; +} + +.custom-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range::-moz-focus-outer { + border: 0; +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + transition: none; + } +} + +.custom-range::-webkit-slider-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + transition: none; + } +} + +.custom-range::-moz-range-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + transition: none; + } +} + +.custom-range::-ms-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; +} + +.custom-range::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem; +} + +.custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem; +} + +.custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; +} + +.custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-moz-range-track { + cursor: default; +} + +.custom-range:disabled::-ms-thumb { + background-color: #adb5bd; +} + +.custom-control-label::before, +.custom-file-label, +.custom-select { + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + transition: none; + } +} + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; +} + +.nav-link:hover, .nav-link:focus { + text-decoration: none; +} + +.nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} + +.nav-tabs .nav-item { + margin-bottom: -1px; +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; +} + +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + border-radius: 0.25rem; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #007bff; +} + +.nav-fill .nav-item { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; +} + +.nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 0.5rem 1rem; +} + +.navbar > .container, +.navbar > .container-fluid { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.navbar-brand { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} + +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} + +.navbar-nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-positive: 1; + flex-grow: 1; + -ms-flex-align: center; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } +} + +.navbar-expand { + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; +} + +.navbar-expand .navbar-nav { + -ms-flex-direction: row; + flex-direction: row; +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; +} + +.navbar-expand .navbar-collapse { + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; +} + +.navbar-expand .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fff; +} + +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-text a { + color: #fff; +} + +.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #fff; +} + +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} + +.card > hr { + margin-right: 0; + margin-left: 0; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; +} + +.card-title { + margin-bottom: 0.75rem; +} + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-header + .list-group .list-group-item:first-child { + border-top: 0; +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img { + width: 100%; + border-radius: calc(0.25rem - 1px); +} + +.card-img-top { + width: 100%; + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.card-deck { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-deck .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-deck { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .card-deck .card { + display: -ms-flexbox; + display: flex; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } +} + +.card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.card-group > .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-group { + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group > .card { + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.card-columns .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.accordion > .card { + overflow: hidden; +} + +.accordion > .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; +} + +.accordion > .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; +} + +.accordion > .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion > .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.accordion > .card .card-header { + margin-bottom: -1px; +} + +.breadcrumb { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #6c757d; +} + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #dee2e6; +} + +.page-link:hover { + z-index: 2; + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.page-link:focus { + z-index: 2; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} + +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .badge { + transition: none; + } +} + +a.badge:hover, a.badge:focus { + text-decoration: none; +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} + +.badge-primary { + color: #fff; + background-color: #007bff; +} + +a.badge-primary:hover, a.badge-primary:focus { + color: #fff; + background-color: #0062cc; +} + +a.badge-primary:focus, a.badge-primary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.badge-secondary { + color: #fff; + background-color: #6c757d; +} + +a.badge-secondary:hover, a.badge-secondary:focus { + color: #fff; + background-color: #545b62; +} + +a.badge-secondary:focus, a.badge-secondary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.badge-success { + color: #fff; + background-color: #28a745; +} + +a.badge-success:hover, a.badge-success:focus { + color: #fff; + background-color: #1e7e34; +} + +a.badge-success:focus, a.badge-success.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.badge-info { + color: #fff; + background-color: #17a2b8; +} + +a.badge-info:hover, a.badge-info:focus { + color: #fff; + background-color: #117a8b; +} + +a.badge-info:focus, a.badge-info.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.badge-warning { + color: #212529; + background-color: #ffc107; +} + +a.badge-warning:hover, a.badge-warning:focus { + color: #212529; + background-color: #d39e00; +} + +a.badge-warning:focus, a.badge-warning.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.badge-danger { + color: #fff; + background-color: #dc3545; +} + +a.badge-danger:hover, a.badge-danger:focus { + color: #fff; + background-color: #bd2130; +} + +a.badge-danger:focus, a.badge-danger.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.badge-light { + color: #212529; + background-color: #f8f9fa; +} + +a.badge-light:hover, a.badge-light:focus { + color: #212529; + background-color: #dae0e5; +} + +a.badge-light:focus, a.badge-light.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.badge-dark { + color: #fff; + background-color: #343a40; +} + +a.badge-dark:hover, a.badge-dark:focus { + color: #fff; + background-color: #1d2124; +} + +a.badge-dark:focus, a.badge-dark.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: 0.3rem; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 4rem; +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; +} + +.alert-primary hr { + border-top-color: #9fcdff; +} + +.alert-primary .alert-link { + color: #002752; +} + +.alert-secondary { + color: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db; +} + +.alert-secondary hr { + border-top-color: #c8cbcf; +} + +.alert-secondary .alert-link { + color: #202326; +} + +.alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; +} + +.alert-success hr { + border-top-color: #b1dfbb; +} + +.alert-success .alert-link { + color: #0b2e13; +} + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; +} + +.alert-info hr { + border-top-color: #abdde5; +} + +.alert-info .alert-link { + color: #062c33; +} + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; +} + +.alert-warning hr { + border-top-color: #ffe8a1; +} + +.alert-warning .alert-link { + color: #533f03; +} + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; +} + +.alert-danger hr { + border-top-color: #f1b0b7; +} + +.alert-danger .alert-link { + color: #491217; +} + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; +} + +.alert-light hr { + border-top-color: #ececf6; +} + +.alert-light .alert-link { + color: #686868; +} + +.alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; +} + +.alert-dark hr { + border-top-color: #b9bbbe; +} + +.alert-dark .alert-link { + color: #040505; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.progress-bar { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #007bff; + transition: width 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; +} + +.media-body { + -ms-flex: 1; + flex: 1; +} + +.list-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} + +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.list-group-horizontal { + -ms-flex-direction: row; + flex-direction: row; +} + +.list-group-horizontal .list-group-item { + margin-right: -1px; + margin-bottom: 0; +} + +.list-group-horizontal .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; +} + +.list-group-horizontal .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-sm .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-sm .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-sm .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } +} + +@media (min-width: 768px) { + .list-group-horizontal-md { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-md .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-md .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-md .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } +} + +@media (min-width: 992px) { + .list-group-horizontal-lg { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-lg .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-lg .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-lg .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } +} + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-xl .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-xl .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xl .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.list-group-flush .list-group-item:last-child { + margin-bottom: -1px; +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + margin-bottom: 0; + border-bottom: 0; +} + +.list-group-item-primary { + color: #004085; + background-color: #b8daff; +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #004085; + background-color: #9fcdff; +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #004085; + border-color: #004085; +} + +.list-group-item-secondary { + color: #383d41; + background-color: #d6d8db; +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #383d41; + background-color: #c8cbcf; +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #383d41; + border-color: #383d41; +} + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb; +} + +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #155724; + background-color: #b1dfbb; +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #155724; + border-color: #155724; +} + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb; +} + +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #0c5460; + background-color: #abdde5; +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; +} + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba; +} + +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #856404; + background-color: #ffe8a1; +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #856404; + border-color: #856404; +} + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb; +} + +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #721c24; + background-color: #f1b0b7; +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #721c24; + border-color: #721c24; +} + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe; +} + +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #818182; + background-color: #ececf6; +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818182; + border-color: #818182; +} + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca; +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #1b1e21; + background-color: #b9bbbe; +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} + +.close:hover { + color: #000; + text-decoration: none; +} + +.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; +} + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +a.close.disabled { + pointer-events: none; +} + +.toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + opacity: 0; + border-radius: 0.25rem; +} + +.toast:not(:last-child) { + margin-bottom: 0.75rem; +} + +.toast.showing { + opacity: 1; +} + +.toast.show { + display: block; + opacity: 1; +} + +.toast.hide { + display: none; +} + +.toast-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.toast-body { + padding: 0.75rem; +} + +.modal-open { + overflow: hidden; +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + display: none; + width: 100%; + height: 100%; + overflow: hidden; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +.modal.fade .modal-dialog { + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -50px); + transform: translate(0, -50px); +} + +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} + +.modal.show .modal-dialog { + -webkit-transform: none; + transform: none; +} + +.modal-dialog-scrollable { + display: -ms-flexbox; + display: flex; + max-height: calc(100% - 1rem); +} + +.modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 1rem); + overflow: hidden; +} + +.modal-dialog-scrollable .modal-header, +.modal-dialog-scrollable .modal-footer { + -ms-flex-negative: 0; + flex-shrink: 0; +} + +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - 1rem); +} + +.modal-dialog-centered::before { + display: block; + height: calc(100vh - 1rem); + content: ""; +} + +.modal-dialog-centered.modal-dialog-scrollable { + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-pack: center; + justify-content: center; + height: 100%; +} + +.modal-dialog-centered.modal-dialog-scrollable .modal-content { + max-height: none; +} + +.modal-dialog-centered.modal-dialog-scrollable::before { + content: none; +} + +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; +} + +.modal-header .close { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem; + border-top: 1px solid #dee2e6; + border-bottom-right-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} + +.modal-footer > :not(:first-child) { + margin-left: .25rem; +} + +.modal-footer > :not(:last-child) { + margin-right: .25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-scrollable { + max-height: calc(100% - 3.5rem); + } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 3.5rem); + } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + .modal-dialog-centered::before { + height: calc(100vh - 3.5rem); + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; + } +} + +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -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-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} + +.tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; +} + +.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; +} + +.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; +} + +.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; +} + +.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; +} + +.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; +} + +.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} + +.popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; +} + +.popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; +} + +.bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { + bottom: calc((0.5rem + 1px) * -1); +} + +.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; +} + +.bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { + left: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; +} + +.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { + top: calc((0.5rem + 1px) * -1); +} + +.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; +} + +.bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { + right: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 0.5rem 0.75rem; + color: #212529; +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + -ms-touch-action: pan-y; + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-left), +.active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-right), +.active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + -webkit-transform: none; + transform: none; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; + opacity: 1; +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + z-index: 0; + opacity: 0; + transition: 0s 0.6s opacity; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; + } +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: no-repeat 50% / 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + box-sizing: content-box; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + transition: none; + } +} + +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +@-webkit-keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: spinner-border .75s linear infinite; + animation: spinner-border .75s linear infinite; +} + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } +} + +@keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } +} + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: spinner-grow .75s linear infinite; + animation: spinner-grow .75s linear infinite; +} + +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-primary { + background-color: #007bff !important; +} + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #0062cc !important; +} + +.bg-secondary { + background-color: #6c757d !important; +} + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #545b62 !important; +} + +.bg-success { + background-color: #28a745 !important; +} + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #1e7e34 !important; +} + +.bg-info { + background-color: #17a2b8 !important; +} + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #117a8b !important; +} + +.bg-warning { + background-color: #ffc107 !important; +} + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #d39e00 !important; +} + +.bg-danger { + background-color: #dc3545 !important; +} + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #bd2130 !important; +} + +.bg-light { + background-color: #f8f9fa !important; +} + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #dae0e5 !important; +} + +.bg-dark { + background-color: #343a40 !important; +} + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #1d2124 !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.border { + border: 1px solid #dee2e6 !important; +} + +.border-top { + border-top: 1px solid #dee2e6 !important; +} + +.border-right { + border-right: 1px solid #dee2e6 !important; +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; +} + +.border-left { + border-left: 1px solid #dee2e6 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-right-0 { + border-right: 0 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-left-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: #007bff !important; +} + +.border-secondary { + border-color: #6c757d !important; +} + +.border-success { + border-color: #28a745 !important; +} + +.border-info { + border-color: #17a2b8 !important; +} + +.border-warning { + border-color: #ffc107 !important; +} + +.border-danger { + border-color: #dc3545 !important; +} + +.border-light { + border-color: #f8f9fa !important; +} + +.border-dark { + border-color: #343a40 !important; +} + +.border-white { + border-color: #fff !important; +} + +.rounded-sm { + border-radius: 0.2rem !important; +} + +.rounded { + border-radius: 0.25rem !important; +} + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-lg { + border-radius: 0.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 iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9::before { + padding-top: 42.857143%; +} + +.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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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; + 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 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 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: 0.25rem !important; +} + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; +} + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; +} + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; +} + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; +} + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2, +.mx-2 { + margin-left: 0.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: 0.25rem !important; +} + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; +} + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; +} + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; +} + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; +} + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2, +.px-2 { + padding-left: 0.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: -0.25rem !important; +} + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; +} + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; +} + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; +} + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; +} + +.m-n2 { + margin: -0.5rem !important; +} + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; +} + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; +} + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; +} + +.ml-n2, +.mx-n2 { + margin-left: -0.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: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.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: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.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: -0.25rem !important; + } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; + } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; + } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; + } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; + } + .m-sm-n2 { + margin: -0.5rem !important; + } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; + } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; + } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; + } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.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: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.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: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.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: -0.25rem !important; + } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; + } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; + } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; + } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; + } + .m-md-n2 { + margin: -0.5rem !important; + } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; + } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; + } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; + } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.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: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.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: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.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: -0.25rem !important; + } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; + } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; + } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; + } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; + } + .m-lg-n2 { + margin: -0.5rem !important; + } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; + } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; + } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; + } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.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: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.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: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.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: -0.25rem !important; + } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; + } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; + } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; + } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; + } + .m-xl-n2 { + margin: -0.5rem !important; + } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; + } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; + } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; + } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.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:hover, a.text-primary:focus { + color: #0056b3 !important; +} + +.text-secondary { + color: #6c757d !important; +} + +a.text-secondary:hover, a.text-secondary:focus { + color: #494f54 !important; +} + +.text-success { + color: #28a745 !important; +} + +a.text-success:hover, a.text-success:focus { + color: #19692c !important; +} + +.text-info { + color: #17a2b8 !important; +} + +a.text-info:hover, a.text-info:focus { + color: #0f6674 !important; +} + +.text-warning { + color: #ffc107 !important; +} + +a.text-warning:hover, a.text-warning:focus { + color: #ba8b00 !important; +} + +.text-danger { + color: #dc3545 !important; +} + +a.text-danger:hover, a.text-danger:focus { + color: #a71d2a !important; +} + +.text-light { + color: #f8f9fa !important; +} + +a.text-light:hover, a.text-light:focus { + color: #cbd3da !important; +} + +.text-dark { + color: #343a40 !important; +} + +a.text-dark:hover, a.text-dark:focus { + color: #121416 !important; +} + +.text-body { + color: #212529 !important; +} + +.text-muted { + color: #6c757d !important; +} + +.text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + color: rgba(255, 255, 255, 0.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; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; + } + a:not(.btn) { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 992px !important; + } + .container { + min-width: 992px !important; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #dee2e6; + } + .table .thead-dark th { + color: inherit; + border-color: #dee2e6; + } +} diff --git a/kk_odoo_saas/static/src/css/calculator.css b/kk_odoo_saas/static/src/css/calculator.css new file mode 100755 index 0000000..fb52eeb --- /dev/null +++ b/kk_odoo_saas/static/src/css/calculator.css @@ -0,0 +1,171 @@ +.col-lg-12{ + flex: 0 0 100%; + max-width: 100%; +} + +#price{ + display: inline; +} + +.pricing-card-title{ + font-size: 32px; +} + +.users-qty-change-buttons{ + max-width: 30px; + max-height: 30px; + opacity: 0.5; + cursor: pointer; +} + +.loader{ + position: fixed; + z-index: 99; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: white; + display: flex; + justify-content: center; + align-items: center; + opacity: 0.5; +} + +.status{ + font-size: 26px; + color: black; + position: fixed; + margin-top: -70px; +} + +.loader > img { + width: 100px; + opacity: 0.6; + transform: rotate(-30deg); +} + +.transition { + transition: 0.3s; +} + +.app, .package{ + max-height: 95px; + display: flex; + margin-bottom: 10px; + min-width: 174px; + cursor: pointer; +} + +.app-data{ + margin-left: 5%; +} + +.price-value{ + display: inline; +} + +.period{ + display: inline; +} + +.green-border{ + border: 2px solid green; +} + +.normal-border{ + border: 2px solid #FFFFFF; +} + +.hid{ + display: none; +} + +.fnt-24{ + font-size: 24px; +} + +.leftstr, .rightstr { + float: left; + width: 50%; +} + +.rightstr { + text-align: right; +} + +.fnt-larger{ + font-size: larger; +} + +@media (min-width: 1400px) { + #price-window + { + position: fixed; + right: 30%; + top: 20%; + width: 15%; + min-width: 20%; + z-index: 1; + } + + .page-alignment{ + min-width: 640px; + } + + .main-column{ + margin-right: auto; + margin-left: 10%; + max-width: 50%; + } +} + +@media (min-width: 999px) { + #price-window + { + position: fixed; + right: 15%; + top: 15%; + width: 20%; + z-index: 1; + } + + .main-column{ + margin-right: auto; + margin-left: 10%; + max-width: 50%; + } + + .page-alignment{ + min-width: 640px; + } + + .app, .package{ + margin-left: 7px; + max-width: 31%; + } +} + +@media (max-width: 799px) { + #price-window + { + position: fixed; + right: 0; + bottom: -6%; + width: 100%; + z-index: 1; + } + .container{ + margin-left: auto !important; + } + + .main-column{ + margin-right: auto; + margin-left: 10%; + max-width: 80%; + } +} + +.col-lg-9{ + padding-left: 0px; +} diff --git a/kk_odoo_saas/static/src/css/font-awesome.css b/kk_odoo_saas/static/src/css/font-awesome.css new file mode 100755 index 0000000..d8a8395 --- /dev/null +++ b/kk_odoo_saas/static/src/css/font-awesome.css @@ -0,0 +1,2338 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/kk_odoo_saas/static/src/css/logs-viewer.css b/kk_odoo_saas/static/src/css/logs-viewer.css new file mode 100755 index 0000000..64bea02 --- /dev/null +++ b/kk_odoo_saas/static/src/css/logs-viewer.css @@ -0,0 +1,71 @@ +html, body { + height: 100%; +} +.o-logs-container{ + height: auto; +} +.o-logs{ + word-wrap: break-word; + font-family: monospace; + font-size: 13px; + line-height: normal; + margin: 0; + padding-top:80px; +} +.header{ + position: fixed; + top: 0; + width: 100%; + background: #f9f9f9; + border-bottom: 1px solid #d3d3d3; + padding: 6px 15px; + box-shadow: 0 0 6px #ddd; +} +.status-bar { + text-align: right; + padding-right: 15px; +} +.button-pause{ + position: relative; + color: #555; + font-size: 16px; + padding: 0; + margin-right: 10px; +} +.button-pause i{ + margin-left: 9px; + margin-right: 5px; +} +.loader{ + position: absolute; + top: -4px; + border: 2px solid #f3f3f3; + border-top: 2px solid #555; + border-radius: 50%; + width: 30px; + height: 30px; + z-index: -1; +} +.loader.loading{ + -webkit-animation: spin 1s linear infinite; + animation: spin 1s linear infinite; +} +.form-inline .form-group { + margin-bottom: 0; + vertical-align: middle; + display: inline-block; +} +.form-inline .form-group input { + display: inline-block; + width: auto; +} + +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} diff --git a/kk_odoo_saas/static/src/img/add-users.png b/kk_odoo_saas/static/src/img/add-users.png new file mode 100755 index 0000000000000000000000000000000000000000..517a363a3fbfff41ae483d7bd88ee99b7f5682b8 GIT binary patch literal 6516 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