From 89f35ca46668061e132514950a7c9c4afaaf4aba Mon Sep 17 00:00:00 2001 From: Js_Sman_Omen Date: Mon, 24 Mar 2025 14:34:56 +0100 Subject: [PATCH] Release - Upload --- .vscode/launch.json | 54 + Backend/.gitignore | 168 + Backend/.vscode/settings.json | 20 + Backend/README.md | 64 + Backend/RestTest.http | 0 Backend/api/__init__.py | 0 Backend/api/serializer.py | 576 ++ Backend/api/urls.py | 24 + Backend/api/views.py | 250 + Backend/authstuff/__init__.py | 0 Backend/authstuff/admin.py | 3 + Backend/authstuff/apps.py | 5 + Backend/authstuff/ldap_access.py | 167 + Backend/authstuff/migrations/0001_initial.py | 28 + Backend/authstuff/migrations/__init__.py | 0 Backend/authstuff/models.py | 25 + Backend/authstuff/templatetags/__init__.py | 0 Backend/authstuff/templatetags/auth_tags.py | 9 + Backend/authstuff/tests.py | 17 + Backend/authstuff/views.py | 20 + Backend/manage.py | 22 + Backend/medinf/ReadUserData.py | 36 + Backend/medinf/__init__.py | 0 Backend/medinf/context_processors.py | 4 + Backend/medinf/fixtures/READ.ME | 1 + Backend/medinf/fixtures/groups.json | 30 + Backend/medinf/ldap_backend.py | 92 + Backend/medinf/settings.py | 306 + Backend/medinf/urls.py | 37 + Backend/medinf/views.py | 59 + Backend/medinf/wsgi.py | 21 + Backend/pruefplan_parser/__init__.py | 0 Backend/pruefplan_parser/admin.py | 3 + Backend/pruefplan_parser/apps.py | 5 + Backend/pruefplan_parser/data/Dozenten.json | 229 + Backend/pruefplan_parser/data/Faecher.json | 1121 +++ Backend/pruefplan_parser/data/Praesenzen.json | 161 + Backend/pruefplan_parser/data/Pruefungen.json | 803 ++ Backend/pruefplan_parser/data/READ.ME | 1 + .../pruefplan_parser/data/Saaleinteilung.json | 577 ++ Backend/pruefplan_parser/forms.py | 9 + .../migrations/0001_initial.py | 20 + .../pruefplan_parser/migrations/__init__.py | 0 Backend/pruefplan_parser/models.py | 454 + Backend/pruefplan_parser/urls.py | 10 + Backend/pruefplan_parser/utils.py | 7 + Backend/pruefplan_parser/views.py | 65 + Backend/pruefplan_viewer/__init__.py | 0 Backend/pruefplan_viewer/admin.py | 4 + Backend/pruefplan_viewer/apps.py | 5 + .../migrations/0001_initial.py | 94 + .../0002_alter_examexecution_options.py | 18 + .../migrations/0003_presences.py | 19 + ...es_datetimetext_presences_time_and_more.py | 33 + .../migrations/0005_presences_lecturer.py | 19 + .../0006_rename_presences_attendance.py | 17 + .../0007_api_examdataset_forstudent.py | 19 + ...pi_examdataset_forstudent_date_and_more.py | 63 + .../pruefplan_viewer/migrations/__init__.py | 0 Backend/pruefplan_viewer/models.py | 148 + Backend/pruefplan_viewer/tests.py | 3 + Backend/pruefplan_viewer/urls.py | 13 + Backend/pruefplan_viewer/views.py | 115 + Backend/requirements.txt | 49 + .../static/bootstrap/css/bootstrap-grid.css | 1567 +++ .../bootstrap/css/bootstrap-grid.css.map | 1 + .../bootstrap/css/bootstrap-grid.min.css | 7 + .../bootstrap/css/bootstrap-grid.min.css.map | 1 + .../static/bootstrap/css/bootstrap-reboot.css | 342 + .../bootstrap/css/bootstrap-reboot.css.map | 1 + .../bootstrap/css/bootstrap-reboot.min.css | 8 + .../css/bootstrap-reboot.min.css.map | 1 + Backend/static/bootstrap/css/bootstrap.css | 8374 +++++++++++++++++ .../static/bootstrap/css/bootstrap.css.map | 1 + .../static/bootstrap/css/bootstrap.min.css | 7 + .../bootstrap/css/bootstrap.min.css.map | 1 + .../static/bootstrap/js/bootstrap.bundle.js | 6287 +++++++++++++ .../bootstrap/js/bootstrap.bundle.js.map | 1 + .../bootstrap/js/bootstrap.bundle.min.js | 7 + .../bootstrap/js/bootstrap.bundle.min.js.map | 1 + Backend/static/bootstrap/js/bootstrap.js | 3850 ++++++++ Backend/static/bootstrap/js/bootstrap.js.map | 1 + Backend/static/bootstrap/js/bootstrap.min.js | 7 + .../static/bootstrap/js/bootstrap.min.js.map | 1 + Backend/static/css/bots.css | 231 + Backend/static/css/dropzone.min.css | 1 + Backend/static/css/medinf.css | 58 + Backend/static/css/pruefplan.css | 3 + Backend/static/favicon.ico | Bin 0 -> 1150 bytes Backend/static/fileUpload/bootstrap.fd.css | 23 + Backend/static/fileUpload/bootstrap.fd.js | 1 + Backend/static/images/BOTS.png | Bin 0 -> 2676 bytes Backend/static/images/TH.png | Bin 0 -> 15854 bytes Backend/static/images/efi.jpg | Bin 0 -> 35796 bytes Backend/static/images/kurz.png | Bin 0 -> 9477 bytes Backend/static/images/planetcut.png | Bin 0 -> 14022 bytes Backend/static/images/skyleft.png | Bin 0 -> 1577 bytes Backend/static/images/skyright.png | Bin 0 -> 10892 bytes Backend/static/js/dropzone.min.js | 1 + Backend/static/js/jquery-3.5.1.min.js | 2 + .../static/open-iconic/svg/account-login.svg | 3 + .../static/open-iconic/svg/account-logout.svg | 3 + .../static/open-iconic/svg/action-redo.svg | 3 + .../static/open-iconic/svg/action-undo.svg | 3 + .../static/open-iconic/svg/align-center.svg | 3 + Backend/static/open-iconic/svg/align-left.svg | 3 + .../static/open-iconic/svg/align-right.svg | 3 + Backend/static/open-iconic/svg/aperture.svg | 4 + .../static/open-iconic/svg/arrow-bottom.svg | 3 + .../open-iconic/svg/arrow-circle-bottom.svg | 3 + .../open-iconic/svg/arrow-circle-left.svg | 3 + .../open-iconic/svg/arrow-circle-right.svg | 3 + .../open-iconic/svg/arrow-circle-top.svg | 3 + Backend/static/open-iconic/svg/arrow-left.svg | 3 + .../static/open-iconic/svg/arrow-right.svg | 3 + .../open-iconic/svg/arrow-thick-bottom.svg | 3 + .../open-iconic/svg/arrow-thick-left.svg | 3 + .../open-iconic/svg/arrow-thick-right.svg | 3 + .../open-iconic/svg/arrow-thick-top.svg | 3 + Backend/static/open-iconic/svg/arrow-top.svg | 3 + .../static/open-iconic/svg/audio-spectrum.svg | 3 + Backend/static/open-iconic/svg/audio.svg | 4 + Backend/static/open-iconic/svg/badge.svg | 3 + Backend/static/open-iconic/svg/ban.svg | 3 + Backend/static/open-iconic/svg/bar-chart.svg | 3 + Backend/static/open-iconic/svg/basket.svg | 4 + .../static/open-iconic/svg/battery-empty.svg | 3 + .../static/open-iconic/svg/battery-full.svg | 3 + Backend/static/open-iconic/svg/beaker.svg | 4 + Backend/static/open-iconic/svg/bell.svg | 3 + Backend/static/open-iconic/svg/bluetooth.svg | 3 + Backend/static/open-iconic/svg/bold.svg | 3 + Backend/static/open-iconic/svg/bolt.svg | 3 + Backend/static/open-iconic/svg/book.svg | 3 + Backend/static/open-iconic/svg/bookmark.svg | 3 + Backend/static/open-iconic/svg/box.svg | 3 + Backend/static/open-iconic/svg/briefcase.svg | 4 + .../static/open-iconic/svg/british-pound.svg | 4 + Backend/static/open-iconic/svg/browser.svg | 4 + Backend/static/open-iconic/svg/brush.svg | 4 + Backend/static/open-iconic/svg/bug.svg | 4 + Backend/static/open-iconic/svg/bullhorn.svg | 4 + Backend/static/open-iconic/svg/calculator.svg | 3 + Backend/static/open-iconic/svg/calendar.svg | 3 + Backend/static/open-iconic/svg/camera-slr.svg | 4 + .../static/open-iconic/svg/caret-bottom.svg | 3 + Backend/static/open-iconic/svg/caret-left.svg | 3 + .../static/open-iconic/svg/caret-right.svg | 3 + Backend/static/open-iconic/svg/caret-top.svg | 3 + Backend/static/open-iconic/svg/cart.svg | 4 + Backend/static/open-iconic/svg/chat.svg | 3 + Backend/static/open-iconic/svg/check.svg | 3 + .../static/open-iconic/svg/chevron-bottom.svg | 3 + .../static/open-iconic/svg/chevron-left.svg | 3 + .../static/open-iconic/svg/chevron-right.svg | 3 + .../static/open-iconic/svg/chevron-top.svg | 3 + .../static/open-iconic/svg/circle-check.svg | 3 + Backend/static/open-iconic/svg/circle-x.svg | 3 + Backend/static/open-iconic/svg/clipboard.svg | 3 + Backend/static/open-iconic/svg/clock.svg | 3 + .../static/open-iconic/svg/cloud-download.svg | 4 + .../static/open-iconic/svg/cloud-upload.svg | 3 + Backend/static/open-iconic/svg/cloud.svg | 3 + Backend/static/open-iconic/svg/cloudy.svg | 4 + Backend/static/open-iconic/svg/code.svg | 3 + Backend/static/open-iconic/svg/cog.svg | 4 + .../static/open-iconic/svg/collapse-down.svg | 3 + .../static/open-iconic/svg/collapse-left.svg | 3 + .../static/open-iconic/svg/collapse-right.svg | 3 + .../static/open-iconic/svg/collapse-up.svg | 3 + Backend/static/open-iconic/svg/command.svg | 4 + .../static/open-iconic/svg/comment-square.svg | 3 + Backend/static/open-iconic/svg/compass.svg | 3 + Backend/static/open-iconic/svg/contrast.svg | 3 + .../static/open-iconic/svg/copywriting.svg | 3 + .../static/open-iconic/svg/credit-card.svg | 3 + Backend/static/open-iconic/svg/crop.svg | 3 + Backend/static/open-iconic/svg/dashboard.svg | 4 + .../svg/data-transfer-download.svg | 3 + .../open-iconic/svg/data-transfer-upload.svg | 3 + Backend/static/open-iconic/svg/delete.svg | 3 + Backend/static/open-iconic/svg/dial.svg | 3 + Backend/static/open-iconic/svg/document.svg | 3 + Backend/static/open-iconic/svg/dollar.svg | 4 + .../svg/double-quote-sans-left.svg | 3 + .../svg/double-quote-sans-right.svg | 3 + .../svg/double-quote-serif-left.svg | 3 + .../svg/double-quote-serif-right.svg | 3 + Backend/static/open-iconic/svg/droplet.svg | 3 + Backend/static/open-iconic/svg/eject.svg | 3 + Backend/static/open-iconic/svg/elevator.svg | 3 + Backend/static/open-iconic/svg/ellipses.svg | 3 + .../open-iconic/svg/envelope-closed.svg | 3 + .../static/open-iconic/svg/envelope-open.svg | 3 + Backend/static/open-iconic/svg/euro.svg | 4 + Backend/static/open-iconic/svg/excerpt.svg | 3 + .../static/open-iconic/svg/expand-down.svg | 3 + .../static/open-iconic/svg/expand-left.svg | 3 + .../static/open-iconic/svg/expand-right.svg | 3 + Backend/static/open-iconic/svg/expand-up.svg | 3 + .../static/open-iconic/svg/external-link.svg | 3 + Backend/static/open-iconic/svg/eye.svg | 4 + Backend/static/open-iconic/svg/eyedropper.svg | 4 + Backend/static/open-iconic/svg/file.svg | 3 + Backend/static/open-iconic/svg/fire.svg | 3 + Backend/static/open-iconic/svg/flag.svg | 3 + Backend/static/open-iconic/svg/flash.svg | 3 + Backend/static/open-iconic/svg/folder.svg | 3 + Backend/static/open-iconic/svg/fork.svg | 4 + .../open-iconic/svg/fullscreen-enter.svg | 3 + .../open-iconic/svg/fullscreen-exit.svg | 3 + Backend/static/open-iconic/svg/globe.svg | 4 + Backend/static/open-iconic/svg/graph.svg | 3 + .../static/open-iconic/svg/grid-four-up.svg | 4 + .../static/open-iconic/svg/grid-three-up.svg | 3 + .../static/open-iconic/svg/grid-two-up.svg | 3 + Backend/static/open-iconic/svg/hard-drive.svg | 4 + Backend/static/open-iconic/svg/header.svg | 3 + Backend/static/open-iconic/svg/headphones.svg | 3 + Backend/static/open-iconic/svg/heart.svg | 4 + Backend/static/open-iconic/svg/home.svg | 3 + Backend/static/open-iconic/svg/image.svg | 3 + Backend/static/open-iconic/svg/inbox.svg | 3 + Backend/static/open-iconic/svg/infinity.svg | 4 + Backend/static/open-iconic/svg/info.svg | 4 + Backend/static/open-iconic/svg/italic.svg | 3 + .../static/open-iconic/svg/justify-center.svg | 3 + .../static/open-iconic/svg/justify-left.svg | 3 + .../static/open-iconic/svg/justify-right.svg | 3 + Backend/static/open-iconic/svg/key.svg | 3 + Backend/static/open-iconic/svg/laptop.svg | 3 + Backend/static/open-iconic/svg/layers.svg | 3 + Backend/static/open-iconic/svg/lightbulb.svg | 4 + .../static/open-iconic/svg/link-broken.svg | 4 + .../static/open-iconic/svg/link-intact.svg | 4 + Backend/static/open-iconic/svg/list-rich.svg | 3 + Backend/static/open-iconic/svg/list.svg | 4 + Backend/static/open-iconic/svg/location.svg | 3 + .../static/open-iconic/svg/lock-locked.svg | 3 + .../static/open-iconic/svg/lock-unlocked.svg | 3 + .../static/open-iconic/svg/loop-circular.svg | 3 + .../static/open-iconic/svg/loop-square.svg | 3 + Backend/static/open-iconic/svg/loop.svg | 3 + .../open-iconic/svg/magnifying-glass.svg | 4 + Backend/static/open-iconic/svg/map-marker.svg | 3 + Backend/static/open-iconic/svg/map.svg | 4 + .../static/open-iconic/svg/media-pause.svg | 3 + Backend/static/open-iconic/svg/media-play.svg | 3 + .../static/open-iconic/svg/media-record.svg | 3 + .../open-iconic/svg/media-skip-backward.svg | 3 + .../open-iconic/svg/media-skip-forward.svg | 3 + .../open-iconic/svg/media-step-backward.svg | 3 + .../open-iconic/svg/media-step-forward.svg | 3 + Backend/static/open-iconic/svg/media-stop.svg | 3 + .../static/open-iconic/svg/medical-cross.svg | 3 + Backend/static/open-iconic/svg/menu.svg | 3 + Backend/static/open-iconic/svg/microphone.svg | 4 + Backend/static/open-iconic/svg/minus.svg | 3 + Backend/static/open-iconic/svg/monitor.svg | 3 + Backend/static/open-iconic/svg/moon.svg | 3 + Backend/static/open-iconic/svg/move.svg | 3 + .../static/open-iconic/svg/musical-note.svg | 3 + Backend/static/open-iconic/svg/paperclip.svg | 4 + Backend/static/open-iconic/svg/pencil.svg | 3 + Backend/static/open-iconic/svg/people.svg | 4 + Backend/static/open-iconic/svg/person.svg | 3 + Backend/static/open-iconic/svg/phone.svg | 3 + Backend/static/open-iconic/svg/pie-chart.svg | 4 + Backend/static/open-iconic/svg/pin.svg | 3 + .../static/open-iconic/svg/play-circle.svg | 3 + Backend/static/open-iconic/svg/plus.svg | 3 + .../static/open-iconic/svg/power-standby.svg | 4 + Backend/static/open-iconic/svg/print.svg | 3 + Backend/static/open-iconic/svg/project.svg | 3 + Backend/static/open-iconic/svg/pulse.svg | 3 + .../static/open-iconic/svg/puzzle-piece.svg | 4 + .../static/open-iconic/svg/question-mark.svg | 4 + Backend/static/open-iconic/svg/rain.svg | 4 + Backend/static/open-iconic/svg/random.svg | 4 + Backend/static/open-iconic/svg/reload.svg | 3 + .../static/open-iconic/svg/resize-both.svg | 3 + .../static/open-iconic/svg/resize-height.svg | 3 + .../static/open-iconic/svg/resize-width.svg | 3 + Backend/static/open-iconic/svg/rss-alt.svg | 3 + Backend/static/open-iconic/svg/rss.svg | 3 + Backend/static/open-iconic/svg/script.svg | 3 + .../static/open-iconic/svg/share-boxed.svg | 3 + Backend/static/open-iconic/svg/share.svg | 3 + Backend/static/open-iconic/svg/shield.svg | 4 + Backend/static/open-iconic/svg/signal.svg | 3 + Backend/static/open-iconic/svg/signpost.svg | 3 + .../static/open-iconic/svg/sort-ascending.svg | 3 + .../open-iconic/svg/sort-descending.svg | 3 + .../static/open-iconic/svg/spreadsheet.svg | 3 + Backend/static/open-iconic/svg/star.svg | 3 + Backend/static/open-iconic/svg/sun.svg | 4 + Backend/static/open-iconic/svg/tablet.svg | 3 + Backend/static/open-iconic/svg/tag.svg | 3 + Backend/static/open-iconic/svg/tags.svg | 3 + Backend/static/open-iconic/svg/target.svg | 3 + Backend/static/open-iconic/svg/task.svg | 3 + Backend/static/open-iconic/svg/terminal.svg | 3 + Backend/static/open-iconic/svg/text.svg | 3 + Backend/static/open-iconic/svg/thumb-down.svg | 3 + Backend/static/open-iconic/svg/thumb-up.svg | 4 + Backend/static/open-iconic/svg/timer.svg | 4 + Backend/static/open-iconic/svg/transfer.svg | 3 + Backend/static/open-iconic/svg/trash.svg | 3 + Backend/static/open-iconic/svg/underline.svg | 3 + .../open-iconic/svg/vertical-align-bottom.svg | 4 + .../open-iconic/svg/vertical-align-center.svg | 4 + .../open-iconic/svg/vertical-align-top.svg | 4 + Backend/static/open-iconic/svg/video.svg | 3 + .../static/open-iconic/svg/volume-high.svg | 4 + Backend/static/open-iconic/svg/volume-low.svg | 3 + Backend/static/open-iconic/svg/volume-off.svg | 3 + Backend/static/open-iconic/svg/warning.svg | 3 + Backend/static/open-iconic/svg/wifi.svg | 4 + Backend/static/open-iconic/svg/wrench.svg | 4 + Backend/static/open-iconic/svg/x.svg | 3 + Backend/static/open-iconic/svg/yen.svg | 3 + Backend/static/open-iconic/svg/zoom-in.svg | 4 + Backend/static/open-iconic/svg/zoom-out.svg | 4 + Backend/templates/base.html | 137 + Backend/templates/index.html | 25 + Backend/templates/pruefplan/clearTable.html | 9 + Backend/templates/pruefplan/exam.html | 80 + .../pruefplan/exceptionHandling.html | 30 + Backend/templates/pruefplan/lecturer.html | 50 + Backend/templates/pruefplan/lecturerExam.html | 230 + Backend/templates/pruefplan/parse.html | 5 + Backend/templates/pruefplan/student.html | 42 + Backend/templates/pruefplan/studentExam.html | 70 + Backend/templates/pruefplan/subject.html | 39 + Backend/templates/pruefplan/tableBase.html | 23 + Backend/templates/pruefplan/upload.html | 31 + .../templates/registration/logged_out.html | 7 + Backend/templates/registration/login.html | 36 + Frontend/.gitignore | 24 + Frontend/README.md | 8 + Frontend/eslint.config.js | 38 + Frontend/index.html | 34 + Frontend/jsconfig.json | 15 + Frontend/package.json | 48 + Frontend/public/vite.svg | 1 + Frontend/src/App.css | 58 + Frontend/src/App.jsx | 31 + Frontend/src/assets/settings_icon.png | Bin 0 -> 15591 bytes Frontend/src/assets/th_logo_big.jpg | Bin 0 -> 13495 bytes Frontend/src/assets/th_logo_small.jpg | Bin 0 -> 15971 bytes Frontend/src/components/EventTable.jsx | 59 + Frontend/src/components/LogbookCard.jsx | 34 + Frontend/src/components/LoginForm.jsx | 106 + Frontend/src/components/MartNrForm.jsx | 78 + Frontend/src/components/Navbar.jsx | 121 + Frontend/src/components/PruefplanTable.jsx | 353 + Frontend/src/components/SettingsCard.jsx | 128 + Frontend/src/index.css | 78 + Frontend/src/layouts/MainWrapper.jsx | 25 + Frontend/src/layouts/PrivateRoute.jsx | 14 + Frontend/src/main.jsx | 10 + Frontend/src/store/auth.js | 42 + Frontend/src/utils/auth.js | 125 + Frontend/src/utils/axios.js | 15 + Frontend/src/utils/constants.js | 1 + Frontend/src/utils/useAxios.js | 36 + Frontend/src/views/Homepage.jsx | 40 + Frontend/src/views/Mainpage.jsx | 107 + Frontend/vite.config.js | 7 + Frontend/yarn.lock | 2822 ++++++ 370 files changed, 32904 insertions(+) create mode 100644 .vscode/launch.json create mode 100644 Backend/.gitignore create mode 100644 Backend/.vscode/settings.json create mode 100644 Backend/README.md create mode 100644 Backend/RestTest.http create mode 100644 Backend/api/__init__.py create mode 100644 Backend/api/serializer.py create mode 100644 Backend/api/urls.py create mode 100644 Backend/api/views.py create mode 100644 Backend/authstuff/__init__.py create mode 100644 Backend/authstuff/admin.py create mode 100644 Backend/authstuff/apps.py create mode 100644 Backend/authstuff/ldap_access.py create mode 100644 Backend/authstuff/migrations/0001_initial.py create mode 100644 Backend/authstuff/migrations/__init__.py create mode 100644 Backend/authstuff/models.py create mode 100644 Backend/authstuff/templatetags/__init__.py create mode 100644 Backend/authstuff/templatetags/auth_tags.py create mode 100644 Backend/authstuff/tests.py create mode 100644 Backend/authstuff/views.py create mode 100644 Backend/manage.py create mode 100644 Backend/medinf/ReadUserData.py create mode 100644 Backend/medinf/__init__.py create mode 100644 Backend/medinf/context_processors.py create mode 100644 Backend/medinf/fixtures/READ.ME create mode 100644 Backend/medinf/fixtures/groups.json create mode 100644 Backend/medinf/ldap_backend.py create mode 100644 Backend/medinf/settings.py create mode 100644 Backend/medinf/urls.py create mode 100644 Backend/medinf/views.py create mode 100644 Backend/medinf/wsgi.py create mode 100644 Backend/pruefplan_parser/__init__.py create mode 100644 Backend/pruefplan_parser/admin.py create mode 100644 Backend/pruefplan_parser/apps.py create mode 100644 Backend/pruefplan_parser/data/Dozenten.json create mode 100644 Backend/pruefplan_parser/data/Faecher.json create mode 100644 Backend/pruefplan_parser/data/Praesenzen.json create mode 100644 Backend/pruefplan_parser/data/Pruefungen.json create mode 100644 Backend/pruefplan_parser/data/READ.ME create mode 100644 Backend/pruefplan_parser/data/Saaleinteilung.json create mode 100644 Backend/pruefplan_parser/forms.py create mode 100644 Backend/pruefplan_parser/migrations/0001_initial.py create mode 100644 Backend/pruefplan_parser/migrations/__init__.py create mode 100644 Backend/pruefplan_parser/models.py create mode 100644 Backend/pruefplan_parser/urls.py create mode 100644 Backend/pruefplan_parser/utils.py create mode 100644 Backend/pruefplan_parser/views.py create mode 100644 Backend/pruefplan_viewer/__init__.py create mode 100644 Backend/pruefplan_viewer/admin.py create mode 100644 Backend/pruefplan_viewer/apps.py create mode 100644 Backend/pruefplan_viewer/migrations/0001_initial.py create mode 100644 Backend/pruefplan_viewer/migrations/0002_alter_examexecution_options.py create mode 100644 Backend/pruefplan_viewer/migrations/0003_presences.py create mode 100644 Backend/pruefplan_viewer/migrations/0004_presences_date_presences_datetimetext_presences_time_and_more.py create mode 100644 Backend/pruefplan_viewer/migrations/0005_presences_lecturer.py create mode 100644 Backend/pruefplan_viewer/migrations/0006_rename_presences_attendance.py create mode 100644 Backend/pruefplan_viewer/migrations/0007_api_examdataset_forstudent.py create mode 100644 Backend/pruefplan_viewer/migrations/0008_api_examdataset_forstudent_date_and_more.py create mode 100644 Backend/pruefplan_viewer/migrations/__init__.py create mode 100644 Backend/pruefplan_viewer/models.py create mode 100644 Backend/pruefplan_viewer/tests.py create mode 100644 Backend/pruefplan_viewer/urls.py create mode 100644 Backend/pruefplan_viewer/views.py create mode 100644 Backend/requirements.txt create mode 100644 Backend/static/bootstrap/css/bootstrap-grid.css create mode 100644 Backend/static/bootstrap/css/bootstrap-grid.css.map create mode 100644 Backend/static/bootstrap/css/bootstrap-grid.min.css create mode 100644 Backend/static/bootstrap/css/bootstrap-grid.min.css.map create mode 100644 Backend/static/bootstrap/css/bootstrap-reboot.css create mode 100644 Backend/static/bootstrap/css/bootstrap-reboot.css.map create mode 100644 Backend/static/bootstrap/css/bootstrap-reboot.min.css create mode 100644 Backend/static/bootstrap/css/bootstrap-reboot.min.css.map create mode 100644 Backend/static/bootstrap/css/bootstrap.css create mode 100644 Backend/static/bootstrap/css/bootstrap.css.map create mode 100644 Backend/static/bootstrap/css/bootstrap.min.css create mode 100644 Backend/static/bootstrap/css/bootstrap.min.css.map create mode 100644 Backend/static/bootstrap/js/bootstrap.bundle.js create mode 100644 Backend/static/bootstrap/js/bootstrap.bundle.js.map create mode 100644 Backend/static/bootstrap/js/bootstrap.bundle.min.js create mode 100644 Backend/static/bootstrap/js/bootstrap.bundle.min.js.map create mode 100644 Backend/static/bootstrap/js/bootstrap.js create mode 100644 Backend/static/bootstrap/js/bootstrap.js.map create mode 100644 Backend/static/bootstrap/js/bootstrap.min.js create mode 100644 Backend/static/bootstrap/js/bootstrap.min.js.map create mode 100644 Backend/static/css/bots.css create mode 100644 Backend/static/css/dropzone.min.css create mode 100644 Backend/static/css/medinf.css create mode 100644 Backend/static/css/pruefplan.css create mode 100644 Backend/static/favicon.ico create mode 100644 Backend/static/fileUpload/bootstrap.fd.css create mode 100644 Backend/static/fileUpload/bootstrap.fd.js create mode 100644 Backend/static/images/BOTS.png create mode 100644 Backend/static/images/TH.png create mode 100644 Backend/static/images/efi.jpg create mode 100644 Backend/static/images/kurz.png create mode 100644 Backend/static/images/planetcut.png create mode 100644 Backend/static/images/skyleft.png create mode 100644 Backend/static/images/skyright.png create mode 100644 Backend/static/js/dropzone.min.js create mode 100644 Backend/static/js/jquery-3.5.1.min.js create mode 100644 Backend/static/open-iconic/svg/account-login.svg create mode 100644 Backend/static/open-iconic/svg/account-logout.svg create mode 100644 Backend/static/open-iconic/svg/action-redo.svg create mode 100644 Backend/static/open-iconic/svg/action-undo.svg create mode 100644 Backend/static/open-iconic/svg/align-center.svg create mode 100644 Backend/static/open-iconic/svg/align-left.svg create mode 100644 Backend/static/open-iconic/svg/align-right.svg create mode 100644 Backend/static/open-iconic/svg/aperture.svg create mode 100644 Backend/static/open-iconic/svg/arrow-bottom.svg create mode 100644 Backend/static/open-iconic/svg/arrow-circle-bottom.svg create mode 100644 Backend/static/open-iconic/svg/arrow-circle-left.svg create mode 100644 Backend/static/open-iconic/svg/arrow-circle-right.svg create mode 100644 Backend/static/open-iconic/svg/arrow-circle-top.svg create mode 100644 Backend/static/open-iconic/svg/arrow-left.svg create mode 100644 Backend/static/open-iconic/svg/arrow-right.svg create mode 100644 Backend/static/open-iconic/svg/arrow-thick-bottom.svg create mode 100644 Backend/static/open-iconic/svg/arrow-thick-left.svg create mode 100644 Backend/static/open-iconic/svg/arrow-thick-right.svg create mode 100644 Backend/static/open-iconic/svg/arrow-thick-top.svg create mode 100644 Backend/static/open-iconic/svg/arrow-top.svg create mode 100644 Backend/static/open-iconic/svg/audio-spectrum.svg create mode 100644 Backend/static/open-iconic/svg/audio.svg create mode 100644 Backend/static/open-iconic/svg/badge.svg create mode 100644 Backend/static/open-iconic/svg/ban.svg create mode 100644 Backend/static/open-iconic/svg/bar-chart.svg create mode 100644 Backend/static/open-iconic/svg/basket.svg create mode 100644 Backend/static/open-iconic/svg/battery-empty.svg create mode 100644 Backend/static/open-iconic/svg/battery-full.svg create mode 100644 Backend/static/open-iconic/svg/beaker.svg create mode 100644 Backend/static/open-iconic/svg/bell.svg create mode 100644 Backend/static/open-iconic/svg/bluetooth.svg create mode 100644 Backend/static/open-iconic/svg/bold.svg create mode 100644 Backend/static/open-iconic/svg/bolt.svg create mode 100644 Backend/static/open-iconic/svg/book.svg create mode 100644 Backend/static/open-iconic/svg/bookmark.svg create mode 100644 Backend/static/open-iconic/svg/box.svg create mode 100644 Backend/static/open-iconic/svg/briefcase.svg create mode 100644 Backend/static/open-iconic/svg/british-pound.svg create mode 100644 Backend/static/open-iconic/svg/browser.svg create mode 100644 Backend/static/open-iconic/svg/brush.svg create mode 100644 Backend/static/open-iconic/svg/bug.svg create mode 100644 Backend/static/open-iconic/svg/bullhorn.svg create mode 100644 Backend/static/open-iconic/svg/calculator.svg create mode 100644 Backend/static/open-iconic/svg/calendar.svg create mode 100644 Backend/static/open-iconic/svg/camera-slr.svg create mode 100644 Backend/static/open-iconic/svg/caret-bottom.svg create mode 100644 Backend/static/open-iconic/svg/caret-left.svg create mode 100644 Backend/static/open-iconic/svg/caret-right.svg create mode 100644 Backend/static/open-iconic/svg/caret-top.svg create mode 100644 Backend/static/open-iconic/svg/cart.svg create mode 100644 Backend/static/open-iconic/svg/chat.svg create mode 100644 Backend/static/open-iconic/svg/check.svg create mode 100644 Backend/static/open-iconic/svg/chevron-bottom.svg create mode 100644 Backend/static/open-iconic/svg/chevron-left.svg create mode 100644 Backend/static/open-iconic/svg/chevron-right.svg create mode 100644 Backend/static/open-iconic/svg/chevron-top.svg create mode 100644 Backend/static/open-iconic/svg/circle-check.svg create mode 100644 Backend/static/open-iconic/svg/circle-x.svg create mode 100644 Backend/static/open-iconic/svg/clipboard.svg create mode 100644 Backend/static/open-iconic/svg/clock.svg create mode 100644 Backend/static/open-iconic/svg/cloud-download.svg create mode 100644 Backend/static/open-iconic/svg/cloud-upload.svg create mode 100644 Backend/static/open-iconic/svg/cloud.svg create mode 100644 Backend/static/open-iconic/svg/cloudy.svg create mode 100644 Backend/static/open-iconic/svg/code.svg create mode 100644 Backend/static/open-iconic/svg/cog.svg create mode 100644 Backend/static/open-iconic/svg/collapse-down.svg create mode 100644 Backend/static/open-iconic/svg/collapse-left.svg create mode 100644 Backend/static/open-iconic/svg/collapse-right.svg create mode 100644 Backend/static/open-iconic/svg/collapse-up.svg create mode 100644 Backend/static/open-iconic/svg/command.svg create mode 100644 Backend/static/open-iconic/svg/comment-square.svg create mode 100644 Backend/static/open-iconic/svg/compass.svg create mode 100644 Backend/static/open-iconic/svg/contrast.svg create mode 100644 Backend/static/open-iconic/svg/copywriting.svg create mode 100644 Backend/static/open-iconic/svg/credit-card.svg create mode 100644 Backend/static/open-iconic/svg/crop.svg create mode 100644 Backend/static/open-iconic/svg/dashboard.svg create mode 100644 Backend/static/open-iconic/svg/data-transfer-download.svg create mode 100644 Backend/static/open-iconic/svg/data-transfer-upload.svg create mode 100644 Backend/static/open-iconic/svg/delete.svg create mode 100644 Backend/static/open-iconic/svg/dial.svg create mode 100644 Backend/static/open-iconic/svg/document.svg create mode 100644 Backend/static/open-iconic/svg/dollar.svg create mode 100644 Backend/static/open-iconic/svg/double-quote-sans-left.svg create mode 100644 Backend/static/open-iconic/svg/double-quote-sans-right.svg create mode 100644 Backend/static/open-iconic/svg/double-quote-serif-left.svg create mode 100644 Backend/static/open-iconic/svg/double-quote-serif-right.svg create mode 100644 Backend/static/open-iconic/svg/droplet.svg create mode 100644 Backend/static/open-iconic/svg/eject.svg create mode 100644 Backend/static/open-iconic/svg/elevator.svg create mode 100644 Backend/static/open-iconic/svg/ellipses.svg create mode 100644 Backend/static/open-iconic/svg/envelope-closed.svg create mode 100644 Backend/static/open-iconic/svg/envelope-open.svg create mode 100644 Backend/static/open-iconic/svg/euro.svg create mode 100644 Backend/static/open-iconic/svg/excerpt.svg create mode 100644 Backend/static/open-iconic/svg/expand-down.svg create mode 100644 Backend/static/open-iconic/svg/expand-left.svg create mode 100644 Backend/static/open-iconic/svg/expand-right.svg create mode 100644 Backend/static/open-iconic/svg/expand-up.svg create mode 100644 Backend/static/open-iconic/svg/external-link.svg create mode 100644 Backend/static/open-iconic/svg/eye.svg create mode 100644 Backend/static/open-iconic/svg/eyedropper.svg create mode 100644 Backend/static/open-iconic/svg/file.svg create mode 100644 Backend/static/open-iconic/svg/fire.svg create mode 100644 Backend/static/open-iconic/svg/flag.svg create mode 100644 Backend/static/open-iconic/svg/flash.svg create mode 100644 Backend/static/open-iconic/svg/folder.svg create mode 100644 Backend/static/open-iconic/svg/fork.svg create mode 100644 Backend/static/open-iconic/svg/fullscreen-enter.svg create mode 100644 Backend/static/open-iconic/svg/fullscreen-exit.svg create mode 100644 Backend/static/open-iconic/svg/globe.svg create mode 100644 Backend/static/open-iconic/svg/graph.svg create mode 100644 Backend/static/open-iconic/svg/grid-four-up.svg create mode 100644 Backend/static/open-iconic/svg/grid-three-up.svg create mode 100644 Backend/static/open-iconic/svg/grid-two-up.svg create mode 100644 Backend/static/open-iconic/svg/hard-drive.svg create mode 100644 Backend/static/open-iconic/svg/header.svg create mode 100644 Backend/static/open-iconic/svg/headphones.svg create mode 100644 Backend/static/open-iconic/svg/heart.svg create mode 100644 Backend/static/open-iconic/svg/home.svg create mode 100644 Backend/static/open-iconic/svg/image.svg create mode 100644 Backend/static/open-iconic/svg/inbox.svg create mode 100644 Backend/static/open-iconic/svg/infinity.svg create mode 100644 Backend/static/open-iconic/svg/info.svg create mode 100644 Backend/static/open-iconic/svg/italic.svg create mode 100644 Backend/static/open-iconic/svg/justify-center.svg create mode 100644 Backend/static/open-iconic/svg/justify-left.svg create mode 100644 Backend/static/open-iconic/svg/justify-right.svg create mode 100644 Backend/static/open-iconic/svg/key.svg create mode 100644 Backend/static/open-iconic/svg/laptop.svg create mode 100644 Backend/static/open-iconic/svg/layers.svg create mode 100644 Backend/static/open-iconic/svg/lightbulb.svg create mode 100644 Backend/static/open-iconic/svg/link-broken.svg create mode 100644 Backend/static/open-iconic/svg/link-intact.svg create mode 100644 Backend/static/open-iconic/svg/list-rich.svg create mode 100644 Backend/static/open-iconic/svg/list.svg create mode 100644 Backend/static/open-iconic/svg/location.svg create mode 100644 Backend/static/open-iconic/svg/lock-locked.svg create mode 100644 Backend/static/open-iconic/svg/lock-unlocked.svg create mode 100644 Backend/static/open-iconic/svg/loop-circular.svg create mode 100644 Backend/static/open-iconic/svg/loop-square.svg create mode 100644 Backend/static/open-iconic/svg/loop.svg create mode 100644 Backend/static/open-iconic/svg/magnifying-glass.svg create mode 100644 Backend/static/open-iconic/svg/map-marker.svg create mode 100644 Backend/static/open-iconic/svg/map.svg create mode 100644 Backend/static/open-iconic/svg/media-pause.svg create mode 100644 Backend/static/open-iconic/svg/media-play.svg create mode 100644 Backend/static/open-iconic/svg/media-record.svg create mode 100644 Backend/static/open-iconic/svg/media-skip-backward.svg create mode 100644 Backend/static/open-iconic/svg/media-skip-forward.svg create mode 100644 Backend/static/open-iconic/svg/media-step-backward.svg create mode 100644 Backend/static/open-iconic/svg/media-step-forward.svg create mode 100644 Backend/static/open-iconic/svg/media-stop.svg create mode 100644 Backend/static/open-iconic/svg/medical-cross.svg create mode 100644 Backend/static/open-iconic/svg/menu.svg create mode 100644 Backend/static/open-iconic/svg/microphone.svg create mode 100644 Backend/static/open-iconic/svg/minus.svg create mode 100644 Backend/static/open-iconic/svg/monitor.svg create mode 100644 Backend/static/open-iconic/svg/moon.svg create mode 100644 Backend/static/open-iconic/svg/move.svg create mode 100644 Backend/static/open-iconic/svg/musical-note.svg create mode 100644 Backend/static/open-iconic/svg/paperclip.svg create mode 100644 Backend/static/open-iconic/svg/pencil.svg create mode 100644 Backend/static/open-iconic/svg/people.svg create mode 100644 Backend/static/open-iconic/svg/person.svg create mode 100644 Backend/static/open-iconic/svg/phone.svg create mode 100644 Backend/static/open-iconic/svg/pie-chart.svg create mode 100644 Backend/static/open-iconic/svg/pin.svg create mode 100644 Backend/static/open-iconic/svg/play-circle.svg create mode 100644 Backend/static/open-iconic/svg/plus.svg create mode 100644 Backend/static/open-iconic/svg/power-standby.svg create mode 100644 Backend/static/open-iconic/svg/print.svg create mode 100644 Backend/static/open-iconic/svg/project.svg create mode 100644 Backend/static/open-iconic/svg/pulse.svg create mode 100644 Backend/static/open-iconic/svg/puzzle-piece.svg create mode 100644 Backend/static/open-iconic/svg/question-mark.svg create mode 100644 Backend/static/open-iconic/svg/rain.svg create mode 100644 Backend/static/open-iconic/svg/random.svg create mode 100644 Backend/static/open-iconic/svg/reload.svg create mode 100644 Backend/static/open-iconic/svg/resize-both.svg create mode 100644 Backend/static/open-iconic/svg/resize-height.svg create mode 100644 Backend/static/open-iconic/svg/resize-width.svg create mode 100644 Backend/static/open-iconic/svg/rss-alt.svg create mode 100644 Backend/static/open-iconic/svg/rss.svg create mode 100644 Backend/static/open-iconic/svg/script.svg create mode 100644 Backend/static/open-iconic/svg/share-boxed.svg create mode 100644 Backend/static/open-iconic/svg/share.svg create mode 100644 Backend/static/open-iconic/svg/shield.svg create mode 100644 Backend/static/open-iconic/svg/signal.svg create mode 100644 Backend/static/open-iconic/svg/signpost.svg create mode 100644 Backend/static/open-iconic/svg/sort-ascending.svg create mode 100644 Backend/static/open-iconic/svg/sort-descending.svg create mode 100644 Backend/static/open-iconic/svg/spreadsheet.svg create mode 100644 Backend/static/open-iconic/svg/star.svg create mode 100644 Backend/static/open-iconic/svg/sun.svg create mode 100644 Backend/static/open-iconic/svg/tablet.svg create mode 100644 Backend/static/open-iconic/svg/tag.svg create mode 100644 Backend/static/open-iconic/svg/tags.svg create mode 100644 Backend/static/open-iconic/svg/target.svg create mode 100644 Backend/static/open-iconic/svg/task.svg create mode 100644 Backend/static/open-iconic/svg/terminal.svg create mode 100644 Backend/static/open-iconic/svg/text.svg create mode 100644 Backend/static/open-iconic/svg/thumb-down.svg create mode 100644 Backend/static/open-iconic/svg/thumb-up.svg create mode 100644 Backend/static/open-iconic/svg/timer.svg create mode 100644 Backend/static/open-iconic/svg/transfer.svg create mode 100644 Backend/static/open-iconic/svg/trash.svg create mode 100644 Backend/static/open-iconic/svg/underline.svg create mode 100644 Backend/static/open-iconic/svg/vertical-align-bottom.svg create mode 100644 Backend/static/open-iconic/svg/vertical-align-center.svg create mode 100644 Backend/static/open-iconic/svg/vertical-align-top.svg create mode 100644 Backend/static/open-iconic/svg/video.svg create mode 100644 Backend/static/open-iconic/svg/volume-high.svg create mode 100644 Backend/static/open-iconic/svg/volume-low.svg create mode 100644 Backend/static/open-iconic/svg/volume-off.svg create mode 100644 Backend/static/open-iconic/svg/warning.svg create mode 100644 Backend/static/open-iconic/svg/wifi.svg create mode 100644 Backend/static/open-iconic/svg/wrench.svg create mode 100644 Backend/static/open-iconic/svg/x.svg create mode 100644 Backend/static/open-iconic/svg/yen.svg create mode 100644 Backend/static/open-iconic/svg/zoom-in.svg create mode 100644 Backend/static/open-iconic/svg/zoom-out.svg create mode 100644 Backend/templates/base.html create mode 100644 Backend/templates/index.html create mode 100644 Backend/templates/pruefplan/clearTable.html create mode 100644 Backend/templates/pruefplan/exam.html create mode 100644 Backend/templates/pruefplan/exceptionHandling.html create mode 100644 Backend/templates/pruefplan/lecturer.html create mode 100644 Backend/templates/pruefplan/lecturerExam.html create mode 100644 Backend/templates/pruefplan/parse.html create mode 100644 Backend/templates/pruefplan/student.html create mode 100644 Backend/templates/pruefplan/studentExam.html create mode 100644 Backend/templates/pruefplan/subject.html create mode 100644 Backend/templates/pruefplan/tableBase.html create mode 100644 Backend/templates/pruefplan/upload.html create mode 100644 Backend/templates/registration/logged_out.html create mode 100644 Backend/templates/registration/login.html create mode 100644 Frontend/.gitignore create mode 100644 Frontend/README.md create mode 100644 Frontend/eslint.config.js create mode 100644 Frontend/index.html create mode 100644 Frontend/jsconfig.json create mode 100644 Frontend/package.json create mode 100644 Frontend/public/vite.svg create mode 100644 Frontend/src/App.css create mode 100644 Frontend/src/App.jsx create mode 100644 Frontend/src/assets/settings_icon.png create mode 100644 Frontend/src/assets/th_logo_big.jpg create mode 100644 Frontend/src/assets/th_logo_small.jpg create mode 100644 Frontend/src/components/EventTable.jsx create mode 100644 Frontend/src/components/LogbookCard.jsx create mode 100644 Frontend/src/components/LoginForm.jsx create mode 100644 Frontend/src/components/MartNrForm.jsx create mode 100644 Frontend/src/components/Navbar.jsx create mode 100644 Frontend/src/components/PruefplanTable.jsx create mode 100644 Frontend/src/components/SettingsCard.jsx create mode 100644 Frontend/src/index.css create mode 100644 Frontend/src/layouts/MainWrapper.jsx create mode 100644 Frontend/src/layouts/PrivateRoute.jsx create mode 100644 Frontend/src/main.jsx create mode 100644 Frontend/src/store/auth.js create mode 100644 Frontend/src/utils/auth.js create mode 100644 Frontend/src/utils/axios.js create mode 100644 Frontend/src/utils/constants.js create mode 100644 Frontend/src/utils/useAxios.js create mode 100644 Frontend/src/views/Homepage.jsx create mode 100644 Frontend/src/views/Mainpage.jsx create mode 100644 Frontend/vite.config.js create mode 100644 Frontend/yarn.lock diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..1703b09 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,54 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Run and Debug Django Backend", + "type": "debugpy", + "request": "launch", + "program": "${workspaceFolder}/backend/manage.py", + "args": [ + "runserver", + "127.0.0.1:8000" + ], + "django": true, + "autoStartBrowser": true, + "cwd": "${workspaceFolder}/backend", + "console": "integratedTerminal" + }, + + { + "name": "Debug React Frontend", + "type": "firefox", + "request": "launch", + "reAttach": true, + "url": "http://localhost:5173", + "webRoot": "${workspaceFolder}/Frontend", + // "runtimeExecutable": "yarn", + // "args": ["dev"], + // "cwd": "${workspaceFolder}/frontend", + // "console": "integratedTerminal" + }, + + { + "name": "Run React Frontend", + "type": "node", + "request": "launch", + "runtimeExecutable": "yarn", + "args": ["dev"], + "cwd": "${workspaceFolder}/frontend", + "console": "integratedTerminal" + } + ], + "compounds": [ + { + "name": "Start Django and React", + "configurations": [ + "Run and Debug Django Backend", + "Run React Frontend" + ] + } + ] +} \ No newline at end of file diff --git a/Backend/.gitignore b/Backend/.gitignore new file mode 100644 index 0000000..06012b0 --- /dev/null +++ b/Backend/.gitignore @@ -0,0 +1,168 @@ +# Created by .ignore support plugin (hsz.mobi) +### Python template +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +.DS_Store + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# IPython Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# dotenv +.env + +# virtualenv +venv/ +ENV/ + +# Spyder project settings +.spyderproject + +# Rope project settings +.ropeproject +### VirtualEnv template +# Virtualenv +# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ +.Python +[Bb]in +[Ii]nclude +[Ll]ib +[Ll]ib64 +[Ll]ocal +[Ss]cripts +pyvenv.cfg +.venv +pip-selfcheck.json +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/workspace.xml +.idea/tasks.xml +.idea/dictionaries +.idea/vcs.xml +.idea/jsLibraryMappings.xml + +# Sensitive or high-churn files: +.idea/dataSources.ids +.idea/dataSources.xml +.idea/dataSources.local.xml +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml + +# Gradle: +.idea/gradle.xml +.idea/libraries + +# Mongo Explorer plugin: +.idea/mongoSettings.xml + +.idea/ + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# DB +db.sqlite3 + +# StudData +studis/xlsmodel/data/ + +# Logdateien +log/ + +# Medien +media/ + +# VSCode +.vscode/launch.json diff --git a/Backend/.vscode/settings.json b/Backend/.vscode/settings.json new file mode 100644 index 0000000..7cbe55f --- /dev/null +++ b/Backend/.vscode/settings.json @@ -0,0 +1,20 @@ +{ + "workbench.colorCustomizations": { + // Top-Bar + "titleBar.border": "#004F59", // Teal border + "titleBar.activeForeground": "#E0FFFF", // Light cyan text (sky blue feel) + "titleBar.activeBackground": "#007A91", // Vibrant teal background + + // Left-Bar + "activityBar.border": "#004F59", // Teal border + "activityBar.activeForeground": "#E0FFFF", // Light cyan active icon + "activityBar.activeBackground": "#00A2C3", // Sky blue for active background + "activityBar.background": "#005F6B", // Deeper teal for overall background + + // Bottom-Bar + "statusBar.background": "#004F59", // Teal background + "statusBar.foreground": "#E0FFFF", // Light cyan text + }, + "debug.allowBreakpointsEverywhere": false +} + diff --git a/Backend/README.md b/Backend/README.md new file mode 100644 index 0000000..abe99a9 --- /dev/null +++ b/Backend/README.md @@ -0,0 +1,64 @@ +# Prüfplanviewer + +## Installation + +Nach dem laden des Repos und der Installation der Module +aus requirements.txt sollten noch folgende + manage.py tasks ausgeführt werden: + +- migrate (Anlegen der Datenbanktabellen) +- Befehl aus READ.ME im Verzeichnis fixtures . + Dadurch werden Berechtigungsgruppen angelegt. + Für den Prüfungsplan wird aktuell nur die + Gruppe PP_ADMIN benötigt. +- createsuperuser (Anlage eines ersten Admin-Users) + +Danach kann die Anwendung gestartet werden. Anmeldung mit dem +gerade generierten Superuser. Im Bereich "Administration" können +weitere User angelegt werden und ggf. der Gruppe PP_ADMIN +zugeordnet werden. Benutzer in dieser Gruppe können den +Prüfplan nicht nur sehen, sondern auch neue Daten laden. + +## Daten + +Die Daten werden von Prof. Mahr und Prof. Hopf generiert. +Bei Bedarf müssen wird dort nachfragen. Alte Daten gibt es +auch bei Prof. Hofmann. + +## Neue Anforderungen + +Nach dem Testbetrieb wurden einige neue Amforderungen +identifiziert: + +- Anzeige von "Präsenz"-Pflicht in der + Dozentensicht (ob und wie dies in den Daten + enthalten ist, muss noch geklärt werden) +- Anzeige von "Pendler"-Eigenschaft in der + Dozentensicht (ob und wie dies in den Daten + enthalten ist, muss noch geklärt werden) +- Anzeige von ungeplanten Prüfungen + (also z.B. alternative Prüfungsformen während COVID) + (ob und wie dies in den Daten + enthalten ist, muss noch geklärt werden) +- Anzeige des Versionsstands der importierten Daten + (ob und wie dies in den Daten + enthalten ist, muss noch geklärt werden) +- Import der Daten auch von Kommandozeile + (nicht nur über Web-Upload) +- iCal-Export von Prüfungen + zum Import in den Kalender +- bei der Detailansicht einer Prüfung sollen + alle Prüfer, Räume und die jeweilig Anzahl + der Studierenden angezeigt werden. + (ob und wie dies in den Daten + enthalten ist, muss noch geklärt werden) +- Bessere Anzeige auf mobilen Geräten (responsive) + +## ToDOs + +- Klären der Datenschnittstelle +- Überarbeiten des Datenimports (neue Daten, Kommandozeile) +- Erweitern der Anzeige + * entweder in der bestehenden App + * oder in einer Single-Page-App + * oder beides \ No newline at end of file diff --git a/Backend/RestTest.http b/Backend/RestTest.http new file mode 100644 index 0000000..e69de29 diff --git a/Backend/api/__init__.py b/Backend/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/api/serializer.py b/Backend/api/serializer.py new file mode 100644 index 0000000..6fd9e8f --- /dev/null +++ b/Backend/api/serializer.py @@ -0,0 +1,576 @@ +import datetime +import inspect +import json +from rest_framework import serializers +from rest_framework_simplejwt.serializers import TokenObtainPairSerializer +from pruefplan_parser.models import JsonParser +from pruefplan_viewer.models import * +# from django.utils.encoding import smart_str + +# Class to generate a UserToken with custom fields +class MyTokenObtainPairSerializer(TokenObtainPairSerializer): + @classmethod + def get_token(cls, user): + token = super().get_token(user) # Default Token + + # Add custom informations to the Token + token["username"] = user.username + token["password"] = user.password + + return token + + +class API_ExamDataSet_ForStudentSerializer(serializers.ModelSerializer): + class Meta: + model = API_ExamDataSet_ForStudent + fields = '__all__' + + + +class PruefPlan_JSON_Serializer(serializers.Serializer): + def create(self, validated_data): + return super().create(validated_data) + + def validate(self, data): + if "array" not in data or not isinstance(data["array"], list): + raise serializers.ValidationError( + "Das 'array'-Feld ist erforderlich und muss als Python-Liste verfügbar sein." + ) + + return {"dataArray": data["array"]} # Rückgabe des validierten Datenarrays + + +class Lecturer_JSON_Serializer(serializers.Serializer): + # Definiert die Felder, die der Serializer erwartet + revision = serializers.CharField(required=True) + array = serializers.ListField() + + def create(self, validated_data): + # Definieren der erwarteten Schlüssel im JSON-Daten + idKey = "kennung" + firstNameKey = "vorname" + lastNameKey = "nachname" + titleKey = "titel" + + + created_lecturers = [] # Liste zum Speichern der erstellten Lecturer-Objekte + try: + # Schleife über die Daten, um Lecturer-Objekte zu erstellen + for iteration_number, d in enumerate(validated_data["dataArray"]): + # Lecturer-Objekt erstellen und speichern + entry = Lecturer( + identification=d[idKey], + firstName=d[firstNameKey], + lastName=d[lastNameKey], + title=d[titleKey], + + ) + entry.save() + created_lecturers.append(entry) # Objekt der Liste hinzufügen + except KeyError as e: + # Fehlerbehandlung bei fehlenden Schlüsseln + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + ) + JsonParser.exceptionMessages.append(message) # Fehlermeldung speichern + except Exception as e: + # Allgemeine Fehlerbehandlung + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) # Fehlermeldung speichern + + return { + "Serializer": "Lecturer", + "status": "success", + "created_count": len(created_lecturers), + } # Rückgabe des Erfolgsstatus + + def validate(self, data): + # Validierung, um sicherzustellen, dass 'revision' und 'array' Felder vorhanden sind + if "revision" not in data.keys(): + raise serializers.ValidationError("Das 'revision'-Feld ist erforderlich.") + + if "array" not in data or not isinstance(data["array"], list): + raise serializers.ValidationError( + "Das 'array'-Feld ist erforderlich und muss als Python-Liste verfügbar sein." + ) + + return {"dataArray": data["array"]} # Rückgabe des validierten Datenarrays + + +class Attendance_JSON_Serializer(serializers.Serializer): + # Definiert die Felder, die der Serializer erwartet + revision = serializers.CharField(required=True) + array = serializers.ListField() + + + def create(self, validated_data): + # Definieren der erwarteten Schlüssel im JSON-Daten + idKey = "dozentenkennung" + yearKey = "jahr" + monthKey = "monat" + dayKey = "tag" + hourKey = "stunde" + minuteKey = "minute" + weekdayKey = "wochentag" + dateKey = "termin" + + created_attendences = ( + [] + ) # Liste zum Speichern der erstellten Attendance-Objekte + try: + # Schleife über die Daten, um Attendance-Objekte zu erstellen + for iteration_number, d in enumerate(validated_data["dataArray"]): + # Überprüfung, ob das 'termin'-Feld vorhanden ist + keyAvailable = "termin" in d + if not keyAvailable: + # Warnung ausgeben, wenn kein Termin zugewiesen wurde + template = "Warning. Following Exam was not assigned any examination date ['termin']: [{1}]" + message = template.format(d[idKey]) + JsonParser.warningMessages.append(message) + continue + + # Datum und Uhrzeit aus den Daten extrahieren + date = datetime.date( + d[dateKey][yearKey], d[dateKey][monthKey], d[dateKey][dayKey] + ) + time = datetime.time(d[dateKey][hourKey], d[dateKey][minuteKey]) + + # Attendance-Objekt erstellen und speichern + entry = Attendance( + identification=d[idKey], + time=time, + date=date, + dateTimeText=d[dateKey]["datumText"], + weekday=d[dateKey]["wochentag"], + ) + entry.save() + created_attendences.append(entry) # Objekt der Liste hinzufügen + + try: + # Dozent aus der Datenbank abrufen und mit der Anwesenheit verknüpfen + lecturer = Lecturer.objects.get(identification=d[idKey]) + lecturer.attendance_set.add( + entry + ) # Attendance dem Lecturer zuweisen + except Exception as e: + # Fehlerbehandlung, wenn der Dozent nicht gefunden wird + template = "Exception of type [{0}]. Arguments: {1!r}. Message: [{2}] entry might be missing" + message = template.format(type(e).__name__, e.args, idKey) + JsonParser.exceptionMessages.append( + message + ) # Fehlermeldung speichern + + except KeyError as e: + # Fehlerbehandlung bei fehlenden Schlüsseln + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + ) + JsonParser.exceptionMessages.append(message) # Fehlermeldung speichern + except Exception as e: + # Allgemeine Fehlerbehandlung + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) # Fehlermeldung speichern + + return { + "Serializer": "Attendance", + "status": "success", + "created_count": len(created_attendences), + } # Rückgabe des Erfolgsstatus + + def validate(self, data): + # Validierung, um sicherzustellen, dass 'revision' und 'array' Felder vorhanden sind + if "revision" not in data.keys(): + raise serializers.ValidationError("Das 'revision'-Feld ist erforderlich.") + + if "array" not in data or not isinstance(data["array"], list): + raise serializers.ValidationError( + "Das 'array'-Feld ist erforderlich und muss als Python-Liste verfügbar sein." + ) + + return {"dataArray": data["array"]} # Rückgabe des validierten Datenarrays + + +class Subject_JSON_Serializer(serializers.Serializer): + # Definiert die Felder, die der Serializer erwartet + revision = serializers.CharField(required=True) + array = serializers.ListField() + + + def create(self, validated_data): + # Definieren der erwarteten Schlüssel im JSON-Daten + idKey = "kennung" + initialsKey = "kurztext" + nameKey = "langtext" + ohmIdKey = "fachkennungOhm" + + created_subjects = [] # Liste zum Speichern der erstellten Subject-Objekte + try: + # Schleife über die Daten, um Subject-Objekte zu erstellen + for iteration_number, d in enumerate(validated_data["dataArray"]): + # Subject-Objekt erstellen und speichern + entry = Subject( + identification=d[idKey], + initials=d[ohmIdKey][initialsKey], + name=d[ohmIdKey][nameKey], + ) + entry.save() + created_subjects.append(entry) # Objekt der Liste hinzufügen + + except KeyError as e: + # Fehlerbehandlung bei fehlenden Schlüsseln + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + ) + JsonParser.exceptionMessages.append(message) # Fehlermeldung speichern + except Exception as e: + # Allgemeine Fehlerbehandlung + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) # Fehlermeldung speichern + + return { + "Serializer": "Subject", + "status": "success", + "created_count": len(created_subjects), + } # Rückgabe des Erfolgsstatus + + def validate(self, data): + # Validierung, um sicherzustellen, dass 'revision' und 'array' Felder vorhanden sind + if "revision" not in data.keys(): + raise serializers.ValidationError("Das 'revision'-Feld ist erforderlich.") + + if "array" not in data or not isinstance(data["array"], list): + raise serializers.ValidationError( + "Das 'array'-Feld ist erforderlich und muss als Python-Liste verfügbar sein." + ) + + return {"dataArray": data["array"]} # Rückgabe des validierten Datenarrays + + +class Exam_JSON_Serializer(serializers.Serializer): + # Define the fields expected by the serializer + revision = serializers.CharField(required=True) + array = serializers.ListField() + + def create(self, validated_data): + # Define the expected keys in the JSON data + idKey = "kennung" + yearKey = "jahr" + monthKey = "monat" + dayKey = "tag" + hourKey = "stunde" + minuteKey = "minute" + weekdayKey = "wochentag" + dateKey = "termin" + partialExamsKey = "teilpruefungen" + partialExamIdKey = "kennung" + numRegStudKey = "anzahlAnmeldungen" + subjectIdsKey = "fachkennungen" + examExecutionsKey = "pruefungsdurchfuehrungen" + lecturerIdKey = "dozentenkennung" + supervisorTypeKey = "typ" + locationKey = "raum" + + created_exams = [] # List to store created Exam objects + created_partialexams = [] # List to store created Exam objects + ignored_Vorgezogen_exams = 0 # List to ignored Exam objects + ignored_KeinTermin_exams = 0 # List to ignored Exam objects + try: + # Iterate over the data to create Exam objects + for iteration_number, d in enumerate(validated_data["dataArray"]): + + # Certain exam entries are ignored + if d["pruefungsart"] == "LN_VORGEZOGEN": # These entries can be ignored + ignored_Vorgezogen_exams += 1 + continue + + keyAvailable = "termin" in d + if not keyAvailable: + # Warning if no examination date is assigned + template = "Warning. Following Exam was not assigned any examination date ['termin']: [{0}]" + message = template.format(d[idKey]) + JsonParser.warningMessages.append(message) + ignored_KeinTermin_exams += 1 + continue + + # Extract date and time for the exam + date = datetime.date( + d[dateKey][yearKey], d[dateKey][monthKey], d[dateKey][dayKey] + ) + time = datetime.time(d[dateKey][hourKey], d[dateKey][minuteKey]) + + # Create and save a new Exam entry + examEntry = Exam( + identification=d[idKey], + date=date, + time=time, + weekday=d[dateKey][weekdayKey], + ) + examEntry.save() + created_exams.append(examEntry) + + # Create PartialExam entries and link them with the main exam + for teilpruef in d[partialExamsKey]: + partialExamId = teilpruef[partialExamIdKey] + regStudCount = teilpruef[numRegStudKey] + + # Create and save a new PartialExam entry + partialExam = PartialExam( + identification=partialExamId, regStudCount=regStudCount + ) + partialExam.save() + created_partialexams.append(partialExam) + + # Link Exam and PartialExam (One-to-Many relationship) + examEntry.partialexam_set.add(partialExam) + + # Link subjects to the PartialExams + for subId in teilpruef[subjectIdsKey]: + try: + # Check if the subject exists and link it + subject = Subject.objects.get(identification=subId) + partialExam.subjectIds.add( + subject + ) # Many-to-Many relationship + except Exception as e: + # Log an error if the subject is not found + template = "Exception of type [{0}]. Arguments: {1!r}. Message: [{2}] entry might be missing" + message = template.format(type(e).__name__, e.args, subId) + JsonParser.exceptionMessages.append(message) + + # Link exam executions to PartialExams + for pruefdurch in teilpruef[examExecutionsKey]: + lecId = pruefdurch[lecturerIdKey] + supervisorType = pruefdurch[supervisorTypeKey] + location = pruefdurch[locationKey] + + # Create and save a new ExamExecution entry + examExecution = ExamExecution( + supervisorType=supervisorType, location=location + ) + examExecution.save() + + # Check if the lecturer exists and link the exam execution + try: + lecturer = Lecturer.objects.get(pk=lecId) + lecturer.examexecution_set.add( + examExecution + ) # One-to-Many relationship + except Exception as e: + # Log an error if the lecturer is not found + template = "Exception of type [{0}]. Arguments: {1!r}. Message: [{2}] entry might be missing" + message = template.format(type(e).__name__, e.args, lecId) + JsonParser.exceptionMessages.append(message) + + # Link subjects to the ExamExecution + for subId in pruefdurch[subjectIdsKey]: + try: + # Check if the subject exists and link it + subject = Subject.objects.get(identification=subId) + examExecution.subjectIds.add( + subject + ) # Many-to-Many relationship + except Exception as e: + # Log an error if the subject is not found + template = "Exception of type [{0}]. Arguments: {1!r}. Message: [{2}] entry might be missing" + message = template.format( + type(e).__name__, e.args, subId + ) + JsonParser.exceptionMessages.append(message) + + # Link PartialExam and ExamExecution (One-to-Many relationship) + partialExam.examexecution_set.add(examExecution) + + except KeyError as e: + # Error handling for missing keys in the dict + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + ) + JsonParser.exceptionMessages.append(message) + except Exception as e: + # General error handling + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) + + return { + "Serializer": "Exam", + "status": "success", + "created_Exams": len(created_exams), + "created_PartialExams_count": len(created_partialexams), + "ignored_Exams -> Vorgezogen": ignored_Vorgezogen_exams, + "ignored_Exams -> Kein Termin": ignored_KeinTermin_exams, + } + + def validate(self, data): + # Validation for the 'revision' field + if "revision" not in data.keys(): + raise serializers.ValidationError("The 'revision' field is required.") + + # Validation for the 'array' field + if "array" not in data or not isinstance(data["array"], list): + raise serializers.ValidationError( + "The 'array' field is required and must be a Python list." + ) + + return {"dataArray": data["array"]} + + +class RoomAllocation_JSON_Serializer(serializers.Serializer): + # Define the fields expected by the serializer + revision = serializers.CharField(required=True) + array = serializers.ListField() + + def create(self, validated_data): + # Define the expected keys in the JSON data + idKey = "kennungPruefung" + yearKey = "jahr" + monthKey = "monat" + dayKey = "tag" + hourKey = "stunde" + minuteKey = "minute" + weekdayKey = "wochentag" + locationKey = "raum" + dateKey = "termin" + matrikelKey = "matrikel" + + created_roomAllocations = [] # List to store created StudentExam objects + try: + # Iterate over the data to create StudentExam objects + for iteration_number, d in enumerate(validated_data["dataArray"]): + # Extract date and time + date = datetime.date( + d[dateKey][yearKey], d[dateKey][monthKey], d[dateKey][dayKey] + ) + time = datetime.time(d[dateKey][hourKey], d[dateKey][minuteKey]) + + # Find the corresponding Exam entry + exam = Exam.objects.filter( + identification=d[idKey], date=date, time=time + ).first() + + # Iterate through partial exams and their executions + partialExams = exam.partialexam_set.all() + for partialExam in partialExams: + examExecutions = partialExam.examexecution_set.all() + for examExecution in examExecutions: + # Check if the location matches and create StudentExam entry + if examExecution.location == d[locationKey]: + studentExamEntry = StudentExam( + examIdentification=d[idKey], + date=date, + time=time, + weekday=d[dateKey][weekdayKey], + location=d[locationKey], + examExecution=examExecution, + ) + studentExamEntry.save() + created_roomAllocations.append(studentExamEntry) + + # Create or update Student entries + for matrikel in d[matrikelKey]: + studentEntry = Student.objects.filter(matrikel=matrikel).exists() + if not studentEntry: + # Create a new Student entry if it doesn't exist + entry = Student(matrikel=matrikel) + entry.save() + else: + entry = Student.objects.all().filter(matrikel=matrikel).first() + entry.exams.add(studentExamEntry) + except KeyError as e: + # Error handling for missing keys in the dict + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + ) + JsonParser.exceptionMessages.append(message) + except Exception as e: + # General error handling + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) + + return { + "Serializer": "RoomAllocation", + "status": "success", + "created_RoomAllocations": len(created_roomAllocations), + } + + def validate(self, data): + # Validation for the 'revision' field + if "revision" not in data.keys(): + raise serializers.ValidationError("The 'revision' field is required.") + + # Validation for the 'array' field + if "array" not in data or not isinstance(data["array"], list): + raise serializers.ValidationError( + "The 'array' field is required and must be a Python list." + ) + + return {"dataArray": data["array"]} diff --git a/Backend/api/urls.py b/Backend/api/urls.py new file mode 100644 index 0000000..58b7ce8 --- /dev/null +++ b/Backend/api/urls.py @@ -0,0 +1,24 @@ +from django.urls import path +from . import views +from rest_framework_simplejwt.views import TokenRefreshView +from rest_framework.authtoken.views import obtain_auth_token + +urlpatterns = [ + path( + "user/token", + views.MyTokenObtainPairView.as_view(), + ), # URL to classview fpr token interactions "as_view()" + path( + "user/token/refresh/", TokenRefreshView.as_view() + ), # Lib view from rest_framework to refresh the given token + path("user/logoutUser", views.logoutUser), + path("user/checkUser", views.checkLoginStatus), + path("fetchExamData", views.getAPI_ExamDataSet_ForStudent), + path("pruefplanUpload/", views.PruefPlanUploader.as_view()), + path("api-token-auth/", obtain_auth_token), + path("addlecturer", views.addLecturer), + path("addAttendance", views.addAttendance), + path("addSubject", views.addSubject), + path("addExam", views.addExam), + path("addRoomAllocation", views.addRoomAllocation), +] diff --git a/Backend/api/views.py b/Backend/api/views.py new file mode 100644 index 0000000..a1397a7 --- /dev/null +++ b/Backend/api/views.py @@ -0,0 +1,250 @@ +from datetime import date +import time +from rest_framework.response import Response +from rest_framework.decorators import api_view +from rest_framework.views import APIView +from rest_framework.permissions import IsAuthenticated +from pruefplan_viewer.models import * +from .serializer import * + +from django.contrib.auth import authenticate, login, logout +from django.shortcuts import render +from api import serializer as api_serializer +from rest_framework_simplejwt.views import TokenObtainPairView +from django.contrib.auth.models import User +from django.contrib.auth.decorators import login_required +from django.utils.encoding import force_str + + +# Create a REST API view class to interact with the custom token serializer class +class MyTokenObtainPairView(TokenObtainPairView): + # Setup the serializer -> using custom serializer + serializer_class = api_serializer.MyTokenObtainPairSerializer + + # Func to handle a post request on this API endpoint + def post(self, request, *args, **kwargs): + username = request.data.get("username") + password = request.data.get("password") + + # User authentication using LADP agains the TH-Server -> Setup LADP in settings.py + user = authenticate(username=username, password=password) + if not user: + return Response({"error": "Invalid credentials"}, status=400) + + # Login the user for Backend authentication + login(request=request, user=user) + + # Delegate the post request to the TokenObptainPairView class + # Executing the standart jwt creation workflow -> using the custom serializer + return super().post(request, *args, **kwargs) + + + +@api_view(["POST"]) +def logoutUser(request): + logout(request) + return Response() + + +# Extract the location key and map it to a URL +def map_location(location_str): + URL_MAP = { + "B": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/b-standort-bahnhofstrasse/", + "F": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/f-standort-auf-aeg/", + "H": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/h-standort-hohfederstrasse/", + "K": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/k-standort-kesslerplatz/", + "NM": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/nm-standort-neumarkt-in-der-oberpfalz/", + "SC": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/sc-standort-innere-cramer-klett-strasse/", + "SG": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/sg-standort-karl-grillenberger-strasse/", + "SK": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/sk-standort-prof-ernst-nathan-strasse/", + "SP": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/sp-standort-kesslerstrasse/", + "SR": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/sr-standort-rednitzhembach/", + "W": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/w-standort-wassertorstrasse/", + "OL": "Online", + "MC": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/pruefungsstandort-mensa-insel-schuett/", + "Default": "https://www.th-nuernberg.de/wie-erreichen-sie-uns/anfahrt/", + } + if not location_str: + return URL_MAP["Default"] # Fallback URL if location is empty or None + + location_key = location_str.split(".")[0] # Get the first part before '.' + + # Find the matching key + for key in URL_MAP.keys(): + if location_key.startswith(key): + return URL_MAP[key] + + return URL_MAP["Default"] # If no match is found, return the default URL + + +def get_Subject(exam): + partialExam = PartialExam.objects.filter(identification=exam).first() + subjects = partialExam.subjectIds + result = [subject.name for subject in subjects] + pass + + +class PruefPlanUploader(APIView): + permission_classes = (IsAuthenticated,) + + def post(self, request): + timeStart = time.perf_counter() + JsonParser().clearTable() + dataSets = [dataSet for dataSet in request.data] + + serializers = [ + Lecturer_JSON_Serializer(data=dataSets[0]), + Attendance_JSON_Serializer(data=dataSets[1]), + Subject_JSON_Serializer(data=dataSets[2]), + Exam_JSON_Serializer(data=dataSets[3]), + RoomAllocation_JSON_Serializer(data=dataSets[4]), + ] + + respondList = [ + serializer.save() for serializer in serializers if serializer.is_valid() + ] + + partial_delta = generate_ExamDataSet_ForStudent() + timeEnd = time.perf_counter() + + total_delta = timeEnd - timeStart + respondList.append({"Uploadtime_in_Sekonds": {round(total_delta, ndigits=2)}}) + respondList.append({"ExamDataSettime_in_Sekonds": {round(partial_delta, ndigits=2)}}) + + return Response(respondList) + + +@api_view(["GET"]) +def getAPI_ExamDataSet_ForStudent(request): + exam_data = API_ExamDataSet_ForStudent.objects.all() + + # Serialize the data using the ModelSerializer + serializer = API_ExamDataSet_ForStudentSerializer(exam_data, many=True) + + return Response(serializer.data) # This will return the data as JSON + + +@api_view(["POST"]) +def pruefplanUpload(request): + + timeStart = time.perf_counter() + dataSets = [dataSet for dataSet in request.data] + + serializers = [ + Lecturer_JSON_Serializer(data=dataSets[0]), + Attendance_JSON_Serializer(data=dataSets[1]), + Subject_JSON_Serializer(data=dataSets[2]), + Exam_JSON_Serializer(data=dataSets[3]), + RoomAllocation_JSON_Serializer(data=dataSets[4]), + ] + respondList = [ + serializer.save() for serializer in serializers if serializer.is_valid() + ] + + generate_ExamDataSet_ForStudent() + timeEnd = time.perf_counter() + + delta = timeEnd - timeStart + print(f"Time for Upload: {round(delta)}s") + respondList.append(delta) + + return Response(respondList) + + +def generate_ExamDataSet_ForStudent(): + timeStart = time.perf_counter() + students = Student.objects.all() + + for student in students: + for studentExam in student.exams.all(): + + examDataSet_ForStudent = API_ExamDataSet_ForStudent( + date=studentExam.date, + time=studentExam.time, + weekday=studentExam.weekday, + room=studentExam.location, + location=map_location(studentExam.location), + subjectIdent=list( + { + subject.name + for subject in studentExam.examExecution.partialExam.subjectIds.all() + } + )[0], + examIdent=studentExam.examIdentification, + examStudCount=studentExam.examExecution.partialExam.regStudCount, + supervisor=f"{studentExam.examExecution.lecturer.firstName} {studentExam.examExecution.lecturer.lastName}", + studMartNr=student.matrikel, + ) + examDataSet_ForStudent.save() + + timeEnd = time.perf_counter() + delta = timeEnd - timeStart + return delta + + +@api_view(["POST"]) +def checkLoginStatus(request): + username = request.data["username"] + if User.objects.filter(username=username).exists(): + usr = User.objects.get(username=username) + if usr.is_authenticated: + return Response(data="IsLoggedin") + else: + return Response(data="IsNotLoggedin") + else: + return Response(data="No user exist with this {} username.".format(username)) + + +@api_view(["POST"]) +def addLecturer(request): + serializer = Lecturer_JSON_Serializer(data=request.data) + if serializer.is_valid(): + Lecturer_JASON_Serializer_Respond = ( + serializer.save() + ) # Hier wird der Rückgabewert von create() erfasst + # Erstelle eine Response basierend auf den erstellten Lecturer-Objekten + return Response(Lecturer_JASON_Serializer_Respond) + + +@api_view(["POST"]) +def addAttendance(request): + serializer = Attendance_JSON_Serializer(data=request.data) + if serializer.is_valid(): + Attendance_JSON_Serializer_Respond = ( + serializer.save() + ) # Hier wird der Rückgabewert von create() erfasst + # Erstelle eine Response basierend auf den erstellten Lecturer-Objekten + return Response(Attendance_JSON_Serializer_Respond) + + +@api_view(["POST"]) +def addSubject(request): + serializer = Subject_JSON_Serializer(data=request.data) + if serializer.is_valid(): + Subject_JASON_Serializer_Respond = ( + serializer.save() + ) # Hier wird der Rückgabewert von create() erfasst + # Erstelle eine Response basierend auf den erstellten Lecturer-Objekten + return Response(Subject_JASON_Serializer_Respond) + + +@api_view(["POST"]) +def addExam(request): + serializer = Exam_JSON_Serializer(data=request.data) + if serializer.is_valid(): + Exam_JASON_Serializer_Respond = ( + serializer.save() + ) # Hier wird der Rückgabewert von create() erfasst + # Erstelle eine Response basierend auf den erstellten Lecturer-Objekten + return Response(Exam_JASON_Serializer_Respond) + + +@api_view(["POST"]) +def addRoomAllocation(request): + serializer = RoomAllocation_JSON_Serializer(data=request.data) + if serializer.is_valid(): + RoomAllocation_JASON_Serializer_Respond = ( + serializer.save() + ) # Hier wird der Rückgabewert von create() erfasst + # Erstelle eine Response basierend auf den erstellten Lecturer-Objekten + return Response(RoomAllocation_JASON_Serializer_Respond) diff --git a/Backend/authstuff/__init__.py b/Backend/authstuff/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/authstuff/admin.py b/Backend/authstuff/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/Backend/authstuff/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Backend/authstuff/apps.py b/Backend/authstuff/apps.py new file mode 100644 index 0000000..4f1c849 --- /dev/null +++ b/Backend/authstuff/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AuthStuffConfig(AppConfig): + name = 'authstuff' diff --git a/Backend/authstuff/ldap_access.py b/Backend/authstuff/ldap_access.py new file mode 100644 index 0000000..3c31ce5 --- /dev/null +++ b/Backend/authstuff/ldap_access.py @@ -0,0 +1,167 @@ +import logging +import datetime +import pytz +import string +import threading +import time +from ldap3 import Server, Connection, ALL, NTLM, ALL_ATTRIBUTES +from django.core.exceptions import ValidationError +from django.utils import timezone +from authstuff.models import ActiveDirectoryEntry +from django.conf import settings + +logger = logging.getLogger(__name__) + +LOGIN_FIELD = "sAMAccountName" +EXPIRE_FIELD = "accountExpires" +DEPARTMENT_FIELD = "department" +GIVENNAME_FIELD = "givenName" +LASTNAME_FIELD = "sn" +ROLE_FIELD = "description" + + + +class UpdateThread(threading.Thread): + + def __init__(self, connection, domain, delta): + super(UpdateThread, self).__init__(group=None) + self.logger = logging.getLogger(__name__) + self.connection = connection + self.domain = domain + self.delta = delta + + def run(self): + if has_to_update(self.delta): + try: + startchars = string.ascii_lowercase[:26] + "_" + for char in startchars: + self.logger.info('Update AD entries with leading {}'.format(char)) + update_entries_with_leading_char(self.connection, self.domain, char) + time.sleep(5) + except Exception as e: + self.logger.error(str(e)) + self.connection.unbind() + + + + +def last_update(): + result = datetime.datetime.combine(datetime.date.min, datetime.time.min) + try: + entry = ActiveDirectoryEntry.objects.latest('modified') + result = entry.modified + except: + logger.debug('No last update found') + logger.info('Last update: {}'.format(result)) + return result + + +def has_to_update(delta): + deadline = timezone.now() - delta + deadline = deadline.replace(tzinfo=pytz.UTC) + last = last_update().replace(tzinfo=pytz.UTC) + result = settings.LDAP_FORCE_UPDATE or (last < deadline) + logger.info('Has to update: {}'.format(result)) + return result + + +def update_entries(user, pwd, delta): + dom = "ADS1" + conn = get_connection(user, pwd, dom) + update_entries_with_conn(conn, dom, delta) + + + +def update_entries_with_conn(conn, dom, delta): + asyncThread = UpdateThread(conn, dom, delta) + asyncThread.start() + + +def update_entries_with_leading_char(conn, dom, char): + conn.search( + search_base='OU=users,OU=EFI,OU=Faculties,DC=' + dom + ',DC=fh-nuernberg,DC=de', + search_filter='(&(objectclass=user)(CN=' + char + '*))', + attributes=ALL_ATTRIBUTES) + logger.info('Found {} entries'.format(len(conn.entries))) + for entry in conn.entries: + try: + clear_and_update_entry(entry) + except Exception as e: + logger.error(str(e)) + +def clear_and_update_entry(entry): + dic = parse_entry_dic(entry) + dic = clear_expire_date(dic) + dic = clear_department(dic) + dic = clear_description(dic) + update_entry(dic) + + +def update_entry(entry_dic): + login = entry_dic[LOGIN_FIELD] + try: + entry = ActiveDirectoryEntry.objects.get(canonicalName=login) + logger.debug('Update entry {}'.format(login)) + except: + logger.debug('New entry {}'.format(login)) + entry = ActiveDirectoryEntry() + entry.canonicalName = entry_dic[LOGIN_FIELD] + entry.accountExpires = entry_dic[EXPIRE_FIELD] + entry.department = entry_dic[DEPARTMENT_FIELD] + entry.givenName = entry_dic[GIVENNAME_FIELD] + entry.lastName = entry_dic[LASTNAME_FIELD] + entry.role = entry_dic[ROLE_FIELD] + entry.modified = timezone.now() + logger.debug(entry) + try: + entry.full_clean() + except ValidationError as e: + logger.warning('AD entry not valid: {}'.format(e.message_dict)) + entry.save() + + +def get_connection(user, pwd, dom): + server = Server('gso1.ads1.fh-nuernberg.de', get_info=ALL) + conn = Connection( + server, + user=dom + "\\" + user, + password=pwd, + authentication=NTLM) + conn.bind() + return conn + +def parse_entry_dic(entry): + def value_of_field(f): + try: + return entry[f].value + except: + return None + fieldNames = [LOGIN_FIELD, EXPIRE_FIELD, DEPARTMENT_FIELD, GIVENNAME_FIELD, LASTNAME_FIELD, ROLE_FIELD] + fields = map(value_of_field, fieldNames ) + return dict(zip(fieldNames, fields)) + + +def clear_expire_date(dic): + if dic[EXPIRE_FIELD] is not None: + expire_datetime = dic[EXPIRE_FIELD].replace(tzinfo=pytz.UTC) + else: + expire_datetime = datetime.datetime(datetime.MAXYEAR, 12, 31, tzinfo=pytz.UTC) + if expire_datetime.year == datetime.MAXYEAR: + expire_datetime = expire_datetime.replace(year=2099, hour=0, minute=0, second=0, microsecond=0) + dic[EXPIRE_FIELD] = expire_datetime + return dic + +def clear_department(dic): + dic[DEPARTMENT_FIELD] = string_adjust(dic[DEPARTMENT_FIELD]) + return dic + +def clear_description(dic): + dic[ROLE_FIELD] = string_adjust(dic[ROLE_FIELD]) + return dic + + +def string_adjust(s): + if s is not None: + return s[:32] + else: + return "N.N." diff --git a/Backend/authstuff/migrations/0001_initial.py b/Backend/authstuff/migrations/0001_initial.py new file mode 100644 index 0000000..87ef755 --- /dev/null +++ b/Backend/authstuff/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# Generated by Django 2.1.4 on 2018-12-10 11:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='ActiveDirectoryEntry', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(editable=False)), + ('modified', models.DateTimeField()), + ('accountExpires', models.DateTimeField()), + ('canonicalName', models.CharField(max_length=32)), + ('department', models.CharField(max_length=32)), + ('givenName', models.CharField(max_length=32)), + ('lastName', models.CharField(max_length=32)), + ('role', models.CharField(max_length=32)), + ], + ), + ] diff --git a/Backend/authstuff/migrations/__init__.py b/Backend/authstuff/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/authstuff/models.py b/Backend/authstuff/models.py new file mode 100644 index 0000000..054802a --- /dev/null +++ b/Backend/authstuff/models.py @@ -0,0 +1,25 @@ +from django.db import models +from django.utils import timezone + +class ActiveDirectoryEntry(models.Model): +# id = models.CharField(primary_key=True, max_length=64) +# created = models.DateTimeField(auto_now_add=True) +# modified = models.DateTimeField(auto_now=True) + created = models.DateTimeField(editable=False) + modified = models.DateTimeField() + accountExpires = models.DateTimeField() + canonicalName = models.CharField(max_length=32) #sAMAccountName + department = models.CharField(max_length=32) + givenName = models.CharField(max_length=32) + lastName = models.CharField(max_length=32) #sn + role = models.CharField(max_length=32) #description + + def save(self, *args, **kwargs): + ''' On save, update timestamps ''' + if not self.id: + self.created = timezone.now() + self.modified = timezone.now() + return super(ActiveDirectoryEntry, self).save(*args, **kwargs) + + def __str__(self): + return "AD-Entry %s (%s %s)" % (self.canonicalName, self.givenName, self.lastName) diff --git a/Backend/authstuff/templatetags/__init__.py b/Backend/authstuff/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/authstuff/templatetags/auth_tags.py b/Backend/authstuff/templatetags/auth_tags.py new file mode 100644 index 0000000..e881662 --- /dev/null +++ b/Backend/authstuff/templatetags/auth_tags.py @@ -0,0 +1,9 @@ +from django import template +from django.contrib.auth.models import Group + +register = template.Library() + +@register.filter(name='has_group') +def has_group(user, group_name): + group = Group.objects.get(name=group_name) + return True if group in user.groups.all() else False \ No newline at end of file diff --git a/Backend/authstuff/tests.py b/Backend/authstuff/tests.py new file mode 100644 index 0000000..15c34ee --- /dev/null +++ b/Backend/authstuff/tests.py @@ -0,0 +1,17 @@ +from django.test import TestCase +import authstuff.ldap_access +import datetime +import secrets + + +class ActiveDirTestCase(TestCase): + def setUp(self): + pass + + + def test_import_ad(self): + delta = datetime.timedelta() # datetime.timedelta(days=2) + last_update = authstuff.ldap_access.last_update() + authstuff.ldap_access.update_entries(secrets.TEST_AD_USER, secrets.TEST_AD_PASSWORD, delta) + self.assertGreater(authstuff.ldap_access.last_update(), last_update) + diff --git a/Backend/authstuff/views.py b/Backend/authstuff/views.py new file mode 100644 index 0000000..8b5171b --- /dev/null +++ b/Backend/authstuff/views.py @@ -0,0 +1,20 @@ +import logging +from authstuff.models import ActiveDirectoryEntry +from django.http import JsonResponse + + +logger = logging.getLogger(__name__) + +def detail(request, login): + result = {'canonicalName' : login, 'found' : False} + try: + addata = ActiveDirectoryEntry.objects.get(canonicalName=login) + result['found'] = True + result['role'] = addata.role + result['updated'] = addata.modified + except ActiveDirectoryEntry.DoesNotExist: + pass + response = JsonResponse(result) + return response + + diff --git a/Backend/manage.py b/Backend/manage.py new file mode 100644 index 0000000..31149e7 --- /dev/null +++ b/Backend/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "medinf.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) diff --git a/Backend/medinf/ReadUserData.py b/Backend/medinf/ReadUserData.py new file mode 100644 index 0000000..7ff3872 --- /dev/null +++ b/Backend/medinf/ReadUserData.py @@ -0,0 +1,36 @@ +import getpass +from ldap3 import Server, Connection, ALL, NTLM, ALL_ATTRIBUTES + +print("Authentifizierung gegen ein Active Directory") + + +# Eingaben +dom = input("Domain [ADS1]:") or "ADS1" +user = input("User [hofmannol]:") or "hofmannol" +print('Password:', end='') +pwd = getpass.getpass() + +# Binden an das AD +server = Server('gso1.ads1.fh-nuernberg.de', get_info=ALL) +conn = Connection( + server, + user=dom+"\\"+user, + password=pwd, + authentication=NTLM) + +conn.bind() +print(conn) +print(conn.extend.standard.who_am_i()) +print(conn.bound) + + + +# Suche nach dem gerade verbundenen User +conn.search( + search_base='DC='+dom+',DC=fh-nuernberg,DC=de', + search_filter='(&(objectclass=user)(CN='+user+'))', + attributes=ALL_ATTRIBUTES) +print(conn.entries[0]) + + +conn.unbind() diff --git a/Backend/medinf/__init__.py b/Backend/medinf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/medinf/context_processors.py b/Backend/medinf/context_processors.py new file mode 100644 index 0000000..0683e5d --- /dev/null +++ b/Backend/medinf/context_processors.py @@ -0,0 +1,4 @@ +from django.conf import settings # import the settings file + +def logout_redirect(request): + return {'LOGOUT_REDIRECT_URL': settings.LOGOUT_REDIRECT_URL} \ No newline at end of file diff --git a/Backend/medinf/fixtures/READ.ME b/Backend/medinf/fixtures/READ.ME new file mode 100644 index 0000000..644ad73 --- /dev/null +++ b/Backend/medinf/fixtures/READ.ME @@ -0,0 +1 @@ +loaddata medinf/fixtures/groups.json \ No newline at end of file diff --git a/Backend/medinf/fixtures/groups.json b/Backend/medinf/fixtures/groups.json new file mode 100644 index 0000000..75714da --- /dev/null +++ b/Backend/medinf/fixtures/groups.json @@ -0,0 +1,30 @@ +[ + { + "model": "auth.group", + "pk": 1, + "fields": { + "name": "PP_ADMIN" + } + }, + { + "model": "auth.group", + "pk": 10, + "fields": { + "name": "STUD_VIEW" + } + }, + { + "model": "auth.group", + "pk": 11, + "fields": { + "name": "STUD_VIEW_EXTENDED" + } + }, + { + "model": "auth.group", + "pk": 12, + "fields": { + "name": "STUD_ADMIN" + } + } +] diff --git a/Backend/medinf/ldap_backend.py b/Backend/medinf/ldap_backend.py new file mode 100644 index 0000000..8d10574 --- /dev/null +++ b/Backend/medinf/ldap_backend.py @@ -0,0 +1,92 @@ +import logging +import traceback +import datetime +from django.contrib.auth.models import User +from ldap3 import Server, Connection, ALL, NTLM, ALL_ATTRIBUTES +from ldap3.core.exceptions import LDAPSocketOpenError +from django.conf import settings +from authstuff.ldap_access import update_entries_with_conn + + + +class LdapBackend(object): + """ + Authenticate against a LDAP directory. + """ + + log = logging.getLogger(__name__) + + def check_login(self, username, password): + self.log.info("check login {0}".format(username)) + server = Server(settings.LDAP_SERVER, connect_timeout=8) + qualified_user = settings.LDAP_DOMAIN + '\\' + username + + conn = Connection(server, qualified_user, password=password, authentication=NTLM) + + try: + conn.bind() + except LDAPSocketOpenError: + # LDAP Server nicht erreichbar + self.log.warning("LDAP check_login: Server " + settings.LDAP_SERVER + " not reachable.") + return None + except: + var = traceback.format_exc() + self.log.info("LDAP check_login(bind): Unexpected Error %s" % var) + return None + result = None + + self.log.info("Bind successful") + + try: + if conn.extend.standard.who_am_i() != None: + conn.search( + search_base='DC=' + settings.LDAP_DOMAIN + ',DC=fh-nuernberg,DC=de', + search_filter='(&(objectclass=user)(CN=' + username + '))', attributes=ALL_ATTRIBUTES) + info = conn.entries[0] + result = {'lastname' : str(info.sn), + 'givenname' : str(info.givenName), + 'login' : str(info.cn), + 'department' : str(info.department), + 'role' : str(info.description)} + self.log.info("LDAP check_login: %s" % result) + except: + var = traceback.format_exc() + self.log.warning("LDAP check_login: Unexpected Error %s" % var) + + try: + delta = datetime.timedelta(days=settings.LDAP_UPDATE_TIMEOUT_DAYS) + update_entries_with_conn(conn, settings.LDAP_DOMAIN, delta) + except: + var = traceback.format_exc() + self.log.warning("LDAP check_login: Update AD Entries failed %s" % var) + return result + + + + def authenticate(self, request, username=None, password=None): + ldap_user = self.check_login(username,password) + if ldap_user: + # {'lastname': 'Hofmann', 'givenname': 'Oliver', 'login': 'hofmannol', 'department': 'EFI', 'role': 'PF'} + # {'lastname': 'Wimmer', 'givenname': 'Martin', 'login': 'wimmerma', 'department': 'EFI', 'role': 'MA'} + # {'lastname': 'Mueller', 'givenname': 'Vincent', 'login': 'muellervi56608', 'department': 'EFI', 'role': 'ST'} + # {'lastname': 'Poehlau', 'givenname': 'Frank', 'login': 'poehlaufr', 'department': 'EFI', 'role': 'PF'} + try: + user = User.objects.get(username=ldap_user['login']) + except User.DoesNotExist: + self.log.info("LDAP authenticate: create new user %s" % ldap_user['login']) + user = User(username=ldap_user['login']) + user.first_name = ldap_user['givenname'] + user.last_name = ldap_user['lastname'] + user.is_staff = (ldap_user['role'] != 'ST') + user.is_superuser = False + user.save() + return user + return None + + def get_user(self, user_id): + try: + return User.objects.get(pk=user_id) + except User.DoesNotExist: + return None + + diff --git a/Backend/medinf/settings.py b/Backend/medinf/settings.py new file mode 100644 index 0000000..7058e98 --- /dev/null +++ b/Backend/medinf/settings.py @@ -0,0 +1,306 @@ +""" +Django settings for medinf project. + +Generated by 'django-admin startproject' using Django 1.11.2. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +from datetime import timedelta +import os +import re +import socket + +# Development or Production +r = re.search(r"^172.17", socket.gethostbyname(socket.gethostname())) +DEVELOPMENT = r == None + +DEBUG = True + + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = DEVELOPMENT + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +# Log Configuration + +if DEBUG: + LOGLEVEL = "DEBUG" +else: + LOGLEVEL = "INFO" + +LOGGING = { + "version": 1, + "disable_existing_loggers": False, + "formatters": { + "standard": { + "format": "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s", + "datefmt": "%d/%b/%Y %H:%M:%S", + }, + }, + "handlers": { + "null": { + "level": "DEBUG", + "class": "logging.NullHandler", + }, + "logfile": { + "level": "DEBUG", + "class": "logging.handlers.RotatingFileHandler", + "filename": os.path.join(BASE_DIR, "log/log.txt"), + "maxBytes": 1024 * 1024 * 5, + "backupCount": 5, + "formatter": "standard", + }, + "console": { + "level": "DEBUG", + "class": "logging.StreamHandler", + "formatter": "standard", + }, + }, + "loggers": { + "": { + "level": "WARNING", + "handlers": ["logfile"], + }, + "django.db.backends": { + "handlers": ["console"], + "level": "INFO", # set DEBUG if needed + "propagate": False, + }, + "medinf": { + "handlers": ["console"], + "level": LOGLEVEL, + "propagate": True, + }, + "studis": { + "handlers": ["console"], + "level": LOGLEVEL, + "propagate": True, + }, + "authstuff": { + "handlers": ["console"], + "level": "INFO", + "propagate": True, + }, + }, +} + + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = "XXXXXn!i2lx(&)gq7l!art_pr et*$r)r&ogu&j-+wm0^ni5" + + +USE_X_FORWARDED_HOST = True + +ALLOWED_HOSTS = [ + "medinf.efi.th-nuernberg.de", + "api.efi.th-nuernberg.de", + "localhost", + "127.0.0.1", +] + +# Application definition + +INSTALLED_APPS = [ + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + # Custom Apps + "authstuff.apps.AuthStuffConfig", + "pruefplan_viewer.apps.PruefplanViewerConfig", + "pruefplan_parser.apps.PruefplanParserConfig", + # Third Party Apps + "rest_framework", + "rest_framework_simplejwt.token_blacklist", + "rest_framework.authtoken", + "corsheaders", +] + +MIDDLEWARE = [ + "django.middleware.security.SecurityMiddleware", + "corsheaders.middleware.CorsMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", +] + +ROOT_URLCONF = "medinf.urls" + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [os.path.join(BASE_DIR, "templates")], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + "medinf.context_processors.logout_redirect", + ], + }, + }, +] + +WSGI_APPLICATION = "medinf.wsgi.application" + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +if DEVELOPMENT: + DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": os.path.join(BASE_DIR, "db.sqlite3"), + } + } +else: + DATABASES = { + "default": { + "ENGINE": "django.db.backends.mysql", + "NAME": "django-app", + "USER": "django-app", + "PASSWORD": "8TFXHv9X", + "HOST": "mysql", + "PORT": "3306", + "OPTIONS": {"init_command": "SET sql_mode='STRICT_TRANS_TABLES'"}, + } + } + + +# Password validation +# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/1.11/topics/i18n/ + +LANGUAGE_CODE = "de-de" + +TIME_ZONE = "Europe/Berlin" + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + + +# Nach dem Deployment werden die statischen Inhalte von medinf geholt. +# Sie müssen in das Verzeichnis /static kopiert werden + + +STATIC_ROOT = os.path.join("/tmp", "static") + +STATIC_URL = "/static/" + +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, "static"), +] + +# Konfiguration des Auth-Systems +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': [ + 'rest_framework.authentication.TokenAuthentication', + ], +} + +LDAP_DOMAIN = "ADS1" +LDAP_SERVER = "gso1.ads1.fh-nuernberg.de" +LDAP_FORCE_UPDATE = False +LDAP_UPDATE_TIMEOUT_DAYS = 2 + +if DEVELOPMENT: + LOGIN_REDIRECT_URL = "/" + LOGOUT_REDIRECT_URL = "/" + LOGIN_URL = "/accounts/login/" +else: + LOGIN_REDIRECT_URL = "/app/" + LOGOUT_REDIRECT_URL = "/app/" + LOGIN_URL = "/app/accounts/login/" + + +if DEVELOPMENT: + AUTHENTICATION_BACKENDS = [ + "django.contrib.auth.backends.ModelBackend", + ] +else: + AUTHENTICATION_BACKENDS = [ + "django.contrib.auth.backends.ModelBackend", + "medinf.ldap_backend.LdapBackend", + ] + + +# Config the JWT Token with static settings -> from docs +# https://django-rest-framework-simplejwt.readthedocs.io/en/latest/ +SIMPLE_JWT = { + "ACCESS_TOKEN_LIFETIME": timedelta(minutes=15), + "REFRESH_TOKEN_LIFETIME": timedelta(days=50), + "ROTATE_REFRESH_TOKENS": True, + "BLACKLIST_AFTER_ROTATION": True, + "UPDATE_LAST_LOGIN": False, + "ALGORITHM": "HS256", + "VERIFYING_KEY": None, + "AUDIENCE": None, + "ISSUER": None, + "JWK_URL": None, + "LEEWAY": 0, + "AUTH_HEADER_TYPES": ("Bearer",), + "AUTH_HEADER_NAME": "HTTP_AUTHORIZATION", + "USER_ID_FIELD": "id", + "USER_ID_CLAIM": "user_id", + "USER_AUTHENTICATION_RULE": "rest_framework_simplejwt.authentication.default_user_authentication_rule", + "AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",), + "TOKEN_TYPE_CLAIM": "token_type", + "TOKEN_USER_CLASS": "rest_framework_simplejwt.models.TokenUser", + "JTI_CLAIM": "jti", + "SLIDING_TOKEN_REFRESH_EXP_CLAIM": "refresh_exp", + "SLIDING_TOKEN_LIFETIME": timedelta(minutes=5), + "SLIDING_TOKEN_REFRESH_LIFETIME": timedelta(days=1), +} + +# Set coresheader to allow all origin +CORS_ALLOW_ALL_ORIGINS = True + +# Konfiguration Prüfungsplan +PP_UPLOAD_DIR = os.path.join(BASE_DIR, "pruefplan_parser", "data") +PP_TEACHER_FILE = os.path.join(PP_UPLOAD_DIR, "Dozenten.json") +PP_SUBJECT_FILE = os.path.join(PP_UPLOAD_DIR, "Faecher.json") +PP_ATTENDANCE_FILE = os.path.join(PP_UPLOAD_DIR, "Praesenzen.json") +PP_EXAM_FILE = os.path.join(PP_UPLOAD_DIR, "Pruefungen.json") +PP_STUDENT_FILE = os.path.join(PP_UPLOAD_DIR, "Saaleinteilung.json") diff --git a/Backend/medinf/urls.py b/Backend/medinf/urls.py new file mode 100644 index 0000000..940c371 --- /dev/null +++ b/Backend/medinf/urls.py @@ -0,0 +1,37 @@ +"""medinf URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" + +from django.conf.urls import include +from django.contrib import admin +from django.urls import path +from django.views.generic import TemplateView +import medinf.views + + +urlpatterns = [ + path("", TemplateView.as_view(template_name="index.html")), + path("navlogin/", medinf.views.navlogin, name="navlogin"), + path("admin/", admin.site.urls), + path("accounts/", include("django.contrib.auth.urls")), + path("pruefplan_viewer/", include("pruefplan_viewer.urls")), + path("pruefplan_parser/", include("pruefplan_parser.urls")), + path("api/", include("api.urls")), # Link the api urls to the main access point + path( + "authenticate/", + medinf.views.AuthenticateView.as_view(), + name="authenticateView", + ), # REST call to authenticate a user in the backend +] diff --git a/Backend/medinf/views.py b/Backend/medinf/views.py new file mode 100644 index 0000000..98b5bc6 --- /dev/null +++ b/Backend/medinf/views.py @@ -0,0 +1,59 @@ +from django.contrib.auth import authenticate, login, logout +from django.shortcuts import render, redirect +from yaml import serialize +from api.serializer import MyTokenObtainPairSerializer +from api.views import MyTokenObtainPairView +import medinf.settings +import logging +import medinf.ldap_backend + + +def navlogin(request): + log = logging.getLogger("medinf") + logout(request) + error = "" + if request.POST: + username = request.POST.get("username", "?") + password = request.POST.get("password", "?") + + user = authenticate(username=username, password=password) + if user is not None: + if user.is_active: + login(request, user) + return redirect(medinf.settings.LOGIN_REDIRECT_URL) + else: + log.info("Inactive user {} tried to login".format(username)) + error = "Ihre Benutzerkennung wurde deaktiviert." + else: + log.info("Login failed for {}".format(username)) + error = "Benutzername oder Kennwort falsch." + context = {"error": error} + return render(request, "index.html", context) + + +################ New REST Token Auth ######################################### + +from rest_framework_simplejwt.tokens import RefreshToken +from rest_framework.views import APIView +from rest_framework.response import Response +from django.contrib.auth import authenticate + + +class AuthenticateView(APIView): + def post(self, request): + username = request.data.get("username") + password = request.data.get("password") + + + user = authenticate(request, username=username, password=password) + if user is not None: + login(request, user) #login the user in the backend + # refresh = RefreshToken.for_user(user) + serializer = MyTokenObtainPairSerializer(data={"username":username, "password":password}) + serializer.is_valid(raise_exception=True) + + token = serializer.validated_data + + return Response(token) + + return Response({"error": "Invalid credentials"}, status=400) diff --git a/Backend/medinf/wsgi.py b/Backend/medinf/wsgi.py new file mode 100644 index 0000000..9e370fa --- /dev/null +++ b/Backend/medinf/wsgi.py @@ -0,0 +1,21 @@ +""" +WSGI config for medinf project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ +""" + +import os +import logging +import medinf.settings +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "medinf.settings") + +log = logging.getLogger(__name__) +log.info("Starting in %s Environment" % ('DEV' if medinf.settings.DEVELOPMENT else 'PROD')) + +application = get_wsgi_application() + diff --git a/Backend/pruefplan_parser/__init__.py b/Backend/pruefplan_parser/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/pruefplan_parser/admin.py b/Backend/pruefplan_parser/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/Backend/pruefplan_parser/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/Backend/pruefplan_parser/apps.py b/Backend/pruefplan_parser/apps.py new file mode 100644 index 0000000..06dfbd1 --- /dev/null +++ b/Backend/pruefplan_parser/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class PruefplanParserConfig(AppConfig): + name = 'pruefplan_parser' diff --git a/Backend/pruefplan_parser/data/Dozenten.json b/Backend/pruefplan_parser/data/Dozenten.json new file mode 100644 index 0000000..2248d79 --- /dev/null +++ b/Backend/pruefplan_parser/data/Dozenten.json @@ -0,0 +1,229 @@ +{ + "revision": "2648:2829M", + "array": [ + { + "kennung": "259", + "vorname": "Christine", + "nachname": "Rademacher", + "titel": "Prof. Dr.", + "fakultaet": "AMP", + "istLehrbeauftragter": false + }, + { + "kennung": "315", + "vorname": "J\u00c3\u00b6rg", + "nachname": "Steinbach", + "titel": "Prof. Dr.", + "fakultaet": "AMP", + "istLehrbeauftragter": false + }, + { + "kennung": "385", + "vorname": "Peter", + "nachname": "Jonas", + "titel": "Prof. Dr.", + "fakultaet": "AMP", + "istLehrbeauftragter": false + }, + { + "kennung": "71655", + "vorname": "Melanie", + "nachname": "Basting", + "titel": "Prof. Dr.", + "fakultaet": "AMP", + "istLehrbeauftragter": false + }, + { + "kennung": "103", + "vorname": "Thomas", + "nachname": "Giesler", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "70901", + "vorname": "Sven", + "nachname": "Loquai", + "titel": "Prof. Dr.-Ing.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "166", + "vorname": "Bernd", + "nachname": "Klehn", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "382", + "vorname": "Michael", + "nachname": "Zwanger", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "74090", + "vorname": "Olga", + "nachname": "Battermann", + "titel": "Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": true + }, + { + "kennung": "73247", + "vorname": "Michael", + "nachname": "Mayle", + "titel": "Prof. Dr.", + "fakultaet": "AMP", + "istLehrbeauftragter": false + }, + { + "kennung": "316", + "vorname": "Florian", + "nachname": "Steinmeyer", + "titel": "Prof. Dr.", + "fakultaet": "AMP", + "istLehrbeauftragter": false + }, + { + "kennung": "49", + "vorname": "Bernd", + "nachname": "Braun", + "titel": "Prof. Dr.", + "fakultaet": "AMP", + "istLehrbeauftragter": false + }, + { + "kennung": "73630", + "vorname": "Peter", + "nachname": "Eberhardt", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": true + }, + { + "kennung": "576", + "vorname": "J\u00c3\u00bcrgen", + "nachname": "Krumm", + "titel": "Prof.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "219", + "vorname": "Stefan", + "nachname": "May", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "75398", + "vorname": "Christian", + "nachname": "Pfitzner", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "508", + "vorname": "Wolfgang", + "nachname": "M\u00c3\u00b6nch", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "585", + "vorname": "Rainer", + "nachname": "Engelbrecht", + "titel": "Prof. Dr.-Ing.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "73998", + "vorname": "Stefan", + "nachname": "Wenhardt", + "titel": "", + "fakultaet": "AMP", + "istLehrbeauftragter": true + }, + { + "kennung": "74065", + "vorname": "Matthias", + "nachname": "Gleich", + "titel": "", + "fakultaet": "EFI", + "istLehrbeauftragter": true + }, + { + "kennung": "376", + "vorname": "Olaf", + "nachname": "Ziemann", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "350", + "vorname": "Sebastian", + "nachname": "Walter", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "75807", + "vorname": "Andreas", + "nachname": "Stute", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "492", + "vorname": "G\u00c3\u00bcnter", + "nachname": "Kie\u00c3\u0178ling", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "84399", + "vorname": "Anja", + "nachname": "Freudenreich", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "38496", + "vorname": "Jan", + "nachname": "Paulus", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "62711", + "vorname": "Hritam", + "nachname": "Dutta", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + }, + { + "kennung": "73323", + "vorname": "Enrico", + "nachname": "Schr\u00c3\u00b6der;", + "titel": "Prof. Dr.", + "fakultaet": "EFI", + "istLehrbeauftragter": false + } + ] +} \ No newline at end of file diff --git a/Backend/pruefplan_parser/data/Faecher.json b/Backend/pruefplan_parser/data/Faecher.json new file mode 100644 index 0000000..1bf239d --- /dev/null +++ b/Backend/pruefplan_parser/data/Faecher.json @@ -0,0 +1,1121 @@ +{ + "revision": "2648:2829M", + "array": [ + { + "kennung": "BEI:20141:1110", + "fachkennungOhm": { + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "1110", + "uid": 16973, + "prueferCode": "315,385,71655,259", + "kurztext": "Ingenieurmathematik 1", + "langtext": "Ingenieurmathematik 1", + "textDarstellung": "BEI:20141:\"1110\":16973:\"315,385,71655,259\":\"Ingenieurmathematik 1\"", + "kurzDarstellung": "BEI:*:\"1110\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "M1", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "semester": 1, + "textDarstellung": "M1:SU:BEI:1", + "textDarstellungOhneStudienplanausgabe": "M1:SU:BEI:1", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 1, + "anmeldenummer": "13634:EI:20141", + "prueferKennung": [ + "71655", + "385", + "259", + "315" + ], + "prueferQuelle": "315 385 71655 259 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20141:5150", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "5150", + "uid": 17233, + "prueferCode": "103,166", + "kurztext": "Elektronik 2", + "langtext": "Elektronik 2", + "textDarstellung": "BMED:20141:\"5150\":17233:\"103,166\":\"Elektronik 2\"", + "kurzDarstellung": "BMED:*:\"5150\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "ELK2", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMEI", + "langtext": "BMEI" + }, + "semester": 4, + "textDarstellung": "ELK2:SU:BMEI:4", + "textDarstellungOhneStudienplanausgabe": "ELK2:SU:BMEI:4", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 4, + "anmeldenummer": "13841:MED:20141", + "prueferKennung": [ + "103", + "166" + ], + "prueferQuelle": "103 166 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20201:5150", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20201, + "pruefungsnummer": "5150", + "uid": 24212, + "prueferCode": "103,166", + "kurztext": "Elektronik 2", + "langtext": "Elektronik 2", + "textDarstellung": "BMED:20201:\"5150\":24212:\"103,166\":\"Elektronik 2\"", + "kurzDarstellung": "BMED:*:\"5150\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "ELK2", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMEI", + "langtext": "BMEI" + }, + "semester": 4, + "textDarstellung": "ELK2:SU:BMEI:4", + "textDarstellungOhneStudienplanausgabe": "ELK2:SU:BMEI:4", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 4, + "anmeldenummer": "16800:MED:20201", + "prueferKennung": [ + "103", + "166" + ], + "prueferQuelle": "103 166 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20141:1370", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "1370", + "uid": 25273, + "prueferCode": "316,382,74090,73247", + "kurztext": "Grundlagen zur Medizinischen Physik", + "langtext": "Grundlagen zur Medizinischen Physik", + "textDarstellung": "BMED:20141:\"1370\":25273:\"316,382,74090,73247\":\"Grundlagen zur Medizinischen Physik\"", + "kurzDarstellung": "BMED:*:\"1370\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "MZ1PH", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "semester": 2, + "textDarstellung": "MZ1PH:SU:BMED:2", + "textDarstellungOhneStudienplanausgabe": "MZ1PH:SU:BMED:2", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 2, + "anmeldenummer": "13711:MED:20141", + "prueferKennung": [ + "74090", + "73247", + "316", + "382" + ], + "prueferQuelle": "316 382 74090 73247 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20201:1600", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20201, + "pruefungsnummer": "1600", + "uid": 24351, + "prueferCode": "316,73247", + "kurztext": "Physik", + "langtext": "Physik", + "textDarstellung": "BMED:20201:\"1600\":24351:\"316,73247\":\"Physik\"", + "kurzDarstellung": "BMED:*:\"1600\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "PH", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "semester": 2, + "textDarstellung": "PH:SU:BMED:2", + "textDarstellungOhneStudienplanausgabe": "PH:SU:BMED:2", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 2, + "anmeldenummer": "16923:MED:20201", + "prueferKennung": [ + "73247", + "316" + ], + "prueferQuelle": "316 73247 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMF:20171:1180", + "fachkennungOhm": { + "studiengang": { + "name": "BMF", + "langtext": "Bachelor Mechatronik/Feinwerktechnik" + }, + "studienplanausgabe": 20171, + "pruefungsnummer": "1180", + "uid": 14770, + "prueferCode": "73630,576", + "kurztext": "Elektrotechnik 1", + "langtext": "Elektrotechnik 1", + "textDarstellung": "BMF:20171:\"1180\":14770:\"73630,576\":\"Elektrotechnik 1\"", + "kurzDarstellung": "BMF:*:\"1180\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "ET1", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMF", + "langtext": "Bachelor Mechatronik/Feinwerktechnik" + }, + "semester": 1, + "textDarstellung": "ET1:SU:BMF:1", + "textDarstellungOhneStudienplanausgabe": "ET1:SU:BMF:1", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 1, + "anmeldenummer": "15203:MF:20171", + "prueferKennung": [ + "73630", + "576" + ], + "prueferQuelle": "73630 576 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "MAPR:20201:8425", + "fachkennungOhm": { + "studiengang": { + "name": "MAPR", + "langtext": "Master Applied Research in Engineering Sciences" + }, + "studienplanausgabe": 20201, + "pruefungsnummer": "8425", + "uid": 27925, + "prueferCode": "219,75398", + "kurztext": "Robotik", + "langtext": "Robotik", + "textDarstellung": "MAPR:20201:\"8425\":27925:\"219,75398\":\"Robotik\"", + "kurzDarstellung": "MAPR:*:\"8425\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "mAUT4#AB", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "MSY", + "langtext": "Master Elektronische und Mechatronische Systeme" + }, + "semester": 1, + "textDarstellung": "mAUT4#AB:SU:MSY:1", + "textDarstellungOhneStudienplanausgabe": "mAUT4#AB:SU:MSY:1", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 1, + "anmeldenummer": "16355:APR:20201", + "prueferKennung": [ + "219", + "75398" + ], + "prueferQuelle": "219 75398 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "MSY:20091:8425", + "fachkennungOhm": { + "studiengang": { + "name": "MSY", + "langtext": "Master Elektronische und Mechatronische Systeme" + }, + "studienplanausgabe": 20091, + "pruefungsnummer": "8425", + "uid": 27925, + "prueferCode": "219,75398", + "kurztext": "Robotik", + "langtext": "Robotik", + "textDarstellung": "MSY:20091:\"8425\":27925:\"219,75398\":\"Robotik\"", + "kurzDarstellung": "MSY:*:\"8425\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "mAUT4#AB", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "MSY", + "langtext": "Master Elektronische und Mechatronische Systeme" + }, + "semester": 1, + "textDarstellung": "mAUT4#AB:SU:MSY:1", + "textDarstellungOhneStudienplanausgabe": "mAUT4#AB:SU:MSY:1", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 1, + "anmeldenummer": "16355:SY:20091", + "prueferKennung": [ + "219", + "75398" + ], + "prueferQuelle": "219 75398 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20141:5350", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "5350", + "uid": 24229, + "prueferCode": "508", + "kurztext": "Technische Optik", + "langtext": "Technische Optik", + "textDarstellung": "BMED:20141:\"5350\":24229:\"508\":\"Technische Optik\"", + "kurzDarstellung": "BMED:*:\"5350\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "TO", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMMF", + "langtext": "BMMF" + }, + "semester": 4, + "textDarstellung": "TO:SU:BMMF:4", + "textDarstellungOhneStudienplanausgabe": "TO:SU:BMMF:4", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 4, + "anmeldenummer": "16813:MED:20141", + "prueferKennung": [ + "508" + ], + "prueferQuelle": "508 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20201:5350", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20201, + "pruefungsnummer": "5350", + "uid": 24229, + "prueferCode": "508", + "kurztext": "Technische Optik", + "langtext": "Technische Optik", + "textDarstellung": "BMED:20201:\"5350\":24229:\"508\":\"Technische Optik\"", + "kurzDarstellung": "BMED:*:\"5350\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "TO", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMMF", + "langtext": "BMMF" + }, + "semester": 4, + "textDarstellung": "TO:SU:BMMF:4", + "textDarstellungOhneStudienplanausgabe": "TO:SU:BMMF:4", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 4, + "anmeldenummer": "16813:MED:20201", + "prueferKennung": [ + "508" + ], + "prueferQuelle": "508 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMF:20171:4130", + "fachkennungOhm": { + "studiengang": { + "name": "BMF", + "langtext": "Bachelor Mechatronik/Feinwerktechnik" + }, + "studienplanausgabe": 20171, + "pruefungsnummer": "4130", + "uid": 14779, + "prueferCode": "585", + "kurztext": "Technische Optik", + "langtext": "Technische Optik", + "textDarstellung": "BMF:20171:\"4130\":14779:\"585\":\"Technische Optik\"", + "kurzDarstellung": "BMF:*:\"4130\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "TO", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMF", + "langtext": "Bachelor Mechatronik/Feinwerktechnik" + }, + "semester": 6, + "textDarstellung": "TO:SU:BMF:6", + "textDarstellungOhneStudienplanausgabe": "TO:SU:BMF:6", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 6, + "anmeldenummer": "15284:MF:20171", + "prueferKennung": [ + "585" + ], + "prueferQuelle": "585 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20141:1210", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "1210", + "uid": 25171, + "prueferCode": "73998,259", + "kurztext": "Ingenieurmathematik 1", + "langtext": "Ingenieurmathematik 1", + "textDarstellung": "BMED:20141:\"1210\":25171:\"73998,259\":\"Ingenieurmathematik 1\"", + "kurzDarstellung": "BMED:*:\"1210\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "M1", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "semester": 1, + "textDarstellung": "M1:SU:BMED:1", + "textDarstellungOhneStudienplanausgabe": "M1:SU:BMED:1", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 1, + "anmeldenummer": "13637:MED:20141", + "prueferKennung": [ + "259", + "73998" + ], + "prueferQuelle": "73998 259 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20201:1510", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20201, + "pruefungsnummer": "1510", + "uid": 24344, + "prueferCode": "73998,259", + "kurztext": "Ingenieurmathematik 1", + "langtext": "Ingenieurmathematik 1", + "textDarstellung": "BMED:20201:\"1510\":24344:\"73998,259\":\"Ingenieurmathematik 1\"", + "kurzDarstellung": "BMED:*:\"1510\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "M1", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "semester": 1, + "textDarstellung": "M1:SU:BMED:1", + "textDarstellungOhneStudienplanausgabe": "M1:SU:BMED:1", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 1, + "anmeldenummer": "16916:MED:20201", + "prueferKennung": [ + "259", + "73998" + ], + "prueferQuelle": "73998 259 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BEI:20141:3800", + "fachkennungOhm": { + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "3800", + "uid": 16991, + "prueferCode": "74065", + "kurztext": "Betriebswirtschaft", + "langtext": "Betriebswirtschaft", + "textDarstellung": "BEI:20141:\"3800\":16991:\"74065\":\"Betriebswirtschaft\"", + "kurzDarstellung": "BEI:*:\"3800\"", + "fachart": { + "kurztext": "LN", + "langtext": "Leistungsnachweis", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "BW", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "semester": 5, + "textDarstellung": "BW:SU:BEI:5", + "textDarstellungOhneStudienplanausgabe": "BW:SU:BEI:5", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "LN", + "langtext": "Leistungsnachweis", + "wirdGeplant": true + }, + "semester": 5, + "anmeldenummer": "13646:EI:20141", + "prueferKennung": [ + "74065" + ], + "prueferQuelle": "74065 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMF:20171:4070", + "fachkennungOhm": { + "studiengang": { + "name": "BMF", + "langtext": "Bachelor Mechatronik/Feinwerktechnik" + }, + "studienplanausgabe": 20171, + "pruefungsnummer": "4070", + "uid": 14678, + "prueferCode": "350", + "kurztext": "Mechatronische Komponenten", + "langtext": "Mechatronische Komponenten", + "textDarstellung": "BMF:20171:\"4070\":14678:\"350\":\"Mechatronische Komponenten\"", + "kurzDarstellung": "BMF:*:\"4070\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "MK", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMF", + "langtext": "Bachelor Mechatronik/Feinwerktechnik" + }, + "semester": 4, + "textDarstellung": "MK:SU:BMF:4", + "textDarstellungOhneStudienplanausgabe": "MK:SU:BMF:4", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 4, + "anmeldenummer": "15083:MF:20171", + "prueferKennung": [ + "350" + ], + "prueferQuelle": "350 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BEI:20141:5120", + "fachkennungOhm": { + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "5120", + "uid": 17364, + "prueferCode": "166", + "kurztext": "Elektronik 1", + "langtext": "Elektronik 1", + "textDarstellung": "BEI:20141:\"5120\":17364:\"166\":\"Elektronik 1\"", + "kurzDarstellung": "BEI:*:\"5120\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "ELK1", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "semester": 3, + "textDarstellung": "ELK1:SU:BEI:3", + "textDarstellungOhneStudienplanausgabe": "ELK1:SU:BEI:3", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 3, + "anmeldenummer": "17711:EI:20141", + "prueferKennung": [ + "166" + ], + "prueferQuelle": "166 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20141:5120", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "5120", + "uid": 17364, + "prueferCode": "166", + "kurztext": "Elektronik 1", + "langtext": "Elektronik 1", + "textDarstellung": "BMED:20141:\"5120\":17364:\"166\":\"Elektronik 1\"", + "kurzDarstellung": "BMED:*:\"5120\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "ELK1", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "semester": 3, + "textDarstellung": "ELK1:SU:BEI:3", + "textDarstellungOhneStudienplanausgabe": "ELK1:SU:BEI:3", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 3, + "anmeldenummer": "17711:MED:20141", + "prueferKennung": [ + "166" + ], + "prueferQuelle": "166 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "IBT:20141:6160", + "fachkennungOhm": { + "studiengang": { + "name": "IBT", + "langtext": "International Business and Technology" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "6160", + "uid": 27199, + "prueferCode": "166", + "kurztext": "Elektronik", + "langtext": "Elektronik", + "textDarstellung": "IBT:20141:\"6160\":27199:\"166\":\"Elektronik\"", + "kurzDarstellung": "IBT:*:\"6160\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "ELK1", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "semester": 3, + "textDarstellung": "ELK1:SU:BEI:3", + "textDarstellungOhneStudienplanausgabe": "ELK1:SU:BEI:3", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 5, + "anmeldenummer": "15421:IBT:20141", + "prueferKennung": [ + "166" + ], + "prueferQuelle": "166 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "MSY:20091:8361", + "fachkennungOhm": { + "studiengang": { + "name": "MSY", + "langtext": "Master Elektronische und Mechatronische Systeme" + }, + "studienplanausgabe": 20091, + "pruefungsnummer": "8361", + "uid": 31199, + "prueferCode": "49,75807", + "kurztext": "Grundlagen und Systeme der Quantentechnologien", + "langtext": "Grundlagen und Systeme der Quantentechnologien", + "textDarstellung": "MSY:20091:\"8361\":31199:\"49,75807\":\"Grundlagen und Systeme der Quantentechnologien\"", + "kurzDarstellung": "MSY:*:\"8361\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "mOQT4#AB", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "MSY", + "langtext": "Master Elektronische und Mechatronische Systeme" + }, + "semester": 1, + "textDarstellung": "mOQT4#AB:SU:MSY:1", + "textDarstellungOhneStudienplanausgabe": "mOQT4#AB:SU:MSY:1", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 2, + "anmeldenummer": "17241:SY:20091", + "prueferKennung": [ + "49", + "75807" + ], + "prueferQuelle": "49 75807 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMF:20171:1190", + "fachkennungOhm": { + "studiengang": { + "name": "BMF", + "langtext": "Bachelor Mechatronik/Feinwerktechnik" + }, + "studienplanausgabe": 20171, + "pruefungsnummer": "1190", + "uid": 14806, + "prueferCode": "73630,492", + "kurztext": "Elektrotechnik 2", + "langtext": "Elektrotechnik 2", + "textDarstellung": "BMF:20171:\"1190\":14806:\"73630,492\":\"Elektrotechnik 2\"", + "kurzDarstellung": "BMF:*:\"1190\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "ET2", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BMF", + "langtext": "Bachelor Mechatronik/Feinwerktechnik" + }, + "semester": 2, + "textDarstellung": "ET2:SU:BMF:2", + "textDarstellungOhneStudienplanausgabe": "ET2:SU:BMF:2", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 2, + "anmeldenummer": "15313:MF:20171", + "prueferKennung": [ + "73630", + "492" + ], + "prueferQuelle": "73630 492 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BEI:20141:5160", + "fachkennungOhm": { + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "5160", + "uid": 17042, + "prueferCode": "38496", + "kurztext": "Informatik 2", + "langtext": "Informatik 2", + "textDarstellung": "BEI:20141:\"5160\":17042:\"38496\":\"Informatik 2\"", + "kurzDarstellung": "BEI:*:\"5160\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "I2#AB", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "semester": 3, + "textDarstellung": "I2#AB:SU:BEI:3", + "textDarstellungOhneStudienplanausgabe": "I2#AB:SU:BEI:3", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 3, + "anmeldenummer": "13685:EI:20141", + "prueferKennung": [ + "38496" + ], + "prueferQuelle": "38496 ", + "pruefungsdauerMinuten": -1 + }, + { + "kennung": "BMED:20141:5160", + "fachkennungOhm": { + "studiengang": { + "name": "BMED", + "langtext": "Bachelor Medizintechnik" + }, + "studienplanausgabe": 20141, + "pruefungsnummer": "5160", + "uid": 17042, + "prueferCode": "38496", + "kurztext": "Informatik 2", + "langtext": "Informatik 2", + "textDarstellung": "BMED:20141:\"5160\":17042:\"38496\":\"Informatik 2\"", + "kurzDarstellung": "BMED:*:\"5160\"", + "fachart": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + } + }, + "fachkennungEfi": { + "fachkennung": "I2#AB", + "typ": { + "kurztext": "SU", + "langtext": "Seminaristischer Unterricht", + "textDarstellung": "SU (Seminaristischer Unterricht)" + }, + "studiengang": { + "name": "BEI", + "langtext": "Bachelor Elektrotechnik und Informationstechnik" + }, + "semester": 3, + "textDarstellung": "I2#AB:SU:BEI:3", + "textDarstellungOhneStudienplanausgabe": "I2#AB:SU:BEI:3", + "formatGueltig": true + }, + "fachArt": { + "kurztext": "PR", + "langtext": "Pr\u00c3\u00bcfung", + "wirdGeplant": true + }, + "semester": 3, + "anmeldenummer": "13685:MED:20141", + "prueferKennung": [ + "38496" + ], + "prueferQuelle": "38496 ", + "pruefungsdauerMinuten": -1 + } + ] +} \ No newline at end of file diff --git a/Backend/pruefplan_parser/data/Praesenzen.json b/Backend/pruefplan_parser/data/Praesenzen.json new file mode 100644 index 0000000..0c17cd7 --- /dev/null +++ b/Backend/pruefplan_parser/data/Praesenzen.json @@ -0,0 +1,161 @@ +{ + "revision": "2648:2829M", + "array": [ + { + "dozentenkennung": "103", + "termin": { + "datumText": "22.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 22, + "stunde": 11, + "minute": 0, + "wochentag": "MONTAG", + "pruefungswoche": 2 + } + }, + { + "dozentenkennung": "70901", + "termin": { + "datumText": "11.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 11, + "stunde": 8, + "minute": 30, + "wochentag": "DONNERSTAG", + "pruefungswoche": 1 + } + }, + { + "dozentenkennung": "166", + "termin": { + "datumText": "16.07.2024 16:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 16, + "stunde": 16, + "minute": 30, + "wochentag": "DIENSTAG", + "pruefungswoche": 1 + } + }, + { + "dozentenkennung": "382", + "termin": { + "datumText": "16.07.2024 14:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 16, + "stunde": 14, + "minute": 0, + "wochentag": "DIENSTAG", + "pruefungswoche": 1 + } + }, + { + "dozentenkennung": "576", + "termin": { + "datumText": "03.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 3, + "stunde": 11, + "minute": 0, + "wochentag": "MITTWOCH", + "pruefungswoche": 0 + } + }, + { + "dozentenkennung": "75398", + "termin": { + "datumText": "09.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 9, + "stunde": 11, + "minute": 0, + "wochentag": "DIENSTAG", + "pruefungswoche": 0 + } + }, + { + "dozentenkennung": "508", + "termin": { + "datumText": "13.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 13, + "stunde": 11, + "minute": 0, + "wochentag": "SAMSTAG", + "pruefungswoche": 1 + } + }, + { + "dozentenkennung": "585", + "termin": { + "datumText": "13.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 13, + "stunde": 11, + "minute": 0, + "wochentag": "SAMSTAG", + "pruefungswoche": 1 + } + }, + { + "dozentenkennung": "492", + "termin": { + "datumText": "19.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 19, + "stunde": 11, + "minute": 0, + "wochentag": "FREITAG", + "pruefungswoche": 2 + } + }, + { + "dozentenkennung": "84399", + "termin": { + "datumText": "26.07.2024 16:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 26, + "stunde": 16, + "minute": 30, + "wochentag": "FREITAG", + "pruefungswoche": 3 + } + }, + { + "dozentenkennung": "38496", + "termin": { + "datumText": "05.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 5, + "stunde": 11, + "minute": 0, + "wochentag": "FREITAG", + "pruefungswoche": 0 + } + }, + { + "dozentenkennung": "62711", + "termin": { + "datumText": "04.07.2024 14:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 4, + "stunde": 14, + "minute": 0, + "wochentag": "DONNERSTAG", + "pruefungswoche": 0 + } + } + ] +} \ No newline at end of file diff --git a/Backend/pruefplan_parser/data/Pruefungen.json b/Backend/pruefplan_parser/data/Pruefungen.json new file mode 100644 index 0000000..77c50bb --- /dev/null +++ b/Backend/pruefplan_parser/data/Pruefungen.json @@ -0,0 +1,803 @@ +{ + "revision": "2648:2829M", + "array": [ + { + "kennung": "M1:SU:BEI:1", + "pruefungsart": "LN_STUDIENBEGLEITEND", + "termin": { + "datumText": "10.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 10, + "stunde": 11, + "minute": 0, + "wochentag": "MITTWOCH", + "pruefungswoche": 0 + }, + "teilpruefungen": [ + { + "kennung": "M1:SU:BEI:1", + "anzahlAnmeldungen": 63, + "fachkennungen": [ + "BEI:20141:1110" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "259", + "typ": "PRUEFER", + "raum": "BB.103", + "fachkennungen": [ + "BEI:20141:1110" + ] + }, + { + "dozentenkennung": "315", + "typ": "PRUEFER", + "raum": "KA.450", + "fachkennungen": [ + "BEI:20141:1110" + ] + }, + { + "dozentenkennung": "385", + "typ": "PRUEFER", + "raum": "BB.111", + "fachkennungen": [ + "BEI:20141:1110" + ] + }, + { + "dozentenkennung": "71655", + "typ": "PRUEFER", + "raum": "BB.103", + "fachkennungen": [ + "BEI:20141:1110" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "BMED:20141:5150:\"103,166\"_BMED:20141:5150:\"70901\"_BMED:20201:5150:\"103,166\"", + "pruefungsart": "PRUEFUNG", + "termin": { + "datumText": "11.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 11, + "stunde": 11, + "minute": 0, + "wochentag": "DONNERSTAG", + "pruefungswoche": 1 + }, + "teilpruefungen": [ + { + "kennung": "BMED:20141:5150:\"103,166\"", + "anzahlAnmeldungen": 5, + "fachkennungen": [ + "BMED:20141:5150" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "103", + "typ": "PRUEFER", + "raum": "KA.111", + "fachkennungen": [ + "BMED:20141:5150" + ] + }, + { + "dozentenkennung": "70901", + "typ": "PRUEFER", + "raum": "KA.213", + "fachkennungen": [ + "BMED:20141:5150" + ] + }, + { + "dozentenkennung": "166", + "typ": "PRUEFER", + "raum": "KA.111", + "fachkennungen": [ + "BMED:20141:5150" + ] + } + ] + }, + { + "kennung": "BMED:20141:5150:\"70901\"", + "anzahlAnmeldungen": 0, + "fachkennungen": [ + "BMED:20141:5150" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "103", + "typ": "PRUEFER", + "raum": "KA.111", + "fachkennungen": [ + "BMED:20141:5150" + ] + }, + { + "dozentenkennung": "70901", + "typ": "PRUEFER", + "raum": "KA.213", + "fachkennungen": [ + "BMED:20141:5150" + ] + }, + { + "dozentenkennung": "166", + "typ": "PRUEFER", + "raum": "KA.111", + "fachkennungen": [ + "BMED:20141:5150" + ] + } + ] + }, + { + "kennung": "BMED:20201:5150:\"103,166\"", + "anzahlAnmeldungen": 41, + "fachkennungen": [ + "BMED:20201:5150" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "103", + "typ": "PRUEFER", + "raum": "KA.111", + "fachkennungen": [ + "BMED:20201:5150" + ] + }, + { + "dozentenkennung": "70901", + "typ": "PRUEFER", + "raum": "KA.213", + "fachkennungen": [ + "BMED:20201:5150" + ] + }, + { + "dozentenkennung": "166", + "typ": "PRUEFER", + "raum": "KA.111", + "fachkennungen": [ + "BMED:20201:5150" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "MZ1PH:SU:BMED:2_PH:SU:BMED:2", + "pruefungsart": "PRUEFUNG", + "termin": { + "datumText": "24.07.2024 14:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 24, + "stunde": 14, + "minute": 0, + "wochentag": "MITTWOCH", + "pruefungswoche": 2 + }, + "teilpruefungen": [ + { + "kennung": "MZ1PH:SU:BMED:2", + "anzahlAnmeldungen": 2, + "fachkennungen": [ + "BMED:20141:1370" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "382", + "typ": "PRUEFER", + "raum": "KA.107", + "fachkennungen": [ + "BMED:20141:1370" + ] + }, + { + "dozentenkennung": "74090", + "typ": "PRUEFER", + "raum": "KA.107", + "fachkennungen": [ + "BMED:20141:1370" + ] + } + ] + }, + { + "kennung": "PH:SU:BMED:2", + "anzahlAnmeldungen": 101, + "fachkennungen": [ + "BMED:20201:1600" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "73247", + "typ": "PRUEFER", + "raum": "ML.034", + "fachkennungen": [ + "BMED:20201:1600" + ] + }, + { + "dozentenkennung": "316", + "typ": "PRUEFER", + "raum": "KA.140", + "fachkennungen": [ + "BMED:20201:1600" + ] + }, + { + "dozentenkennung": "49", + "typ": "AUFSICHT", + "raum": "ML.034", + "fachkennungen": [ + "BMED:20201:1600" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "126efi:WPF:EFI:0", + "pruefungsart": "LN_VORGEZOGEN", + "teilpruefungen": [], + "dozentenKennungPendler": "" + }, + { + "kennung": "MUK:SU:BME:6", + "pruefungsart": "PRUEFUNG", + "teilpruefungen": [ + { + "kennung": "MUK:SU:BME:6", + "anzahlAnmeldungen": 0, + "fachkennungen": [ + "BME:20131:4520" + ], + "pruefungsdurchfuehrungen": [] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "ET1:SU:BMF:1", + "pruefungsart": "LN_STUDIENBEGLEITEND", + "termin": { + "datumText": "03.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 3, + "stunde": 8, + "minute": 30, + "wochentag": "MITTWOCH", + "pruefungswoche": 0 + }, + "teilpruefungen": [ + { + "kennung": "ET1:SU:BMF:1", + "anzahlAnmeldungen": 12, + "fachkennungen": [ + "BMF:20171:1180" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "73630", + "typ": "PRUEFER", + "raum": "KH.108", + "fachkennungen": [ + "BMF:20171:1180" + ] + }, + { + "dozentenkennung": "576", + "typ": "PRUEFER", + "raum": "KH.108", + "fachkennungen": [ + "BMF:20171:1180" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "mAUT4#AB:SU:MSY:1", + "pruefungsart": "PRUEFUNG", + "termin": { + "datumText": "30.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 30, + "stunde": 11, + "minute": 0, + "wochentag": "DIENSTAG", + "pruefungswoche": 3 + }, + "teilpruefungen": [ + { + "kennung": "mAUT4#AB:SU:MSY:1", + "anzahlAnmeldungen": 31, + "fachkennungen": [ + "MAPR:20201:8425", + "MSY:20091:8425" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "219", + "typ": "PRUEFER", + "raum": "KA.213", + "fachkennungen": [ + "MAPR:20201:8425", + "MSY:20091:8425" + ] + }, + { + "dozentenkennung": "75398", + "typ": "PRUEFER", + "raum": "KA.213", + "fachkennungen": [ + "MAPR:20201:8425", + "MSY:20091:8425" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "MAPR:20201:5020:\"393,159,355\"", + "pruefungsart": "LN_VORGEZOGEN", + "teilpruefungen": [], + "dozentenKennungPendler": "" + }, + { + "kennung": "TO:SU:BMF:6_TO:SU:BMMF:4", + "pruefungsart": "PRUEFUNG", + "termin": { + "datumText": "13.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 13, + "stunde": 8, + "minute": 30, + "wochentag": "SAMSTAG", + "pruefungswoche": 1 + }, + "teilpruefungen": [ + { + "kennung": "TO:SU:BMMF:4", + "anzahlAnmeldungen": 30, + "fachkennungen": [ + "BMED:20141:5350", + "BMED:20201:5350" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "508", + "typ": "PRUEFER", + "raum": "KA.440", + "fachkennungen": [ + "BMED:20141:5350", + "BMED:20201:5350" + ] + }, + { + "dozentenkennung": "585", + "typ": "PRUEFER", + "raum": "KA.107", + "fachkennungen": [ + "BMED:20141:5350", + "BMED:20201:5350" + ] + } + ] + }, + { + "kennung": "TO:SU:BMF:6", + "anzahlAnmeldungen": 29, + "fachkennungen": [ + "BMF:20171:4130" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "508", + "typ": "PRUEFER", + "raum": "KA.440", + "fachkennungen": [ + "BMF:20171:4130" + ] + }, + { + "dozentenkennung": "585", + "typ": "PRUEFER", + "raum": "KA.107", + "fachkennungen": [ + "BMF:20171:4130" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "M1:SU:BMED:1", + "pruefungsart": "LN_STUDIENBEGLEITEND", + "termin": { + "datumText": "10.07.2024 16:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 10, + "stunde": 16, + "minute": 30, + "wochentag": "MITTWOCH", + "pruefungswoche": 0 + }, + "teilpruefungen": [ + { + "kennung": "M1:SU:BMED:1", + "anzahlAnmeldungen": 35, + "fachkennungen": [ + "BMED:20141:1210", + "BMED:20201:1510" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "73998", + "typ": "PRUEFER", + "raum": "MC.100", + "fachkennungen": [ + "BMED:20141:1210", + "BMED:20201:1510" + ] + }, + { + "dozentenkennung": "259", + "typ": "PRUEFER", + "raum": "MC.100", + "fachkennungen": [ + "BMED:20141:1210", + "BMED:20201:1510" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "FO:SU:BME:2", + "pruefungsart": "LN_VORGEZOGEN", + "teilpruefungen": [], + "dozentenKennungPendler": "" + }, + { + "kennung": "BW:SU:BEI:5", + "pruefungsart": "PRUEFUNG", + "termin": { + "datumText": "11.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 11, + "stunde": 8, + "minute": 30, + "wochentag": "DONNERSTAG", + "pruefungswoche": 1 + }, + "teilpruefungen": [ + { + "kennung": "BW:SU:BEI:5", + "anzahlAnmeldungen": 49, + "fachkennungen": [ + "BEI:20141:3800" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "74065", + "typ": "PRUEFER", + "raum": "MC.100", + "fachkennungen": [ + "BEI:20141:3800" + ] + }, + { + "dozentenkennung": "376", + "typ": "AUFSICHT", + "raum": "KA.111", + "fachkennungen": [ + "BEI:20141:3800" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "MAPR:20201:5810:\"472,60104\"", + "pruefungsart": "LN_VORGEZOGEN", + "teilpruefungen": [], + "dozentenKennungPendler": "" + }, + { + "kennung": "MK:SU:BMF:4", + "pruefungsart": "PRUEFUNG", + "termin": { + "datumText": "26.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 26, + "stunde": 8, + "minute": 30, + "wochentag": "FREITAG", + "pruefungswoche": 3 + }, + "teilpruefungen": [ + { + "kennung": "MK:SU:BMF:4", + "anzahlAnmeldungen": 43, + "fachkennungen": [ + "BMF:20171:4070" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "350", + "typ": "PRUEFER", + "raum": "MC.100", + "fachkennungen": [ + "BMF:20171:4070" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "024efi:WPF:EFI:0", + "pruefungsart": "LN_VORGEZOGEN", + "teilpruefungen": [], + "dozentenKennungPendler": "" + }, + { + "kennung": "ELK1:SU:BEI:3_IBT:20141:6160:\"166\"", + "pruefungsart": "PRUEFUNG", + "termin": { + "datumText": "27.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 27, + "stunde": 11, + "minute": 0, + "wochentag": "SAMSTAG", + "pruefungswoche": 3 + }, + "teilpruefungen": [ + { + "kennung": "ELK1:SU:BEI:3", + "anzahlAnmeldungen": 36, + "fachkennungen": [ + "BEI:20141:5120", + "BMED:20141:5120" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "166", + "typ": "PRUEFER", + "raum": "MC.100", + "fachkennungen": [ + "BEI:20141:5120", + "BMED:20141:5120" + ] + } + ] + }, + { + "kennung": "IBT:20141:6160:\"166\"", + "anzahlAnmeldungen": 6, + "fachkennungen": [ + "IBT:20141:6160" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "166", + "typ": "PRUEFER", + "raum": "MC.100", + "fachkennungen": [ + "IBT:20141:6160" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "mINF6/1:SU:MSY:2", + "pruefungsart": "PRUEFUNG", + "teilpruefungen": [ + { + "kennung": "mINF6/1:SU:MSY:2", + "anzahlAnmeldungen": 2, + "fachkennungen": [ + "MAPR:20201:8835", + "MSY:20091:8835" + ], + "pruefungsdurchfuehrungen": [] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "MSY:20091:8361:\"49,75807\"", + "pruefungsart": "PRUEFUNG", + "termin": { + "datumText": "15.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 15, + "stunde": 8, + "minute": 30, + "wochentag": "MONTAG", + "pruefungswoche": 1 + }, + "teilpruefungen": [ + { + "kennung": "MSY:20091:8361:\"49,75807\"", + "anzahlAnmeldungen": 8, + "fachkennungen": [ + "MSY:20091:8361" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "75807", + "typ": "PRUEFER", + "raum": "KA.217", + "fachkennungen": [ + "MSY:20091:8361" + ] + }, + { + "dozentenkennung": "49", + "typ": "PRUEFER", + "raum": "KA.217", + "fachkennungen": [ + "MSY:20091:8361" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "ET2:SU:BMF:2", + "pruefungsart": "PRUEFUNG", + "termin": { + "datumText": "19.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 19, + "stunde": 8, + "minute": 30, + "wochentag": "FREITAG", + "pruefungswoche": 2 + }, + "teilpruefungen": [ + { + "kennung": "ET2:SU:BMF:2", + "anzahlAnmeldungen": 61, + "fachkennungen": [ + "BMF:20171:1190" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "73630", + "typ": "PRUEFER", + "raum": "BB.103", + "fachkennungen": [ + "BMF:20171:1190" + ] + }, + { + "dozentenkennung": "492", + "typ": "PRUEFER", + "raum": "SP.467", + "fachkennungen": [ + "BMF:20171:1190" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + }, + { + "kennung": "I2#AB:SU:BEI:3", + "pruefungsart": "LN_STUDIENBEGLEITEND", + "termin": { + "datumText": "04.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 4, + "stunde": 11, + "minute": 0, + "wochentag": "DONNERSTAG", + "pruefungswoche": 0 + }, + "teilpruefungen": [ + { + "kennung": "I2#AB:SU:BEI:3", + "anzahlAnmeldungen": 63, + "fachkennungen": [ + "BEI:20141:5160", + "BEI:20141:5160", + "BMED:20141:5160", + "BMED:20141:5160" + ], + "pruefungsdurchfuehrungen": [ + { + "dozentenkennung": "84399", + "typ": "PRUEFER", + "raum": "BB.103", + "fachkennungen": [ + "BEI:20141:5160", + "BEI:20141:5160", + "BMED:20141:5160", + "BMED:20141:5160" + ] + }, + { + "dozentenkennung": "38496", + "typ": "PRUEFER", + "raum": "KA.450", + "fachkennungen": [ + "BEI:20141:5160", + "BEI:20141:5160", + "BMED:20141:5160", + "BMED:20141:5160" + ] + }, + { + "dozentenkennung": "62711", + "typ": "PRUEFER", + "raum": "BB.210", + "fachkennungen": [ + "BEI:20141:5160", + "BEI:20141:5160", + "BMED:20141:5160", + "BMED:20141:5160" + ] + }, + { + "dozentenkennung": "73323", + "typ": "PRUEFER", + "raum": "BB.103", + "fachkennungen": [ + "BEI:20141:5160", + "BEI:20141:5160", + "BMED:20141:5160", + "BMED:20141:5160" + ] + } + ] + } + ], + "dozentenKennungPendler": "" + } + ] +} \ No newline at end of file diff --git a/Backend/pruefplan_parser/data/READ.ME b/Backend/pruefplan_parser/data/READ.ME new file mode 100644 index 0000000..8fdd484 --- /dev/null +++ b/Backend/pruefplan_parser/data/READ.ME @@ -0,0 +1 @@ +Hier landen die hochgeladenen Dateien \ No newline at end of file diff --git a/Backend/pruefplan_parser/data/Saaleinteilung.json b/Backend/pruefplan_parser/data/Saaleinteilung.json new file mode 100644 index 0000000..47b0839 --- /dev/null +++ b/Backend/pruefplan_parser/data/Saaleinteilung.json @@ -0,0 +1,577 @@ +{ + "revision": "2648:2829M", + "array": [ + { + "kennungPruefung": "M1:SU:BEI:1", + "termin": { + "datumText": "10.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 10, + "stunde": 11, + "minute": 0, + "wochentag": "MITTWOCH", + "pruefungswoche": 0 + }, + "raum": "KA.450", + "kennungFaecher": [ + "BEI:20141:1110" + ], + "matrikel": [ + 3752511, + 3743531, + 3726002, + 3756960, + 3682959, + 3747191, + 3726312, + 3727575, + 3677443, + 3724433, + 3724165, + 3748172, + 3726338, + 3671524, + 3684924, + 3571059, + 3725229, + 3678411, + 3726268, + 3303621, + 3732643 + ] + }, + { + "kennungPruefung": "BMED:20141:5150:\"103,166\"_BMED:20141:5150:\"70901\"_BMED:20201:5150:\"103,166\"", + "termin": { + "datumText": "11.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 11, + "stunde": 11, + "minute": 0, + "wochentag": "DONNERSTAG", + "pruefungswoche": 1 + }, + "raum": "KA.213", + "kennungFaecher": [ + "BMED:20141:5150", + "BMED:20141:5150", + "BMED:20201:5150" + ], + "matrikel": [ + 3691111, + 3503148, + 3680786, + 3670499, + 3634750, + 3706613, + 3527650, + 3645338, + 3706064, + 3674877, + 3291852, + 3676053, + 3578540, + 3690651, + 3621462, + 3623453, + 3623581, + 3673432, + 2747059, + 3569726, + 3673458, + 3535000, + 3623411 + ] + }, + { + "kennungPruefung": "MZ1PH:SU:BMED:2_PH:SU:BMED:2", + "termin": { + "datumText": "24.07.2024 14:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 24, + "stunde": 14, + "minute": 0, + "wochentag": "MITTWOCH", + "pruefungswoche": 2 + }, + "raum": "KA.107", + "kennungFaecher": [ + "BMED:20141:1370" + ], + "matrikel": [ + 3504398, + 3516845 + ] + }, + { + "kennungPruefung": "ET1:SU:BMF:1", + "termin": { + "datumText": "03.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 3, + "stunde": 8, + "minute": 30, + "wochentag": "MITTWOCH", + "pruefungswoche": 0 + }, + "raum": "KH.108", + "kennungFaecher": [ + "BMF:20171:1180" + ], + "matrikel": [ + 3584222, + 3569599, + 3565942, + 3749645, + 3756449, + 3698347, + 3628502, + 3182142, + 3673742, + 3719352, + 3693298, + 3756564 + ] + }, + { + "kennungPruefung": "mAUT4#AB:SU:MSY:1", + "termin": { + "datumText": "30.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 30, + "stunde": 11, + "minute": 0, + "wochentag": "DIENSTAG", + "pruefungswoche": 3 + }, + "raum": "KA.213", + "kennungFaecher": [ + "MAPR:20201:8425", + "MSY:20091:8425" + ], + "matrikel": [ + 3716009, + 3518430, + 3506909, + 3513240, + 3503119, + 3724136, + 3767142, + 3767155, + 3707610, + 3508565, + 3503429, + 3581599, + 3754052, + 3516832, + 3772463, + 3508680, + 3505960, + 3569630, + 3577853, + 3244724, + 3502563, + 3503094, + 3580352, + 3164060, + 3502873, + 3559848, + 3723960, + 3758612, + 3513224, + 3289528, + 3768800 + ] + }, + { + "kennungPruefung": "TO:SU:BMF:6_TO:SU:BMMF:4", + "termin": { + "datumText": "13.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 13, + "stunde": 8, + "minute": 30, + "wochentag": "SAMSTAG", + "pruefungswoche": 1 + }, + "raum": "KA.107", + "kennungFaecher": [ + "BMED:20141:5350", + "BMED:20201:5350", + "BMF:20171:4130" + ], + "matrikel": [ + 3622836, + 3574261, + 3529162, + 3617023, + 3616170, + 3615636, + 3629947, + 3584699, + 3624405, + 3556537, + 3616138, + 3513422, + 3619874, + 3621178, + 3623929, + 2984098, + 2931071, + 3513266, + 2267607 + ] + }, + { + "kennungPruefung": "M1:SU:BMED:1", + "termin": { + "datumText": "10.07.2024 16:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 10, + "stunde": 16, + "minute": 30, + "wochentag": "MITTWOCH", + "pruefungswoche": 0 + }, + "raum": "MC.100", + "kennungFaecher": [ + "BMED:20141:1210", + "BMED:20201:1510" + ], + "matrikel": [ + 3733583, + 3746008, + 3751361, + 3673445, + 3739767, + 3749629, + 3719307, + 3742617, + 3740220, + 3720860, + 3721838, + 3504653, + 3754586, + 3726479, + 3561069, + 3727869, + 3740275, + 3728051, + 3724967, + 3512920, + 3581490, + 3711062, + 3759862, + 3649154, + 3756551, + 3636093, + 3719266, + 3635348, + 3719563, + 3727393, + 3761041, + 3691393, + 3638266, + 3633414, + 3622852 + ] + }, + { + "kennungPruefung": "BW:SU:BEI:5", + "termin": { + "datumText": "11.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 11, + "stunde": 8, + "minute": 30, + "wochentag": "DONNERSTAG", + "pruefungswoche": 1 + }, + "raum": "MC.100", + "kennungFaecher": [ + "BEI:20141:3800" + ], + "matrikel": [ + 3616675, + 3647725, + 3627406, + 3572030, + 3235621, + 3161199, + 3512045, + 3628672, + 3308517, + 3235250, + 3634396, + 3616703, + 3627381, + 3085850, + 3620436, + 3622159, + 3569205, + 3628205, + 3263104, + 3516957, + 3628630, + 3615850, + 3647866, + 3627419, + 3641161, + 3627831, + 3622191, + 3017956 + ] + }, + { + "kennungPruefung": "MK:SU:BMF:4", + "termin": { + "datumText": "26.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 26, + "stunde": 8, + "minute": 30, + "wochentag": "FREITAG", + "pruefungswoche": 3 + }, + "raum": "MC.100", + "kennungFaecher": [ + "BMF:20171:4070" + ], + "matrikel": [ + 3544163, + 3643800, + 3621545, + 3668827, + 3569599, + 3678479, + 3246109, + 3698350, + 3583791, + 3678437, + 3693511, + 3619902, + 3699683, + 3733244, + 3627394, + 3667523, + 3700385, + 3678226, + 3698839, + 3678495, + 3036482, + 3678440, + 3684474, + 3664621, + 3698347, + 3693243, + 3564309, + 3629947, + 3584699, + 3645721, + 3687433, + 3693269, + 3678242, + 3638914, + 3619874, + 3678424, + 3234192, + 3682438, + 3669428, + 3665967, + 3693272, + 3706626, + 3665222 + ] + }, + { + "kennungPruefung": "ELK1:SU:BEI:3_IBT:20141:6160:\"166\"", + "termin": { + "datumText": "27.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 27, + "stunde": 11, + "minute": 0, + "wochentag": "SAMSTAG", + "pruefungswoche": 3 + }, + "raum": "MC.100", + "kennungFaecher": [ + "BEI:20141:5120", + "BMED:20141:5120", + "IBT:20141:6160" + ], + "matrikel": [ + 3569979, + 3647684, + 3572030, + 3633737, + 3530133, + 3509559, + 3627381, + 3085850, + 3706121, + 3670064, + 3513381, + 3263104, + 3670402, + 3670936, + 3536119, + 3692598, + 3615272, + 3692639, + 3692668, + 3671962, + 3667932, + 3672617, + 3692837, + 3674822, + 3671805, + 3513026, + 3670051, + 3693214, + 3577712, + 3668517, + 3673586, + 3672068, + 3702392, + 3722314, + 3645792, + 3534748, + 3638394, + 3305701, + 3291335, + 3637256, + 3589933, + 3589988 + ] + }, + { + "kennungPruefung": "MSY:20091:8361:\"49,75807\"", + "termin": { + "datumText": "15.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 15, + "stunde": 8, + "minute": 30, + "wochentag": "MONTAG", + "pruefungswoche": 1 + }, + "raum": "KA.217", + "kennungFaecher": [ + "MSY:20091:8361" + ], + "matrikel": [ + 3581599, + 2761145, + 3132088, + 3757011, + 2694152, + 3768798, + 3713545, + 3506826 + ] + }, + { + "kennungPruefung": "ET2:SU:BMF:2", + "termin": { + "datumText": "19.07.2024 08:30 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 19, + "stunde": 8, + "minute": 30, + "wochentag": "FREITAG", + "pruefungswoche": 2 + }, + "raum": "SP.467", + "kennungFaecher": [ + "BMF:20171:1190" + ], + "matrikel": [ + 3726495, + 3756449, + 3721148, + 3664621, + 3721825, + 3698347, + 3628502, + 3720831, + 3182142, + 3742505, + 3250956, + 3720901, + 3688315, + 3719253, + 3720844, + 3673742, + 3513422, + 3726239, + 3719237, + 3753899, + 2984098, + 3234192, + 3719352, + 3257531, + 3693298, + 3198761, + 3756564, + 3726099, + 3719914 + ] + }, + { + "kennungPruefung": "I2#AB:SU:BEI:3", + "termin": { + "datumText": "04.07.2024 11:00 MESZ", + "jahr": 2024, + "monat": 7, + "tag": 4, + "stunde": 11, + "minute": 0, + "wochentag": "DONNERSTAG", + "pruefungswoche": 0 + }, + "raum": "KA.450", + "kennungFaecher": [ + "BEI:20141:5160", + "BEI:20141:5160", + "BMED:20141:5160", + "BMED:20141:5160" + ], + "matrikel": [ + 3641161, + 3670936, + 3565575, + 3536119, + 3570982, + 3615272, + 3692613, + 3570627, + 3629017, + 3590623, + 3629033, + 3667932, + 3706118, + 3702389, + 3630286, + 3283310, + 3715284, + 3671087, + 3271030, + 3674822, + 3665277 + ] + } + ] +} \ No newline at end of file diff --git a/Backend/pruefplan_parser/forms.py b/Backend/pruefplan_parser/forms.py new file mode 100644 index 0000000..89205ab --- /dev/null +++ b/Backend/pruefplan_parser/forms.py @@ -0,0 +1,9 @@ +from django import forms + + +class UploadFileForm(forms.Form): + student_file = forms.FileField(required=False) + exams_file = forms.FileField(required=False) + lecturers_file = forms.FileField(required=False) + subjects_file = forms.FileField(required=False) + attendance_file = forms.FileField(required=False) diff --git a/Backend/pruefplan_parser/migrations/0001_initial.py b/Backend/pruefplan_parser/migrations/0001_initial.py new file mode 100644 index 0000000..7d26b59 --- /dev/null +++ b/Backend/pruefplan_parser/migrations/0001_initial.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2 on 2021-04-30 12:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='JsonParser', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + ), + ] diff --git a/Backend/pruefplan_parser/migrations/__init__.py b/Backend/pruefplan_parser/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/pruefplan_parser/models.py b/Backend/pruefplan_parser/models.py new file mode 100644 index 0000000..453938f --- /dev/null +++ b/Backend/pruefplan_parser/models.py @@ -0,0 +1,454 @@ +import inspect +from django.db import models + +from medinf.settings import ( + PP_EXAM_FILE, + PP_ATTENDANCE_FILE, + PP_STUDENT_FILE, + PP_SUBJECT_FILE, + PP_TEACHER_FILE, +) +from pruefplan_viewer.models import ( + API_ExamDataSet_ForStudent, + Attendance, + Subject, + Exam, + Lecturer, + PartialExam, + ExamExecution, + Student, + StudentExam, +) +import json +import datetime + + +class JsonParser(models.Model): + exceptionMessages = [] + warningMessages = [] + + def clearTable(self): + JsonParser.exceptionMessages.clear() + JsonParser.warningMessages.clear() + + Subject.objects.all().delete() + Exam.objects.all().delete() + Attendance.objects.all().delete() + Lecturer.objects.all().delete() + Student.objects.all().delete() + PartialExam.objects.all().delete() + ExamExecution.objects.all().delete() + StudentExam.objects.all().delete() + API_ExamDataSet_ForStudent.objects.all().delete() + + def fillLecturerTable(self): + idKey = "kennung" + firstNameKey = "vorname" + lastNameKey = "nachname" + titleKey = "titel" + + try: + with open(PP_TEACHER_FILE, encoding="utf-8") as json_file: + data = json.load(json_file) + revision = data["revision"] # TODO -> Do Something with Revision + for d in data["array"]: + entry = Lecturer( + identification=d[idKey], + firstName=d[firstNameKey], + lastName=d[lastNameKey], + title=d[titleKey], + ) # Create new Lecturer entry + entry.save() + except FileNotFoundError as e: + JsonParser.exceptionMessages.append( + "Exception of type [FileNotFound]. Message: " + str(e) + ) + except KeyError as e: + calling_function = inspect.stack()[0][3] + iteration_number = data["array"].index(d) + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing in {5!r}" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + PP_TEACHER_FILE, + ) + JsonParser.exceptionMessages.append(message) + except Exception as e: + calling_function = inspect.stack()[0][3] + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) + + def fillAttendanceTable(self): + idKey = "dozentenkennung" + yearKey = "jahr" + monthKey = "monat" + dayKey = "tag" + hourKey = "stunde" + minuteKey = "minute" + weekdayKey = "wochentag" + dateKey = "termin" + + try: + with open(PP_ATTENDANCE_FILE, encoding="utf-8") as json_file: + data = json.load(json_file) + revision = data["revision"] # TODO -> Do Something with Revision + for d in data["array"]: + + keyAvailable = "termin" in d + if ( + not keyAvailable + ): # These attendance entries were not assigned any examination date + template = "Warning. Location: {0!r}. Following Exam was not assigned any examination date ['termin']: [{1}]" + message = template.format(PP_EXAM_FILE, d[idKey]) + JsonParser.warningMessages.append(message) + continue + + date = datetime.date( + d[dateKey][yearKey], d[dateKey][monthKey], d[dateKey][dayKey] + ) + time = datetime.time(d[dateKey][hourKey], d[dateKey][minuteKey]) + + entry = Attendance( + identification=d[idKey], + time=time, + date=date, + dateTimeText=d[dateKey]["datumText"], + weekday=d[dateKey]["wochentag"], + ) # Create new Lecturer entry + entry.save() + + try: + # Get the Lecturer with the "Dozentenkennung" of this attendance entry + lecturer = Lecturer.objects.get(identification=d[idKey]) + + # Link this attendance entry to the lecturer + lecturer.attendance_set.add(entry) + except Exception as e: + template = "Exception of type [{0}]. Arguments: {1!r}. Message: [{2}] entry might be missing in {3!r}" + message = template.format( + type(e).__name__, e.args, idKey, PP_TEACHER_FILE + ) + JsonParser.exceptionMessages.append(message) + + except FileNotFoundError as e: + JsonParser.exceptionMessages.append( + "Exception of type [FileNotFound]. Message: " + str(e) + ) + except KeyError as e: + calling_function = inspect.stack()[0][3] + iteration_number = data["array"].index(d) + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing in {5!r}" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + PP_ATTENDANCE_FILE, + ) + JsonParser.exceptionMessages.append(message) + except Exception as e: + calling_function = inspect.stack()[0][3] + iteration_number = data["array"].index(d) + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) + + def fillSubjectTable(self): + idKey = "kennung" + initialsKey = "kurztext" + nameKey = "langtext" + ohmIdKey = "fachkennungOhm" + + try: + with open(PP_SUBJECT_FILE, encoding="utf-8") as json_file: + data = json.load(json_file) + revision = data["revision"] # TODO -> Do Something with Revision + for d in data["array"]: + + entry = Subject( + identification=d[idKey], + initials=d[ohmIdKey][initialsKey], + name=d[ohmIdKey][nameKey], + ) # Create new Subject entry + entry.save() + + except FileNotFoundError as e: + JsonParser.exceptionMessages.append( + "Exception of type [FileNotFound]. Message:" + str(e) + ) + except KeyError as e: + calling_function = inspect.stack()[0][3] + iteration_number = data["array"].index(d) + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing in {5!r}" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + PP_SUBJECT_FILE, + ) + JsonParser.exceptionMessages.append(message) + except Exception as e: + calling_function = inspect.stack()[0][3] + iteration_number = data["array"].index(d) + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) + + def fillExamTable(self): + idKey = "kennung" + yearKey = "jahr" + monthKey = "monat" + dayKey = "tag" + hourKey = "stunde" + minuteKey = "minute" + weekdayKey = "wochentag" + dateKey = "termin" + partialExamsKey = "teilpruefungen" + partialExamIdKey = "kennung" + numRegStudKey = "anzahlAnmeldungen" + subjectIdsKey = "fachkennungen" + examExecutionsKey = "pruefungsdurchfuehrungen" + lecturerIdKey = "dozentenkennung" + supervisorTypeKey = "typ" + locationKey = "raum" + + try: + with open(PP_EXAM_FILE, encoding="utf-8") as json_file: + data = json.load(json_file) + revision = data["revision"] # TODO -> Do Something with Revision + for d in data["array"]: + + if ( + d["pruefungsart"] == "LN_VORGEZOGEN" + ): # These entries can be ignored + continue + + keyAvailable = "termin" in d + if ( + not keyAvailable + ): # These exam entries were not assigned any examination date + template = "Warning. Location: {0!r}. Following Exam was not assigned any examination date ['termin']: [{1}]" + message = template.format(PP_EXAM_FILE, d[idKey]) + JsonParser.warningMessages.append(message) + continue + + date = datetime.date( + d[dateKey][yearKey], d[dateKey][monthKey], d[dateKey][dayKey] + ) + time = datetime.time(d[dateKey][hourKey], d[dateKey][minuteKey]) + + examEntry = Exam( + identification=d[idKey], + date=date, + time=time, + weekday=d[dateKey][weekdayKey], + ) # Create new Exam entry + examEntry.save() + + for teilpruef in d[partialExamsKey]: + partialExamId = teilpruef[partialExamIdKey] + regStudCount = teilpruef[numRegStudKey] + + partialExam = PartialExam( + identification=partialExamId, regStudCount=regStudCount + ) # Create new Partialexam entry + partialExam.save() + + examEntry.partialexam_set.add( + partialExam + ) # Add connection Exam(One) to PartialExam(Many) + + for subId in teilpruef[subjectIdsKey]: + # check if subject exists + try: + subject = Subject.objects.get(identification=subId) + partialExam.subjectIds.add( + subject + ) # Add connection PartialExam(Many) to Subject(Many) + except Exception as e: + template = "Exception of type [{0}]. Arguments: {1!r}. Message: [{2}] entry might be missing in {3!r}" + message = template.format( + type(e).__name__, e.args, subId, PP_SUBJECT_FILE + ) + JsonParser.exceptionMessages.append(message) + + for pruefdurch in teilpruef[examExecutionsKey]: + lecId = pruefdurch[lecturerIdKey] + supervisorType = pruefdurch[supervisorTypeKey] + location = pruefdurch[locationKey] + + examExecution = ExamExecution( + supervisorType=supervisorType, location=location + ) # Create new ExamExecution entry + examExecution.save() + + # check if lecturer exists + try: + lecturer = Lecturer.objects.get(pk=lecId) + lecturer.examexecution_set.add( + examExecution + ) # Add connection Lecturer (One) to ExamExecution (Many) + except Exception as e: + template = "Exception of type [{0}]. Arguments: {1!r}. Message: [{2}] entry might be missing in {3!r}" + message = template.format( + type(e).__name__, e.args, lecId, PP_TEACHER_FILE + ) + JsonParser.exceptionMessages.append(message) + + for subId in pruefdurch[subjectIdsKey]: + # check if subject exists + try: + subject = Subject.objects.get(identification=subId) + examExecution.subjectIds.add( + subject + ) # Add connection ExamExecution(Many) to Subject(Many) + except Exception as e: + template = "Exception of type [{0}]. Arguments: {1!r}. Message: [{2}] entry might be missing in {3!r}" + message = template.format( + type(e).__name__, e.args, subId, PP_SUBJECT_FILE + ) + JsonParser.exceptionMessages.append(message) + + partialExam.examexecution_set.add( + examExecution + ) # Add connection PartialExam(One) to ExamExecution(Many) + except FileNotFoundError as e: + JsonParser.exceptionMessages.append( + "Exception of type [FileNotFound]. Message" + str(e) + ) + except KeyError as e: + calling_function = inspect.stack()[0][3] + iteration_number = data["array"].index(d) + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing in {5!r}" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + PP_EXAM_FILE, + ) + JsonParser.exceptionMessages.append(message) + except Exception as e: + calling_function = inspect.stack()[0][3] + iteration_number = data["array"].index(d) + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) + + def fillStudentExamTable(self): + idKey = "kennungPruefung" + yearKey = "jahr" + monthKey = "monat" + dayKey = "tag" + hourKey = "stunde" + minuteKey = "minute" + weekdayKey = "wochentag" + locationKey = "raum" + dateKey = "termin" + matrikelKey = "matrikel" + + try: + with open(PP_STUDENT_FILE, encoding="utf-8") as json_file: + data = json.load(json_file) + revision = data["revision"] # TODO -> Do Something with Revision + for d in data["array"]: + + date = datetime.date( + d[dateKey][yearKey], d[dateKey][monthKey], d[dateKey][dayKey] + ) + time = datetime.time(d[dateKey][hourKey], d[dateKey][minuteKey]) + + exam = Exam.objects.filter( + identification=d[idKey], date=date, time=time + ).first() + + partialExams = exam.partialexam_set.all() + for partialExam in partialExams: + examExecutions = partialExam.examexecution_set.all() + for examExecution in examExecutions: + if examExecution.location == d[locationKey]: + studentExamEntry = StudentExam( + examIdentification=d[idKey], + date=date, + time=time, + weekday=d[dateKey][weekdayKey], + location=d[locationKey], + examExecution=examExecution, + ) # Create new StudentExam entry + studentExamEntry.save() + + for matrikel in d[matrikelKey]: + studentEntry = Student.objects.filter( + matrikel=matrikel + ).exists() + if ( + studentEntry is False + ): # Create new Student entry if does not already exists + entry = Student(matrikel=matrikel) + entry.save() + else: + entry = ( + Student.objects.all().filter(matrikel=matrikel).first() + ) + entry.exams.add(studentExamEntry) + except FileNotFoundError as e: + JsonParser.exceptionMessages.append( + "Exception of type [FileNotFound]. Message:" + str(e) + ) + except KeyError as e: + calling_function = inspect.stack()[0][3] + iteration_number = data["array"].index(d) + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop.. Arguments: {3!r}. Message: [{4}] entry might be missing in {5!r}" + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e, + PP_STUDENT_FILE, + ) + JsonParser.exceptionMessages.append(message) + except Exception as e: + calling_function = inspect.stack()[0][3] + iteration_number = data["array"].index(d) + template = "Exception of type [{0}] occurred in function {1} in iteration {2} of the loop. Arguments: {3!r}. Message: {4}." + message = template.format( + type(e).__name__, + calling_function, + iteration_number, + e.args, + e.__str__(), + ) + JsonParser.exceptionMessages.append(message) diff --git a/Backend/pruefplan_parser/urls.py b/Backend/pruefplan_parser/urls.py new file mode 100644 index 0000000..ad997ab --- /dev/null +++ b/Backend/pruefplan_parser/urls.py @@ -0,0 +1,10 @@ +from django.urls import path +from . import views + +app_name = 'pp_parser' + +urlpatterns = [ + path('parse', views.parse, name='parse'), + path('clearTable', views.clearTable, name='clearTable'), + path('upload_file', views.upload_file, name='upload_file'), +] \ No newline at end of file diff --git a/Backend/pruefplan_parser/utils.py b/Backend/pruefplan_parser/utils.py new file mode 100644 index 0000000..80b02d9 --- /dev/null +++ b/Backend/pruefplan_parser/utils.py @@ -0,0 +1,7 @@ + + +def handle_uploaded_file(f, location): + if f is not None: + with open(location, 'wb+') as destination: + for chunk in f.chunks(): + destination.write(chunk) \ No newline at end of file diff --git a/Backend/pruefplan_parser/views.py b/Backend/pruefplan_parser/views.py new file mode 100644 index 0000000..a67626f --- /dev/null +++ b/Backend/pruefplan_parser/views.py @@ -0,0 +1,65 @@ +from django.shortcuts import render +from .models import JsonParser +from pruefplan_parser.models import JsonParser +from django.shortcuts import render +from django.contrib.auth.decorators import user_passes_test +from .forms import UploadFileForm +from pruefplan_parser.utils import handle_uploaded_file +from medinf.settings import ( + PP_EXAM_FILE, + PP_ATTENDANCE_FILE, + PP_STUDENT_FILE, + PP_SUBJECT_FILE, + PP_TEACHER_FILE, +) + + +def is_pp_admin(user): + return user.groups.filter(name="PP_ADMIN").exists() + + +def parse(): + parser = JsonParser() + parser.clearTable() + parser.fillLecturerTable() + parser.fillAttendanceTable() + parser.fillSubjectTable() + parser.fillExamTable() + parser.fillStudentExamTable() + + +@user_passes_test(is_pp_admin) +def clearTable(request): + parser = JsonParser() + parser.clearTable() + return render(request, "pruefplan/clearTable.html") + + +@user_passes_test(is_pp_admin) +def upload_file(request): + if request.method == "POST": + form = UploadFileForm(request.POST, request.FILES) + if form.is_valid(): + print(request.FILES) + handle_uploaded_file( + request.FILES.get("attendance_file"), PP_ATTENDANCE_FILE + ) + handle_uploaded_file(request.FILES.get("student_file"), PP_STUDENT_FILE) + handle_uploaded_file(request.FILES.get("exams_file"), PP_EXAM_FILE) + handle_uploaded_file(request.FILES.get("lecturers_file"), PP_TEACHER_FILE) + handle_uploaded_file(request.FILES.get("subjects_file"), PP_SUBJECT_FILE) + parse() + if ( + len(JsonParser.exceptionMessages) != 0 + or len(JsonParser.warningMessages) != 0 + ): + context = { + "exceptions": JsonParser.exceptionMessages, + "warnings": JsonParser.warningMessages, + } + return render(request, "pruefplan/exceptionHandling.html", context) + else: + return render(request, "pruefplan/parse.html") + else: + form = UploadFileForm() + return render(request, "pruefplan/upload.html", {"form": form}) diff --git a/Backend/pruefplan_viewer/__init__.py b/Backend/pruefplan_viewer/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/pruefplan_viewer/admin.py b/Backend/pruefplan_viewer/admin.py new file mode 100644 index 0000000..6737b97 --- /dev/null +++ b/Backend/pruefplan_viewer/admin.py @@ -0,0 +1,4 @@ +#from django.contrib import admin +#from .models import Lecturer + +#admin.site.register(Lecturer) \ No newline at end of file diff --git a/Backend/pruefplan_viewer/apps.py b/Backend/pruefplan_viewer/apps.py new file mode 100644 index 0000000..e1f3ced --- /dev/null +++ b/Backend/pruefplan_viewer/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class PruefplanViewerConfig(AppConfig): + name = 'pruefplan_viewer' diff --git a/Backend/pruefplan_viewer/migrations/0001_initial.py b/Backend/pruefplan_viewer/migrations/0001_initial.py new file mode 100644 index 0000000..d1a86c6 --- /dev/null +++ b/Backend/pruefplan_viewer/migrations/0001_initial.py @@ -0,0 +1,94 @@ +# Generated by Django 3.2 on 2021-04-30 12:03 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Exam', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('identification', models.CharField(max_length=200, null=True)), + ('date', models.DateField(blank=True, null=True)), + ('time', models.TimeField(blank=True, null=True)), + ('weekday', models.CharField(max_length=200, null=True)), + ], + ), + migrations.CreateModel( + name='ExamExecution', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('supervisorType', models.CharField(max_length=200, null=True)), + ('location', models.CharField(max_length=200, null=True)), + ], + ), + migrations.CreateModel( + name='Lecturer', + fields=[ + ('identification', models.CharField(max_length=200, primary_key=True, serialize=False)), + ('firstName', models.CharField(max_length=200, null=True)), + ('lastName', models.CharField(max_length=200, null=True)), + ('title', models.CharField(max_length=200, null=True)), + ], + ), + migrations.CreateModel( + name='Subject', + fields=[ + ('identification', models.CharField(max_length=200, primary_key=True, serialize=False)), + ('initials', models.CharField(max_length=200, null=True)), + ('name', models.CharField(max_length=200, null=True)), + ], + ), + migrations.CreateModel( + name='StudentExam', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('examIdentification', models.CharField(max_length=200, null=True)), + ('date', models.DateField(blank=True, null=True)), + ('time', models.TimeField(blank=True, null=True)), + ('weekday', models.CharField(max_length=200, null=True)), + ('location', models.CharField(max_length=200, null=True)), + ('examExecution', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pruefplan_viewer.examexecution')), + ], + ), + migrations.CreateModel( + name='Student', + fields=[ + ('matrikel', models.CharField(max_length=200, primary_key=True, serialize=False)), + ('exams', models.ManyToManyField(to='pruefplan_viewer.StudentExam')), + ], + ), + migrations.CreateModel( + name='PartialExam', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('identification', models.CharField(max_length=200, null=True)), + ('regStudCount', models.CharField(max_length=200, null=True)), + ('exam', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pruefplan_viewer.exam')), + ('subjectIds', models.ManyToManyField(to='pruefplan_viewer.Subject')), + ], + ), + migrations.AddField( + model_name='examexecution', + name='lecturer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='pruefplan_viewer.lecturer'), + ), + migrations.AddField( + model_name='examexecution', + name='partialExam', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pruefplan_viewer.partialexam'), + ), + migrations.AddField( + model_name='examexecution', + name='subjectIds', + field=models.ManyToManyField(to='pruefplan_viewer.Subject'), + ), + ] diff --git a/Backend/pruefplan_viewer/migrations/0002_alter_examexecution_options.py b/Backend/pruefplan_viewer/migrations/0002_alter_examexecution_options.py new file mode 100644 index 0000000..8b2ba2f --- /dev/null +++ b/Backend/pruefplan_viewer/migrations/0002_alter_examexecution_options.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.2 on 2024-02-26 17:04 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("pruefplan_viewer", "0001_initial"), + ] + + operations = [ + migrations.AlterModelOptions( + name="examexecution", + options={ + "ordering": ("partialExam__exam__date", "partialExam__exam__time") + }, + ), + ] diff --git a/Backend/pruefplan_viewer/migrations/0003_presences.py b/Backend/pruefplan_viewer/migrations/0003_presences.py new file mode 100644 index 0000000..cfd53bf --- /dev/null +++ b/Backend/pruefplan_viewer/migrations/0003_presences.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.2 on 2024-04-11 13:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pruefplan_viewer', '0002_alter_examexecution_options'), + ] + + operations = [ + migrations.CreateModel( + name='Presences', + fields=[ + ('identification', models.CharField(max_length=200, primary_key=True, serialize=False)), + ], + ), + ] diff --git a/Backend/pruefplan_viewer/migrations/0004_presences_date_presences_datetimetext_presences_time_and_more.py b/Backend/pruefplan_viewer/migrations/0004_presences_date_presences_datetimetext_presences_time_and_more.py new file mode 100644 index 0000000..aaabd13 --- /dev/null +++ b/Backend/pruefplan_viewer/migrations/0004_presences_date_presences_datetimetext_presences_time_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 5.0.2 on 2024-04-11 16:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pruefplan_viewer', '0003_presences'), + ] + + operations = [ + migrations.AddField( + model_name='presences', + name='date', + field=models.DateField(blank=True, null=True), + ), + migrations.AddField( + model_name='presences', + name='dateTimeText', + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name='presences', + name='time', + field=models.TimeField(blank=True, null=True), + ), + migrations.AddField( + model_name='presences', + name='weekday', + field=models.CharField(max_length=200, null=True), + ), + ] diff --git a/Backend/pruefplan_viewer/migrations/0005_presences_lecturer.py b/Backend/pruefplan_viewer/migrations/0005_presences_lecturer.py new file mode 100644 index 0000000..486965f --- /dev/null +++ b/Backend/pruefplan_viewer/migrations/0005_presences_lecturer.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.3 on 2024-04-24 09:13 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pruefplan_viewer', '0004_presences_date_presences_datetimetext_presences_time_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='presences', + name='lecturer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pruefplan_viewer.lecturer'), + ), + ] diff --git a/Backend/pruefplan_viewer/migrations/0006_rename_presences_attendance.py b/Backend/pruefplan_viewer/migrations/0006_rename_presences_attendance.py new file mode 100644 index 0000000..bc77c14 --- /dev/null +++ b/Backend/pruefplan_viewer/migrations/0006_rename_presences_attendance.py @@ -0,0 +1,17 @@ +# Generated by Django 5.0.3 on 2024-05-17 10:43 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pruefplan_viewer', '0005_presences_lecturer'), + ] + + operations = [ + migrations.RenameModel( + old_name='Presences', + new_name='Attendance', + ), + ] diff --git a/Backend/pruefplan_viewer/migrations/0007_api_examdataset_forstudent.py b/Backend/pruefplan_viewer/migrations/0007_api_examdataset_forstudent.py new file mode 100644 index 0000000..f7da3a1 --- /dev/null +++ b/Backend/pruefplan_viewer/migrations/0007_api_examdataset_forstudent.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.4 on 2025-01-30 14:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pruefplan_viewer', '0006_rename_presences_attendance'), + ] + + operations = [ + migrations.CreateModel( + name='API_ExamDataSet_ForStudent', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + ), + ] diff --git a/Backend/pruefplan_viewer/migrations/0008_api_examdataset_forstudent_date_and_more.py b/Backend/pruefplan_viewer/migrations/0008_api_examdataset_forstudent_date_and_more.py new file mode 100644 index 0000000..b1e3687 --- /dev/null +++ b/Backend/pruefplan_viewer/migrations/0008_api_examdataset_forstudent_date_and_more.py @@ -0,0 +1,63 @@ +# Generated by Django 5.1.4 on 2025-01-30 14:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pruefplan_viewer', '0007_api_examdataset_forstudent'), + ] + + operations = [ + migrations.AddField( + model_name='api_examdataset_forstudent', + name='date', + field=models.DateField(blank=True, null=True), + ), + migrations.AddField( + model_name='api_examdataset_forstudent', + name='examIdent', + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name='api_examdataset_forstudent', + name='examStudCount', + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name='api_examdataset_forstudent', + name='location', + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name='api_examdataset_forstudent', + name='room', + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name='api_examdataset_forstudent', + name='studMartNr', + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name='api_examdataset_forstudent', + name='subjectIdent', + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name='api_examdataset_forstudent', + name='supervisor', + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name='api_examdataset_forstudent', + name='time', + field=models.TimeField(blank=True, null=True), + ), + migrations.AddField( + model_name='api_examdataset_forstudent', + name='weekday', + field=models.CharField(max_length=200, null=True), + ), + ] diff --git a/Backend/pruefplan_viewer/migrations/__init__.py b/Backend/pruefplan_viewer/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Backend/pruefplan_viewer/models.py b/Backend/pruefplan_viewer/models.py new file mode 100644 index 0000000..0a0e371 --- /dev/null +++ b/Backend/pruefplan_viewer/models.py @@ -0,0 +1,148 @@ +from __future__ import annotations # Python 3.10 (Production still on 3.9) + +from dataclasses import asdict, dataclass, field +import datetime as dt +from django.db import models + + +class Subject(models.Model): + identification = models.CharField(max_length=200, primary_key=True) + initials = models.CharField(max_length=200, null=True) + name = models.CharField(max_length=200, null=True) + + def __str__(self): + return self.name + + +class Exam(models.Model): + identification = models.CharField(max_length=200, null=True) + date = models.DateField(blank=True, null=True) + time = models.TimeField(blank=True, null=True) + weekday = models.CharField(max_length=200, null=True) + + +class PartialExam(models.Model): + identification = models.CharField(max_length=200, null=True) + regStudCount = models.CharField(max_length=200, null=True) + subjectIds = models.ManyToManyField(Subject) + exam = models.ForeignKey("Exam", blank=True, null=True, on_delete=models.SET_NULL) + + +class Lecturer(models.Model): + identification = models.CharField(max_length=200, primary_key=True) + firstName = models.CharField(max_length=200, null=True) + lastName = models.CharField(max_length=200, null=True) + title = models.CharField(max_length=200, null=True) + + +class Attendance(models.Model): + identification = models.CharField(max_length=200, primary_key=True) + date = models.DateField(blank=True, null=True) + time = models.TimeField(blank=True, null=True) + dateTimeText = models.CharField(max_length=200, null=True) + weekday = models.CharField(max_length=200, null=True) + lecturer = models.ForeignKey( + "Lecturer", blank=True, null=True, on_delete=models.SET_NULL + ) + + +class StudentExam(models.Model): + examIdentification = models.CharField(max_length=200, null=True) + date = models.DateField(blank=True, null=True) + time = models.TimeField(blank=True, null=True) + weekday = models.CharField(max_length=200, null=True) + location = models.CharField(max_length=200, null=True) + examExecution = models.ForeignKey( + "ExamExecution", blank=True, null=True, on_delete=models.CASCADE + ) + + +class Student(models.Model): + matrikel = models.CharField(max_length=200, primary_key=True) + exams = models.ManyToManyField(StudentExam) + + +class ExamExecution(models.Model): + lecturer = models.ForeignKey( + "Lecturer", blank=True, null=True, on_delete=models.CASCADE + ) + supervisorType = models.CharField(max_length=200, null=True) + location = models.CharField(max_length=200, null=True) + subjectIds = models.ManyToManyField(Subject) + partialExam = models.ForeignKey( + "PartialExam", blank=True, null=True, on_delete=models.SET_NULL + ) + + class Meta: + ordering = ("partialExam__exam__date", "partialExam__exam__time") + + + + +# @dataclass() +# class API_ExamDataSet_ForStudent(models.Model): +# date: dt.date +# time: dt.time +# weekday: str +# room: str | None +# location: str | None +# subjectIdent: str | None +# examIdent: str | None +# examStudCount: int | None +# supervisor: str +# studMartNr: str | None + +# def to_dict(self): +# return asdict(self) + + +class API_ExamDataSet_ForStudent(models.Model): + date = models.DateField(blank=True, null=True) + time = models.TimeField(blank=True, null=True) + weekday = models.CharField(max_length=200, null=True) + room = models.CharField(max_length=200, null=True) + location = models.CharField(max_length=200, null=True) + subjectIdent = models.CharField(max_length=200, null=True) + examIdent = models.CharField(max_length=200, null=True) + examStudCount = models.CharField(max_length=200, null=True) + supervisor = models.CharField(max_length=200, null=True) + studMartNr = models.CharField(max_length=200, null=True) + + def to_dict(self): + return asdict(self) + + + +@dataclass(order=True) +class ExamLines: + sort_index: dt.datetime = field(init=False) + date: dt.date + time: dt.time + weekday: str + location: str | None + subjectIds: list[Subject] | None + examIdent: str | None + examStudCound: int | None + supervisorType: str + executionSet: list | None + partialExamIdent: str | None + + def __post_init__(self): + self.sort_index = dt.datetime.combine(self.date, self.time) + + +def sort_and_group_datetime(examLines: list): + + examLine_Datetime_Groups = {} + for examLine in examLines: + if examLine.sort_index not in examLine_Datetime_Groups: + examLine_Datetime_Groups[examLine.sort_index] = [] + examLine_Datetime_Groups[examLine.sort_index].append(examLine) + + sorted_groups = sorted(examLine_Datetime_Groups.items(), key=lambda x: x[0]) + + sorted_result = [] + for _, group in sorted_groups: + sorted_result.extend(group) + + return sorted_result diff --git a/Backend/pruefplan_viewer/tests.py b/Backend/pruefplan_viewer/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/Backend/pruefplan_viewer/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/Backend/pruefplan_viewer/urls.py b/Backend/pruefplan_viewer/urls.py new file mode 100644 index 0000000..570def7 --- /dev/null +++ b/Backend/pruefplan_viewer/urls.py @@ -0,0 +1,13 @@ +from django.urls import path +from . import views + +app_name = 'pp_viewer' + +urlpatterns = [ + path('lecturer', views.lecturer, name='lecturer'), + path('subject', views.subject, name='subject'), + path('exam', views.exam, name='exam'), + path('student', views.student, name='student'), + path('studentExam//', views.examsForStudent, name='examForStudent'), + path('lecturerExam//', views.examsForLecturer, name='examForLecturer'), +] \ No newline at end of file diff --git a/Backend/pruefplan_viewer/views.py b/Backend/pruefplan_viewer/views.py new file mode 100644 index 0000000..4ad67bc --- /dev/null +++ b/Backend/pruefplan_viewer/views.py @@ -0,0 +1,115 @@ +from django.shortcuts import render +from django.template.defaulttags import register +from django.http import Http404 +from django.contrib.auth.decorators import login_required +from .models import ExamLines, Lecturer, Subject, Exam, Student, sort_and_group_datetime +import datetime as dt + + +@login_required +def lecturer(request): + lecturers = Lecturer.objects.all() + context = {"lecturers": lecturers} + return render(request, "pruefplan/lecturer.html", context) + + +@login_required +def subject(request): + subjects = Subject.objects.all() + context = {"subjects": subjects} + return render(request, "pruefplan/subject.html", context) + + +@login_required +def student(request): + students = Student.objects.all() + context = {"students": students} + return render(request, "pruefplan/student.html", context) + + +@login_required +def exam(request): + exams = Exam.objects.all() + supervisorSetDict = {} + for ex in exams: + examSupervisors = [] + for partialExam in ex.partialexam_set.all(): + for examExe in partialExam.examexecution_set.all(): + supervisor = ( + examExe.lecturer.firstName + " " + examExe.lecturer.lastName + ) + if supervisor not in examSupervisors: + examSupervisors.append(supervisor) + supervisorSetDict[ex.identification] = examSupervisors + + context = {"exams": exams, "supervisorSetDict": supervisorSetDict} + return render(request, "pruefplan/exam.html", context) + + +@register.filter +def get_item(dictionary, key): + return dictionary.get(key) + + +def examsForLecturer(request, lecturer_id): + lecturer = Lecturer.objects.filter(pk=lecturer_id).first() + if lecturer is not None: + lecExamExes = lecturer.examexecution_set.all() + lecAttendance = lecturer.attendance_set.all() + lecExamLines = mergeModels(lecExamExes, lecAttendance) + context = { + "lecturer": lecturer, + "lecExamLines": lecExamLines, + "lecExamExes": lecExamExes, + } + return render(request, "pruefplan/lecturerExam.html", context) + else: + raise Http404("Dozentenkennung ungültig.") + + +def examsForStudent(request, student_id): + student = Student.objects.all().filter(matrikel=student_id).first() + if student is not None: + exams = student.exams.all() + context = {"student": student, "exams": exams} + return render(request, "pruefplan/studentExam.html", context) + else: + raise Http404("Matrikelnummer ungültig.") + + +def mergeModels(lecExamExes, lecAttendance): + result = [ + ExamLines( + date=examExes.partialExam.exam.date, + time=examExes.partialExam.exam.time, + weekday=examExes.partialExam.exam.weekday, + location=examExes.location, + subjectIds=examExes.subjectIds, + examIdent=examExes.partialExam.identification, + examStudCound=examExes.partialExam.regStudCount, + supervisorType=examExes.supervisorType, + executionSet=list(examExes.partialExam.examexecution_set.all()), + partialExamIdent=examExes.partialExam.exam.identification, + ) + for examExes in lecExamExes + ] + + result += [ + ExamLines( + date=attendance.date, + time=attendance.time, + weekday=attendance.weekday, + location=None, + subjectIds=None, + examIdent=None, + examStudCound=None, + supervisorType="PRÄSENZ", + executionSet=None, + partialExamIdent=None, + ) + for attendance in lecAttendance + ] + + result = sort_and_group_datetime(result) + + return result diff --git a/Backend/requirements.txt b/Backend/requirements.txt new file mode 100644 index 0000000..0d8c829 --- /dev/null +++ b/Backend/requirements.txt @@ -0,0 +1,49 @@ +pyasn1>=0.3.7 +Django>=2 +ldap3>=2.3 +openpyxl>=2.4.8 +pytz>=2018.7 +asgiref>=3.7.2 +boto3>=1.20.26 +botocore>=1.23.54 +certifi>=2023.11.17 +cffi>=1.16.0 +charset-normalizer>=3.3.2 +cryptography>=41.0.7 +dj-database-url>=2.1.0 +Django>=4.2.7 +django-anymail>=10.2 +django-cors-headers>=3.14.0 +django-jazzmin>=2.6.0 +django-storages>=1.12.3 +django-ckeditor-5 +djangorestframework>=3.14.0 +djangorestframework-simplejwt>=5.2.2 +drf-yasg>=1.21.7 +environs>=10.0.0 +gunicorn>=21.2.0 +idna>=3.6 +inflection>=0.5.1 +jmespath>=0.10.0 +marshmallow>=3.20.1 +packaging>=23.2 +psycopg2>=2.9.9 +pycparser>=2.21 +PyJWT>=2.6.0 +python-dateutil>=2.8.2 +python-dotenv>=1.0.0 +pytz>=2023.3.post1 +PyYAML>=6.0.1 +requests>=2.31.0 +s3transfer>=0.5.2 +shortuuid>=1.0.11 +six>=1.16.0 +sqlparse>=0.4.4 +stripe>=7.9.0 +typing_extensions>=4.9.0 +tzdata>=2023.3 +uritemplate>=4.1.1 +urllib3>=1.26.18 + +requests + diff --git a/Backend/static/bootstrap/css/bootstrap-grid.css b/Backend/static/bootstrap/css/bootstrap-grid.css new file mode 100644 index 0000000..bcd4f33 --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap-grid.css @@ -0,0 +1,1567 @@ +/*! + * Bootstrap Grid v4.0.0-beta.2 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +@-ms-viewport { + width: device-width; +} + +html { + box-sizing: border-box; + -ms-overflow-style: scrollbar; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +.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%; + min-height: 1px; + 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: none; +} + +.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-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: none; + } + .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-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: none; + } + .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-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: none; + } + .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-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: none; + } + .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-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%; + } +} + +.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; +} + +.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; + } + .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; + } + .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; + } + .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; + } + .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; + } +} +/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/Backend/static/bootstrap/css/bootstrap-grid.css.map b/Backend/static/bootstrap/css/bootstrap-grid.css.map new file mode 100644 index 0000000..acfe453 --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap-grid.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_flex.scss"],"names":[],"mappings":"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","file":"bootstrap-grid.css","sourcesContent":["/*!\n * Bootstrap Grid v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@at-root {\n @-ms-viewport { width: device-width; } // stylelint-disable-line at-rule-no-vendor-prefix\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n//\n// Grid mixins\n//\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/flex\";\n","/*!\n * Bootstrap Grid v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n@-ms-viewport {\n width: device-width;\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.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,\n.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,\n.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,\n.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,\n.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,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.1.\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - 1px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #868e96 !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n) !default;\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%\n) !default;\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-200 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$font-family-monospace: \"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black,.1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black,.25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: 5px !default;\n\n$mark-bg: #fcf8e3 !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black,.05) !default;\n$table-hover-bg: rgba($black,.075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-200 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background and border color.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba(theme-color(\"primary\"), .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white,.15), 0 1px 1px rgba($black,.075) !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black,.125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-btn-border-width: $border-width !default; // For form controls and buttons\n$input-box-shadow: inset 0 1px 1px rgba($black,.075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten(theme-color(\"primary\"), 25%) !default;\n$input-focus-color: $input-color !default;\n\n$input-placeholder-color: $gray-600 !default;\n\n$input-height-border: $input-btn-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-margin-bottom: .5rem !default;\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .25rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-y: .25rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: #ddd !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black,.1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-description-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $white !default;\n$custom-control-indicator-checked-bg: theme-color(\"primary\") !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $white !default;\n$custom-control-indicator-active-bg: lighten(theme-color(\"primary\"), 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' 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\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: theme-color(\"primary\") !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: #333 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: lighten(theme-color(\"primary\"), 25%) !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-width: 14rem !default;\n$custom-file-focus-box-shadow: 0 0 0 .075rem $white, 0 0 0 .2rem theme-color(\"primary\") !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n placeholder: (\n en: \"Choose file...\"\n ),\n button-label: (\n en: \"Browse\"\n )\n) !default;\n\n\n// Form validation\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black,.15) !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black,.175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: #ddd !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: #ddd !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white,.5) !default;\n$navbar-dark-hover-color: rgba($white,.75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white,.25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white,.1) !default;\n\n$navbar-light-color: rgba($black,.5) !default;\n$navbar-light-hover-color: rgba($black,.7) !default;\n$navbar-light-active-color: rgba($black,.9) !default;\n$navbar-light-disabled-color: rgba($black,.3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black,.1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: #ddd !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: #ddd !default;\n\n$pagination-active-color: $white !default;\n$pagination-active-bg: theme-color(\"primary\") !default;\n$pagination-active-border-color: theme-color(\"primary\") !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: #ddd !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black,.125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: 3px !default;\n$tooltip-padding-x: 8px !default;\n$tooltip-margin: 0 !default;\n\n\n$tooltip-arrow-width: 5px !default;\n$tooltip-arrow-height: 5px !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black,.2) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black,.2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: .8rem !default;\n$popover-arrow-height: .4rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 15px !default;\n\n$modal-dialog-margin: 10px !default;\n$modal-dialog-margin-y-sm-up: 30px !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black,.2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 3px 9px rgba($black,.5) !default;\n$modal-content-box-shadow-sm-up: 0 5px 15px rgba($black,.5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 15px !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black,.1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black,.125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: #ddd !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black,.075) !default;\n$thumbnail-transition: all .2s ease-in-out !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: \"/\" !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' 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\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' 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\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 90% !default;\n$code-padding-y: .2rem !default;\n$code-padding-x: .4rem !default;\n$code-color: #bd4147 !default;\n$code-bg: $gray-100 !default;\n\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first {\n order: -1;\n }\n\n @for $i from 1 through $columns {\n .order#{$infix}-#{$i} {\n order: $i;\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n"]} \ No newline at end of file diff --git a/Backend/static/bootstrap/css/bootstrap-grid.min.css b/Backend/static/bootstrap/css/bootstrap-grid.min.css new file mode 100644 index 0000000..a7b220f --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap-grid.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap Grid v4.0.0-beta.2 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */@-ms-viewport{width:device-width}html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.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,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.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-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.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-auto{position:relative;width:100%;min-height:1px;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:none}.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-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:none}.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-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:none}.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-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:none}.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-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:none}.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-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%}}.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}.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}.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}.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}.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}.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}} +/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/Backend/static/bootstrap/css/bootstrap-grid.min.css.map b/Backend/static/bootstrap/css/bootstrap-grid.min.css.map new file mode 100644 index 0000000..de236e9 --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap-grid.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","dist/css/bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_flex.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Grid v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@at-root {\n @-ms-viewport { width: device-width; } // stylelint-disable-line at-rule-no-vendor-prefix\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n//\n// Grid mixins\n//\n\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/flex\";\n","/*!\n * Bootstrap Grid v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n@-ms-viewport {\n width: device-width;\n}\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.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,\n.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,\n.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,\n.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,\n.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,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.1.\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - 1px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first {\n order: -1;\n }\n\n @for $i from 1 through $columns {\n .order#{$infix}-#{$i} {\n order: $i;\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n"]} \ No newline at end of file diff --git a/Backend/static/bootstrap/css/bootstrap-reboot.css b/Backend/static/bootstrap/css/bootstrap-reboot.css new file mode 100644 index 0000000..713196f --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap-reboot.css @@ -0,0 +1,342 @@ +/*! + * Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent; +} + +@-ms-viewport { + width: device-width; +} + +article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: none !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; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre, +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +a, +area, +button, +[role="button"], +input:not([type="range"]), +label, +select, +summary, +textarea { + -ms-touch-action: manipulation; + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #868e96; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: .5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} +/*# sourceMappingURL=bootstrap-reboot.css.map */ \ No newline at end of file diff --git a/Backend/static/bootstrap/css/bootstrap-reboot.css.map b/Backend/static/bootstrap/css/bootstrap-reboot.css.map new file mode 100644 index 0000000..0071ed2 --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap-reboot.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","bootstrap-reboot.css","../../scss/_variables.scss","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","file":"bootstrap-reboot.css","sourcesContent":["/*!\n * Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba(0,0,0,0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\n// stylelint-disable font-family-no-duplicate-names\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; // Correct the inheritance and scaling of font size in all browsers.\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n// stylelint-enable font-family-no-duplicate-names\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg:not(:root) {\n overflow: hidden; // Hide the overflow in IE\n}\n\n\n// Avoid 300ms click delay on touch devices that support the `touch-action` CSS property.\n//\n// In particular, unlike most other browsers, IE11+Edge on Windows 10 on touch devices and IE Mobile 10-11\n// DON'T remove the click delay when `` is present.\n// However, they DO support removing the click delay via `touch-action: manipulation`.\n// See:\n// * https://getbootstrap.com/docs/4.0/content/reboot/#click-delay-optimization-for-touch\n// * https://caniuse.com/#feat=css-touch-action\n// * https://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $text-muted;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: .5rem;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #868e96;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: .5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #868e96 !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n) !default;\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%\n) !default;\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-200 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$font-family-monospace: \"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black,.1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black,.25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: 5px !default;\n\n$mark-bg: #fcf8e3 !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black,.05) !default;\n$table-hover-bg: rgba($black,.075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-200 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background and border color.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba(theme-color(\"primary\"), .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white,.15), 0 1px 1px rgba($black,.075) !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black,.125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-btn-border-width: $border-width !default; // For form controls and buttons\n$input-box-shadow: inset 0 1px 1px rgba($black,.075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten(theme-color(\"primary\"), 25%) !default;\n$input-focus-color: $input-color !default;\n\n$input-placeholder-color: $gray-600 !default;\n\n$input-height-border: $input-btn-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-margin-bottom: .5rem !default;\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .25rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-y: .25rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: #ddd !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black,.1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-description-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $white !default;\n$custom-control-indicator-checked-bg: theme-color(\"primary\") !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $white !default;\n$custom-control-indicator-active-bg: lighten(theme-color(\"primary\"), 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' 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\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: theme-color(\"primary\") !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: #333 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: lighten(theme-color(\"primary\"), 25%) !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-width: 14rem !default;\n$custom-file-focus-box-shadow: 0 0 0 .075rem $white, 0 0 0 .2rem theme-color(\"primary\") !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n placeholder: (\n en: \"Choose file...\"\n ),\n button-label: (\n en: \"Browse\"\n )\n) !default;\n\n\n// Form validation\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black,.15) !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black,.175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: #ddd !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: #ddd !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white,.5) !default;\n$navbar-dark-hover-color: rgba($white,.75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white,.25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white,.1) !default;\n\n$navbar-light-color: rgba($black,.5) !default;\n$navbar-light-hover-color: rgba($black,.7) !default;\n$navbar-light-active-color: rgba($black,.9) !default;\n$navbar-light-disabled-color: rgba($black,.3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black,.1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: #ddd !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: #ddd !default;\n\n$pagination-active-color: $white !default;\n$pagination-active-bg: theme-color(\"primary\") !default;\n$pagination-active-border-color: theme-color(\"primary\") !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: #ddd !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black,.125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: 3px !default;\n$tooltip-padding-x: 8px !default;\n$tooltip-margin: 0 !default;\n\n\n$tooltip-arrow-width: 5px !default;\n$tooltip-arrow-height: 5px !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black,.2) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black,.2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: .8rem !default;\n$popover-arrow-height: .4rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 15px !default;\n\n$modal-dialog-margin: 10px !default;\n$modal-dialog-margin-y-sm-up: 30px !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black,.2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 3px 9px rgba($black,.5) !default;\n$modal-content-box-shadow-sm-up: 0 5px 15px rgba($black,.5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 15px !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black,.1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black,.125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: #ddd !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black,.075) !default;\n$thumbnail-transition: all .2s ease-in-out !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: \"/\" !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' 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\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' 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\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 90% !default;\n$code-padding-y: .2rem !default;\n$code-padding-x: .4rem !default;\n$code-color: #bd4147 !default;\n$code-bg: $gray-100 !default;\n\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n","// stylelint-disable indentation\n@mixin hover {\n // TODO: re-enable along with mq4-hover-shim\n// @if $enable-hover-media-query {\n// // See Media Queries Level 4: https://drafts.csswg.org/mediaqueries/#hover\n// // Currently shimmed by https://github.com/twbs/mq4-hover-shim\n// @media (hover: hover) {\n// &:hover { @content }\n// }\n// }\n// @else {\n &:hover { @content; }\n// }\n}\n\n\n@mixin hover-focus {\n @if $enable-hover-media-query {\n &:focus {\n @content;\n }\n @include hover { @content; }\n } @else {\n &:focus,\n &:hover {\n @content;\n }\n }\n}\n\n@mixin plain-hover-focus {\n @if $enable-hover-media-query {\n &,\n &:focus {\n @content;\n }\n @include hover { @content; }\n } @else {\n &,\n &:focus,\n &:hover {\n @content;\n }\n }\n}\n\n@mixin hover-focus-active {\n @if $enable-hover-media-query {\n &:focus,\n &:active {\n @content;\n }\n @include hover { @content; }\n } @else {\n &:focus,\n &:active,\n &:hover {\n @content;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/Backend/static/bootstrap/css/bootstrap-reboot.min.css b/Backend/static/bootstrap/css/bootstrap-reboot.min.css new file mode 100644 index 0000000..3f4f1a8 --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap-reboot.min.css @@ -0,0 +1,8 @@ +/*! + * Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important} +/*# sourceMappingURL=bootstrap-reboot.min.css.map */ \ No newline at end of file diff --git a/Backend/static/bootstrap/css/bootstrap-reboot.min.css.map b/Backend/static/bootstrap/css/bootstrap-reboot.min.css.map new file mode 100644 index 0000000..4b8e662 --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap-reboot.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","bootstrap-reboot.css","../../scss/mixins/_hover.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba(0,0,0,0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\n// stylelint-disable font-family-no-duplicate-names\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; // Correct the inheritance and scaling of font size in all browsers.\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n// stylelint-enable font-family-no-duplicate-names\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg:not(:root) {\n overflow: hidden; // Hide the overflow in IE\n}\n\n\n// Avoid 300ms click delay on touch devices that support the `touch-action` CSS property.\n//\n// In particular, unlike most other browsers, IE11+Edge on Windows 10 on touch devices and IE Mobile 10-11\n// DON'T remove the click delay when `` is present.\n// However, they DO support removing the click delay via `touch-action: manipulation`.\n// See:\n// * https://getbootstrap.com/docs/4.0/content/reboot/#click-delay-optimization-for-touch\n// * https://caniuse.com/#feat=css-touch-action\n// * https://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $text-muted;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: .5rem;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #868e96;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: .5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */","/*!\n * Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #868e96;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: .5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable indentation\n@mixin hover {\n // TODO: re-enable along with mq4-hover-shim\n// @if $enable-hover-media-query {\n// // See Media Queries Level 4: https://drafts.csswg.org/mediaqueries/#hover\n// // Currently shimmed by https://github.com/twbs/mq4-hover-shim\n// @media (hover: hover) {\n// &:hover { @content }\n// }\n// }\n// @else {\n &:hover { @content; }\n// }\n}\n\n\n@mixin hover-focus {\n @if $enable-hover-media-query {\n &:focus {\n @content;\n }\n @include hover { @content; }\n } @else {\n &:focus,\n &:hover {\n @content;\n }\n }\n}\n\n@mixin plain-hover-focus {\n @if $enable-hover-media-query {\n &,\n &:focus {\n @content;\n }\n @include hover { @content; }\n } @else {\n &,\n &:focus,\n &:hover {\n @content;\n }\n }\n}\n\n@mixin hover-focus-active {\n @if $enable-hover-media-query {\n &:focus,\n &:active {\n @content;\n }\n @include hover { @content; }\n } @else {\n &:focus,\n &:active,\n &:hover {\n @content;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/Backend/static/bootstrap/css/bootstrap.css b/Backend/static/bootstrap/css/bootstrap.css new file mode 100644 index 0000000..fa55c20 --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap.css @@ -0,0 +1,8374 @@ +/*! + * Bootstrap v4.0.0-beta.2 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 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: #868e96; + --gray-dark: #343a40; + --primary: #007bff; + --secondary: #868e96; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + --font-family-monospace: "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent; +} + +@-ms-viewport { + width: device-width; +} + +article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: none !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; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +dfn { + font-style: italic; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre, +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +a, +area, +button, +[role="button"], +input:not([type="range"]), +label, +select, +summary, +textarea { + -ms-touch-action: manipulation; + touch-action: manipulation; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #868e96; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: .5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.2; + color: inherit; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: 400; +} + +mark, +.mark { + padding: 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: 5px; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #868e96; +} + +.blockquote-footer::before { + content: "\2014 \00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 0.25rem; + transition: all 0.2s ease-in-out; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #868e96; +} + +code, +kbd, +pre, +samp { + font-family: "SFMono-Regular", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +code { + padding: 0.2rem 0.4rem; + font-size: 90%; + color: #bd4147; + background-color: #f8f9fa; + border-radius: 0.25rem; +} + +a > code { + padding: 0; + color: inherit; + background-color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 90%; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + font-size: 90%; + color: #212529; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + background-color: transparent; + border-radius: 0; +} + +.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%; + min-height: 1px; + 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: none; +} + +.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-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: none; + } + .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-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: none; + } + .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-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: none; + } + .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-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: none; + } + .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-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%; + max-width: 100%; + margin-bottom: 1rem; + background-color: transparent; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #e9ecef; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #e9ecef; +} + +.table tbody + tbody { + border-top: 2px solid #e9ecef; +} + +.table .table { + background-color: #fff; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #e9ecef; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #e9ecef; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #b8daff; +} + +.table-hover .table-primary:hover { + background-color: #9fcdff; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #9fcdff; +} + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #dddfe2; +} + +.table-hover .table-secondary:hover { + background-color: #cfd2d6; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #cfd2d6; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #c3e6cb; +} + +.table-hover .table-success:hover { + background-color: #b1dfbb; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #b1dfbb; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #bee5eb; +} + +.table-hover .table-info:hover { + background-color: #abdde5; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #abdde5; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #ffeeba; +} + +.table-hover .table-warning:hover { + background-color: #ffe8a1; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #ffe8a1; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f5c6cb; +} + +.table-hover .table-danger:hover { + background-color: #f1b0b7; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #f1b0b7; +} + +.table-light, +.table-light > th, +.table-light > td { + background-color: #fdfdfe; +} + +.table-hover .table-light:hover { + background-color: #ececf6; +} + +.table-hover .table-light:hover > td, +.table-hover .table-light:hover > th { + background-color: #ececf6; +} + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #c6c8ca; +} + +.table-hover .table-dark:hover { + background-color: #b9bbbe; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #b9bbbe; +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table .thead-dark th { + color: #fff; + background-color: #212529; + border-color: #32383e; +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #e9ecef; +} + +.table-dark { + color: #fff; + background-color: #212529; +} + +.table-dark th, +.table-dark td, +.table-dark thead th { + border-color: #32383e; +} + +.table-dark.table-bordered { + border: 0; +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} + +.table-dark.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, 0.075); +} + +@media (max-width: 575px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-sm.table-bordered { + border: 0; + } +} + +@media (max-width: 767px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-md.table-bordered { + border: 0; + } +} + +@media (max-width: 991px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-lg.table-bordered { + border: 0; + } +} + +@media (max-width: 1199px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + } + .table-responsive-xl.table-bordered { + border: 0; + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; +} + +.table-responsive.table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-image: none; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: none; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.form-control::-webkit-input-placeholder { + color: #868e96; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #868e96; + opacity: 1; +} + +.form-control::-ms-input-placeholder { + color: #868e96; + opacity: 1; +} + +.form-control::placeholder { + color: #868e96; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} + +select.form-control:not([size]):not([multiple]) { + height: calc(2.25rem + 2px); +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + 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; +} + +.col-form-legend { + padding-top: 0.375rem; + padding-bottom: 0.375rem; + margin-bottom: 0; + font-size: 1rem; +} + +.form-control-plaintext { + padding-top: 0.375rem; + padding-bottom: 0.375rem; + margin-bottom: 0; + line-height: 1.5; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control, +.input-group-sm > .form-control-plaintext.input-group-addon, +.input-group-sm > .input-group-btn > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control, +.input-group-lg > .form-control-plaintext.input-group-addon, +.input-group-lg > .input-group-btn > .form-control-plaintext.btn { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), +.input-group-sm > select.input-group-addon:not([size]):not([multiple]), +.input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: calc(1.8125rem + 2px); +} + +.form-control-lg, .input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), +.input-group-lg > select.input-group-addon:not([size]):not([multiple]), +.input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: calc(2.875rem + 2px); +} + +.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; + margin-bottom: 0.5rem; +} + +.form-check.disabled .form-check-label { + color: #868e96; +} + +.form-check-label { + padding-left: 1.25rem; + margin-bottom: 0; +} + +.form-check-input { + position: absolute; + margin-top: 0.25rem; + margin-left: -1.25rem; +} + +.form-check-inline { + display: inline-block; + margin-right: 0.75rem; +} + +.form-check-inline .form-check-label { + vertical-align: middle; +} + +.valid-feedback { + display: none; + margin-top: .25rem; + font-size: .875rem; + color: #28a745; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + width: 250px; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(40, 167, 69, 0.8); + border-radius: .2rem; +} + +.was-validated .form-control:valid, .form-control.is-valid, .was-validated +.custom-select:valid, +.custom-select.is-valid { + border-color: #28a745; +} + +.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated +.custom-select:valid:focus, +.custom-select.is-valid:focus { + 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, .was-validated +.custom-select:valid ~ .valid-feedback, +.was-validated +.custom-select:valid ~ .valid-tooltip, +.custom-select.is-valid ~ .valid-feedback, +.custom-select.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-check-input:valid + .form-check-label, .form-check-input.is-valid + .form-check-label { + color: #28a745; +} + +.was-validated .custom-control-input:valid ~ .custom-control-indicator, .custom-control-input.is-valid ~ .custom-control-indicator { + background-color: rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-control-input:valid ~ .custom-control-description, .custom-control-input.is-valid ~ .custom-control-description { + color: #28a745; +} + +.was-validated .custom-file-input:valid ~ .custom-file-control, .custom-file-input.is-valid ~ .custom-file-control { + border-color: #28a745; +} + +.was-validated .custom-file-input:valid ~ .custom-file-control::before, .custom-file-input.is-valid ~ .custom-file-control::before { + border-color: inherit; +} + +.was-validated .custom-file-input:valid:focus, .custom-file-input.is-valid:focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.invalid-feedback { + display: none; + margin-top: .25rem; + font-size: .875rem; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + width: 250px; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(220, 53, 69, 0.8); + border-radius: .2rem; +} + +.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated +.custom-select:invalid, +.custom-select.is-invalid { + border-color: #dc3545; +} + +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated +.custom-select:invalid:focus, +.custom-select.is-invalid:focus { + 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, .was-validated +.custom-select:invalid ~ .invalid-feedback, +.was-validated +.custom-select:invalid ~ .invalid-tooltip, +.custom-select.is-invalid ~ .invalid-feedback, +.custom-select.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-check-input:invalid + .form-check-label, .form-check-input.is-invalid + .form-check-label { + color: #dc3545; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-indicator, .custom-control-input.is-invalid ~ .custom-control-indicator { + background-color: rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-control-input:invalid ~ .custom-control-description, .custom-control-input.is-invalid ~ .custom-control-description { + color: #dc3545; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-control, .custom-file-input.is-invalid ~ .custom-file-control { + border-color: #dc3545; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-control::before, .custom-file-input.is-invalid ~ .custom-file-control::before { + border-color: inherit; +} + +.was-validated .custom-file-input:invalid:focus, .custom-file-input.is-invalid:focus { + 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 { + 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; + margin-top: 0; + margin-bottom: 0; + } + .form-inline .form-check-label { + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + } + .form-inline .custom-control-indicator { + position: static; + display: inline-block; + margin-right: 0.25rem; + vertical-align: text-bottom; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.btn { + display: inline-block; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +.btn:focus, .btn:hover { + 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: .65; +} + +.btn:not([disabled]):not(.disabled):active, .btn:not([disabled]):not(.disabled).active { + background-image: none; +} + +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:hover { + color: #fff; + background-color: #0069d9; + border-color: #0062cc; +} + +.btn-primary:focus, .btn-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + 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; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-secondary { + color: #fff; + background-color: #868e96; + border-color: #868e96; +} + +.btn-secondary:hover { + color: #fff; + background-color: #727b84; + border-color: #6c757d; +} + +.btn-secondary:focus, .btn-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + background-color: #868e96; + border-color: #868e96; +} + +.btn-secondary:not([disabled]):not(.disabled):active, .btn-secondary:not([disabled]):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #666e76; + box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 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(40, 167, 69, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + 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; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; +} + +.btn-info:focus, .btn-info.focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + 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; + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-warning { + color: #111; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:hover { + color: #111; + background-color: #e0a800; + border-color: #d39e00; +} + +.btn-warning:focus, .btn-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + 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: #111; + background-color: #d39e00; + border-color: #c69500; + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; +} + +.btn-danger:focus, .btn-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + 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; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-light { + color: #111; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:hover { + color: #111; + background-color: #e2e6ea; + border-color: #dae0e5; +} + +.btn-light:focus, .btn-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-light.disabled, .btn-light:disabled { + 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: #111; + background-color: #dae0e5; + border-color: #d3d9df; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; +} + +.btn-dark:focus, .btn-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + 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; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-outline-primary { + color: #007bff; + background-color: transparent; + background-image: none; + border-color: #007bff; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 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; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-secondary { + color: #868e96; + background-color: transparent; + background-image: none; + border-color: #868e96; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #868e96; + border-color: #868e96; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #868e96; + 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: #868e96; + border-color: #868e96; + box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5); +} + +.btn-outline-success { + color: #28a745; + background-color: transparent; + background-image: none; + border-color: #28a745; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0 0 0 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; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-info { + color: #17a2b8; + background-color: transparent; + background-image: none; + border-color: #17a2b8; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0 0 0 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; + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-warning { + color: #ffc107; + background-color: transparent; + background-image: none; + border-color: #ffc107; +} + +.btn-outline-warning:hover { + color: #fff; + 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: #fff; + background-color: #ffc107; + border-color: #ffc107; + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-danger { + color: #dc3545; + background-color: transparent; + background-image: none; + border-color: #dc3545; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0 0 0 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; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-light { + color: #f8f9fa; + background-color: transparent; + background-image: none; + border-color: #f8f9fa; +} + +.btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0 0 0 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; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-dark { + color: #343a40; + background-color: transparent; + background-image: none; + border-color: #343a40; +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 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; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-link { + font-weight: 400; + color: #007bff; + background-color: transparent; +} + +.btn-link:hover { + color: #0056b3; + text-decoration: underline; + background-color: transparent; + border-color: transparent; +} + +.btn-link:focus, .btn-link.focus { + border-color: transparent; + box-shadow: none; +} + +.btn-link:disabled, .btn-link.disabled { + color: #868e96; +} + +.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 { + opacity: 0; + transition: opacity 0.15s linear; +} + +.fade.show { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.show { + display: block; +} + +tr.collapse.show { + display: table-row; +} + +tbody.collapse.show { + display: table-row-group; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 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; +} + +.dropup .dropdown-menu { + margin-top: 0; + margin-bottom: 0.125rem; +} + +.dropup .dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + 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; +} + +.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: none; + border: 0; +} + +.dropdown-item:focus, .dropdown-item:hover { + 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: #868e96; + 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: #868e96; + white-space: nowrap; +} + +.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: 0 1 auto; + flex: 0 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 2; +} + +.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: 2; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group, +.btn-group-vertical .btn + .btn, +.btn-group-vertical .btn + .btn-group, +.btn-group-vertical .btn-group + .btn, +.btn-group-vertical .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + display: -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):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn + .dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.btn + .dropdown-toggle-split::after { + margin-left: 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 + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .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-align: stretch; + align-items: stretch; + width: 100%; +} + +.input-group .form-control { + position: relative; + z-index: 2; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} + +.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover { + z-index: 3; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + white-space: nowrap; +} + +.input-group-addon { + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.input-group-addon.form-control-sm, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.input-group-addon.form-control-lg, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:not(:last-child), +.input-group-addon:not(:last-child), +.input-group-btn:not(:last-child) > .btn, +.input-group-btn:not(:last-child) > .btn-group > .btn, +.input-group-btn:not(:last-child) > .dropdown-toggle, +.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:not(:last-child) { + border-right: 0; +} + +.input-group .form-control:not(:first-child), +.input-group-addon:not(:first-child), +.input-group-btn:not(:first-child) > .btn, +.input-group-btn:not(:first-child) > .btn-group > .btn, +.input-group-btn:not(:first-child) > .dropdown-toggle, +.input-group-btn:not(:last-child) > .btn:not(:first-child), +.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.form-control + .input-group-addon:not(:first-child) { + border-left: 0; +} + +.input-group-btn { + position: relative; + -ms-flex-align: stretch; + align-items: stretch; + font-size: 0; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -1px; +} + +.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover { + z-index: 3; +} + +.input-group-btn:first-child > .btn + .btn { + margin-left: 0; +} + +.input-group-btn:not(:last-child) > .btn, +.input-group-btn:not(:last-child) > .btn-group { + margin-right: -1px; +} + +.input-group-btn:not(:first-child) > .btn, +.input-group-btn:not(:first-child) > .btn-group { + z-index: 2; + margin-left: 0; +} + +.input-group-btn:not(:first-child) > .btn:first-child, +.input-group-btn:not(:first-child) > .btn-group:first-child { + margin-left: -1px; +} + +.input-group-btn:not(:first-child) > .btn:focus, .input-group-btn:not(:first-child) > .btn:active, .input-group-btn:not(:first-child) > .btn:hover, +.input-group-btn:not(:first-child) > .btn-group:focus, +.input-group-btn:not(:first-child) > .btn-group:active, +.input-group-btn:not(:first-child) > .btn-group:hover { + z-index: 3; +} + +.custom-control { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + min-height: 1.5rem; + padding-left: 1.5rem; + margin-right: 1rem; +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-indicator { + color: #fff; + background-color: #007bff; +} + +.custom-control-input:focus ~ .custom-control-indicator { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-control-input:active ~ .custom-control-indicator { + color: #fff; + background-color: #b3d7ff; +} + +.custom-control-input:disabled ~ .custom-control-indicator { + background-color: #e9ecef; +} + +.custom-control-input:disabled ~ .custom-control-description { + color: #868e96; +} + +.custom-control-indicator { + position: absolute; + top: 0.25rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #ddd; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50%; +} + +.custom-checkbox .custom-control-indicator { + border-radius: 0.25rem; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator { + background-color: #007bff; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); +} + +.custom-radio .custom-control-indicator { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); +} + +.custom-controls-stacked { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; +} + +.custom-controls-stacked .custom-control { + margin-bottom: 0.25rem; +} + +.custom-controls-stacked .custom-control + .custom-control { + margin-left: 0; +} + +.custom-select { + display: inline-block; + max-width: 100%; + height: calc(2.25rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; + background-size: 8px 10px; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-select:focus { + border-color: #80bdff; + outline: none; +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.custom-select[multiple] { + height: auto; + background-image: none; +} + +.custom-select:disabled { + color: #868e96; + background-color: #e9ecef; +} + +.custom-select::-ms-expand { + opacity: 0; +} + +.custom-select-sm { + height: calc(1.8125rem + 2px); + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 75%; +} + +.custom-file { + position: relative; + display: inline-block; + max-width: 100%; + height: calc(2.25rem + 2px); + margin-bottom: 0; +} + +.custom-file-input { + min-width: 14rem; + max-width: 100%; + height: calc(2.25rem + 2px); + margin: 0; + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-control { + box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.2rem #007bff; +} + +.custom-file-control { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 5; + height: calc(2.25rem + 2px); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.custom-file-control:lang(en):empty::after { + content: "Choose file..."; +} + +.custom-file-control::before { + position: absolute; + top: -1px; + right: -1px; + bottom: -1px; + z-index: 6; + display: block; + height: calc(2.25rem + 2px); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-file-control:lang(en)::before { + content: "Browse"; +} + +.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:focus, .nav-link:hover { + text-decoration: none; +} + +.nav-link.disabled { + color: #868e96; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.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:focus, .nav-tabs .nav-link:hover { + border-color: #e9ecef #e9ecef #ddd; +} + +.nav-tabs .nav-link.disabled { + color: #868e96; + 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: #ddd #ddd #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:focus, .navbar-brand:hover { + 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: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.navbar-toggler:focus, .navbar-toggler:hover { + 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: 575px) { + .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 .dropdown-menu-right { + right: 0; + left: auto; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -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; + } + .navbar-expand-sm .dropup .dropdown-menu { + top: auto; + bottom: 100%; + } +} + +@media (max-width: 767px) { + .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 .dropdown-menu-right { + right: 0; + left: auto; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -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; + } + .navbar-expand-md .dropup .dropdown-menu { + top: auto; + bottom: 100%; + } +} + +@media (max-width: 991px) { + .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 .dropdown-menu-right { + right: 0; + left: auto; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -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; + } + .navbar-expand-lg .dropup .dropdown-menu { + top: auto; + bottom: 100%; + } +} + +@media (max-width: 1199px) { + .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 .dropdown-menu-right { + right: 0; + left: auto; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -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-xl .dropup .dropdown-menu { + top: auto; + bottom: 100%; + } +} + +.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 .dropdown-menu-right { + right: 0; + left: auto; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid { + -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-expand .dropup .dropdown-menu { + top: auto; + bottom: 100%; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover { + 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:focus, .navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-text a:focus, .navbar-light .navbar-text a:hover { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fff; +} + +.navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover { + color: #fff; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-text a { + color: #fff; +} + +.navbar-dark .navbar-text a:focus, .navbar-dark .navbar-text a:hover { + 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:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group .card:first-child .card-img-top { + border-top-right-radius: 0; + } + .card-group .card:first-child .card-img-bottom { + border-bottom-right-radius: 0; + } + .card-group .card:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group .card:last-child .card-img-top { + border-top-left-radius: 0; + } + .card-group .card:last-child .card-img-bottom { + border-bottom-left-radius: 0; + } + .card-group .card:only-child { + border-radius: 0.25rem; + } + .card-group .card:only-child .card-img-top { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; + } + .card-group .card:only-child .card-img-bottom { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + } + .card-group .card:not(:first-child):not(:last-child):not(:only-child) { + border-radius: 0; + } + .card-group .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, + .card-group .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom { + border-radius: 0; + } +} + +.card-columns .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + column-gap: 1.25rem; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.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::before { + display: inline-block; + padding-right: 0.5rem; + padding-left: 0.5rem; + color: #868e96; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #868e96; +} + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; +} + +.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: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.page-item.disabled .page-link { + color: #868e96; + pointer-events: none; + background-color: #fff; + border-color: #ddd; +} + +.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 #ddd; +} + +.page-link:focus, .page-link:hover { + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #ddd; +} + +.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; +} + +.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; +} + +.badge-primary[href]:focus, .badge-primary[href]:hover { + color: #fff; + text-decoration: none; + background-color: #0062cc; +} + +.badge-secondary { + color: #fff; + background-color: #868e96; +} + +.badge-secondary[href]:focus, .badge-secondary[href]:hover { + color: #fff; + text-decoration: none; + background-color: #6c757d; +} + +.badge-success { + color: #fff; + background-color: #28a745; +} + +.badge-success[href]:focus, .badge-success[href]:hover { + color: #fff; + text-decoration: none; + background-color: #1e7e34; +} + +.badge-info { + color: #fff; + background-color: #17a2b8; +} + +.badge-info[href]:focus, .badge-info[href]:hover { + color: #fff; + text-decoration: none; + background-color: #117a8b; +} + +.badge-warning { + color: #111; + background-color: #ffc107; +} + +.badge-warning[href]:focus, .badge-warning[href]:hover { + color: #111; + text-decoration: none; + background-color: #d39e00; +} + +.badge-danger { + color: #fff; + background-color: #dc3545; +} + +.badge-danger[href]:focus, .badge-danger[href]:hover { + color: #fff; + text-decoration: none; + background-color: #bd2130; +} + +.badge-light { + color: #111; + background-color: #f8f9fa; +} + +.badge-light[href]:focus, .badge-light[href]:hover { + color: #111; + text-decoration: none; + background-color: #dae0e5; +} + +.badge-dark { + color: #fff; + background-color: #343a40; +} + +.badge-dark[href]:focus, .badge-dark[href]:hover { + color: #fff; + text-decoration: none; + background-color: #1d2124; +} + +.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 .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: #464a4e; + background-color: #e7e8ea; + border-color: #dddfe2; +} + +.alert-secondary hr { + border-top-color: #cfd2d6; +} + +.alert-secondary .alert-link { + color: #2e3133; +} + +.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-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + background-color: #007bff; +} + +.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 { + 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:focus, .list-group-item-action:hover { + 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:focus, .list-group-item:hover { + text-decoration: none; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #868e96; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0; +} + +.list-group-item-primary { + color: #004085; + background-color: #b8daff; +} + +a.list-group-item-primary, +button.list-group-item-primary { + color: #004085; +} + +a.list-group-item-primary:focus, a.list-group-item-primary:hover, +button.list-group-item-primary:focus, +button.list-group-item-primary:hover { + color: #004085; + background-color: #9fcdff; +} + +a.list-group-item-primary.active, +button.list-group-item-primary.active { + color: #fff; + background-color: #004085; + border-color: #004085; +} + +.list-group-item-secondary { + color: #464a4e; + background-color: #dddfe2; +} + +a.list-group-item-secondary, +button.list-group-item-secondary { + color: #464a4e; +} + +a.list-group-item-secondary:focus, a.list-group-item-secondary:hover, +button.list-group-item-secondary:focus, +button.list-group-item-secondary:hover { + color: #464a4e; + background-color: #cfd2d6; +} + +a.list-group-item-secondary.active, +button.list-group-item-secondary.active { + color: #fff; + background-color: #464a4e; + border-color: #464a4e; +} + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb; +} + +a.list-group-item-success, +button.list-group-item-success { + color: #155724; +} + +a.list-group-item-success:focus, a.list-group-item-success:hover, +button.list-group-item-success:focus, +button.list-group-item-success:hover { + color: #155724; + background-color: #b1dfbb; +} + +a.list-group-item-success.active, +button.list-group-item-success.active { + color: #fff; + background-color: #155724; + border-color: #155724; +} + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb; +} + +a.list-group-item-info, +button.list-group-item-info { + color: #0c5460; +} + +a.list-group-item-info:focus, a.list-group-item-info:hover, +button.list-group-item-info:focus, +button.list-group-item-info:hover { + color: #0c5460; + background-color: #abdde5; +} + +a.list-group-item-info.active, +button.list-group-item-info.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; +} + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba; +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #856404; +} + +a.list-group-item-warning:focus, a.list-group-item-warning:hover, +button.list-group-item-warning:focus, +button.list-group-item-warning:hover { + color: #856404; + background-color: #ffe8a1; +} + +a.list-group-item-warning.active, +button.list-group-item-warning.active { + color: #fff; + background-color: #856404; + border-color: #856404; +} + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb; +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #721c24; +} + +a.list-group-item-danger:focus, a.list-group-item-danger:hover, +button.list-group-item-danger:focus, +button.list-group-item-danger:hover { + color: #721c24; + background-color: #f1b0b7; +} + +a.list-group-item-danger.active, +button.list-group-item-danger.active { + color: #fff; + background-color: #721c24; + border-color: #721c24; +} + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe; +} + +a.list-group-item-light, +button.list-group-item-light { + color: #818182; +} + +a.list-group-item-light:focus, a.list-group-item-light:hover, +button.list-group-item-light:focus, +button.list-group-item-light:hover { + color: #818182; + background-color: #ececf6; +} + +a.list-group-item-light.active, +button.list-group-item-light.active { + color: #fff; + background-color: #818182; + border-color: #818182; +} + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca; +} + +a.list-group-item-dark, +button.list-group-item-dark { + color: #1b1e21; +} + +a.list-group-item-dark:focus, a.list-group-item-dark:hover, +button.list-group-item-dark:focus, +button.list-group-item-dark:hover { + color: #1b1e21; + background-color: #b9bbbe; +} + +a.list-group-item-dark.active, +button.list-group-item-dark.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:focus, .close:hover { + color: #000; + text-decoration: none; + opacity: .75; +} + +button.close { + padding: 0; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0; +} + +.modal.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, -25%); + transform: translate(0, -25%); +} + +.modal.show .modal-dialog { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; + pointer-events: none; +} + +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + 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; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + 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: 15px; + border-bottom: 1px solid #e9ecef; + border-top-left-radius: 0.3rem; + border-top-right-radius: 0.3rem; +} + +.modal-header .close { + padding: 15px; + margin: -15px -15px -15px auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 15px; +} + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 15px; + border-top: 1px solid #e9ecef; +} + +.modal-footer > :not(:first-child) { + margin-left: .25rem; +} + +.modal-footer > :not(:last-child) { + margin-right: .25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 30px auto; + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg { + max-width: 800px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 5px; + height: 5px; +} + +.tooltip .arrow::before { + position: absolute; + border-color: transparent; + border-style: solid; +} + +.tooltip.bs-tooltip-top, .tooltip.bs-tooltip-auto[x-placement^="top"] { + padding: 5px 0; +} + +.tooltip.bs-tooltip-top .arrow, .tooltip.bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; +} + +.tooltip.bs-tooltip-top .arrow::before, .tooltip.bs-tooltip-auto[x-placement^="top"] .arrow::before { + margin-left: -3px; + content: ""; + border-width: 5px 5px 0; + border-top-color: #000; +} + +.tooltip.bs-tooltip-right, .tooltip.bs-tooltip-auto[x-placement^="right"] { + padding: 0 5px; +} + +.tooltip.bs-tooltip-right .arrow, .tooltip.bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; +} + +.tooltip.bs-tooltip-right .arrow::before, .tooltip.bs-tooltip-auto[x-placement^="right"] .arrow::before { + margin-top: -3px; + content: ""; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} + +.tooltip.bs-tooltip-bottom, .tooltip.bs-tooltip-auto[x-placement^="bottom"] { + padding: 5px 0; +} + +.tooltip.bs-tooltip-bottom .arrow, .tooltip.bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; +} + +.tooltip.bs-tooltip-bottom .arrow::before, .tooltip.bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + margin-left: -3px; + content: ""; + border-width: 0 5px 5px; + border-bottom-color: #000; +} + +.tooltip.bs-tooltip-left, .tooltip.bs-tooltip-auto[x-placement^="left"] { + padding: 0 5px; +} + +.tooltip.bs-tooltip-left .arrow, .tooltip.bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; +} + +.tooltip.bs-tooltip-left .arrow::before, .tooltip.bs-tooltip-auto[x-placement^="left"] .arrow::before { + right: 0; + margin-top: -3px; + content: ""; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + 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, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 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: 0.8rem; + height: 0.4rem; +} + +.popover .arrow::before, +.popover .arrow::after { + position: absolute; + display: block; + border-color: transparent; + border-style: solid; +} + +.popover .arrow::before { + content: ""; + border-width: 0.8rem; +} + +.popover .arrow::after { + content: ""; + border-width: 0.8rem; +} + +.popover.bs-popover-top, .popover.bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.8rem; +} + +.popover.bs-popover-top .arrow, .popover.bs-popover-auto[x-placement^="top"] .arrow { + bottom: 0; +} + +.popover.bs-popover-top .arrow::before, .popover.bs-popover-auto[x-placement^="top"] .arrow::before, +.popover.bs-popover-top .arrow::after, .popover.bs-popover-auto[x-placement^="top"] .arrow::after { + border-bottom-width: 0; +} + +.popover.bs-popover-top .arrow::before, .popover.bs-popover-auto[x-placement^="top"] .arrow::before { + bottom: -0.8rem; + margin-left: -0.8rem; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.popover.bs-popover-top .arrow::after, .popover.bs-popover-auto[x-placement^="top"] .arrow::after { + bottom: calc((0.8rem - 1px) * -1); + margin-left: -0.8rem; + border-top-color: #fff; +} + +.popover.bs-popover-right, .popover.bs-popover-auto[x-placement^="right"] { + margin-left: 0.8rem; +} + +.popover.bs-popover-right .arrow, .popover.bs-popover-auto[x-placement^="right"] .arrow { + left: 0; +} + +.popover.bs-popover-right .arrow::before, .popover.bs-popover-auto[x-placement^="right"] .arrow::before, +.popover.bs-popover-right .arrow::after, .popover.bs-popover-auto[x-placement^="right"] .arrow::after { + margin-top: -0.8rem; + border-left-width: 0; +} + +.popover.bs-popover-right .arrow::before, .popover.bs-popover-auto[x-placement^="right"] .arrow::before { + left: -0.8rem; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.popover.bs-popover-right .arrow::after, .popover.bs-popover-auto[x-placement^="right"] .arrow::after { + left: calc((0.8rem - 1px) * -1); + border-right-color: #fff; +} + +.popover.bs-popover-bottom, .popover.bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.8rem; +} + +.popover.bs-popover-bottom .arrow, .popover.bs-popover-auto[x-placement^="bottom"] .arrow { + top: 0; +} + +.popover.bs-popover-bottom .arrow::before, .popover.bs-popover-auto[x-placement^="bottom"] .arrow::before, +.popover.bs-popover-bottom .arrow::after, .popover.bs-popover-auto[x-placement^="bottom"] .arrow::after { + margin-left: -0.8rem; + border-top-width: 0; +} + +.popover.bs-popover-bottom .arrow::before, .popover.bs-popover-auto[x-placement^="bottom"] .arrow::before { + top: -0.8rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.popover.bs-popover-bottom .arrow::after, .popover.bs-popover-auto[x-placement^="bottom"] .arrow::after { + top: calc((0.8rem - 1px) * -1); + border-bottom-color: #fff; +} + +.popover.bs-popover-bottom .popover-header::before, .popover.bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 20px; + margin-left: -10px; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.popover.bs-popover-left, .popover.bs-popover-auto[x-placement^="left"] { + margin-right: 0.8rem; +} + +.popover.bs-popover-left .arrow, .popover.bs-popover-auto[x-placement^="left"] .arrow { + right: 0; +} + +.popover.bs-popover-left .arrow::before, .popover.bs-popover-auto[x-placement^="left"] .arrow::before, +.popover.bs-popover-left .arrow::after, .popover.bs-popover-auto[x-placement^="left"] .arrow::after { + margin-top: -0.8rem; + border-right-width: 0; +} + +.popover.bs-popover-left .arrow::before, .popover.bs-popover-auto[x-placement^="left"] .arrow::before { + right: -0.8rem; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.popover.bs-popover-left .arrow::after, .popover.bs-popover-auto[x-placement^="left"] .arrow::after { + right: calc((0.8rem - 1px) * -1); + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + color: inherit; + 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-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-item { + position: relative; + display: none; + -ms-flex-align: center; + align-items: center; + width: 100%; + transition: -webkit-transform 0.6s ease; + transition: transform 0.6s ease; + transition: transform 0.6s ease, -webkit-transform 0.6s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next, +.carousel-item-prev { + position: absolute; + top: 0; +} + +.carousel-item-next.carousel-item-left, +.carousel-item-prev.carousel-item-right { + -webkit-transform: translateX(0); + transform: translateX(0); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-item-next, +.active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.carousel-item-prev, +.active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + 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; +} + +.carousel-control-prev:focus, .carousel-control-prev:hover, +.carousel-control-next:focus, +.carousel-control-next:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -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 { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + background-color: rgba(255, 255, 255, 0.5); +} + +.carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-primary { + background-color: #007bff !important; +} + +a.bg-primary:focus, a.bg-primary:hover { + background-color: #0062cc !important; +} + +.bg-secondary { + background-color: #868e96 !important; +} + +a.bg-secondary:focus, a.bg-secondary:hover { + background-color: #6c757d !important; +} + +.bg-success { + background-color: #28a745 !important; +} + +a.bg-success:focus, a.bg-success:hover { + background-color: #1e7e34 !important; +} + +.bg-info { + background-color: #17a2b8 !important; +} + +a.bg-info:focus, a.bg-info:hover { + background-color: #117a8b !important; +} + +.bg-warning { + background-color: #ffc107 !important; +} + +a.bg-warning:focus, a.bg-warning:hover { + background-color: #d39e00 !important; +} + +.bg-danger { + background-color: #dc3545 !important; +} + +a.bg-danger:focus, a.bg-danger:hover { + background-color: #bd2130 !important; +} + +.bg-light { + background-color: #f8f9fa !important; +} + +a.bg-light:focus, a.bg-light:hover { + background-color: #dae0e5 !important; +} + +.bg-dark { + background-color: #343a40 !important; +} + +a.bg-dark:focus, a.bg-dark:hover { + background-color: #1d2124 !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.border { + border: 1px solid #e9ecef !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: #868e96 !important; +} + +.border-success { + border-color: #28a745 !important; +} + +.border-info { + border-color: #17a2b8 !important; +} + +.border-warning { + border-color: #ffc107 !important; +} + +.border-danger { + border-color: #dc3545 !important; +} + +.border-light { + border-color: #f8f9fa !important; +} + +.border-dark { + border-color: #343a40 !important; +} + +.border-white { + border-color: #fff !important; +} + +.rounded { + border-radius: 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-circle { + border-radius: 50% !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -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; + } +} + +.d-print-block { + display: none !important; +} + +@media print { + .d-print-block { + display: block !important; + } +} + +.d-print-inline { + display: none !important; +} + +@media print { + .d-print-inline { + display: inline !important; + } +} + +.d-print-inline-block { + display: none !important; +} + +@media print { + .d-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .d-print-none { + display: none !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; +} + +.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; + } + .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; + } + .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; + } + .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; + } + .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; + } +} + +.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; + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + -webkit-clip-path: none; + clip-path: none; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.m-0 { + margin: 0 !important; +} + +.mt-0, +.my-0 { + margin-top: 0 !important; +} + +.mr-0, +.mx-0 { + margin-right: 0 !important; +} + +.mb-0, +.my-0 { + margin-bottom: 0 !important; +} + +.ml-0, +.mx-0 { + margin-left: 0 !important; +} + +.m-1 { + margin: 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-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-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-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-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-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } +} + +.text-justify { + text-align: justify !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-light { + font-weight: 300 !important; +} + +.font-weight-normal { + font-weight: 400 !important; +} + +.font-weight-bold { + font-weight: 700 !important; +} + +.font-italic { + font-style: italic !important; +} + +.text-white { + color: #fff !important; +} + +.text-primary { + color: #007bff !important; +} + +a.text-primary:focus, a.text-primary:hover { + color: #0062cc !important; +} + +.text-secondary { + color: #868e96 !important; +} + +a.text-secondary:focus, a.text-secondary:hover { + color: #6c757d !important; +} + +.text-success { + color: #28a745 !important; +} + +a.text-success:focus, a.text-success:hover { + color: #1e7e34 !important; +} + +.text-info { + color: #17a2b8 !important; +} + +a.text-info:focus, a.text-info:hover { + color: #117a8b !important; +} + +.text-warning { + color: #ffc107 !important; +} + +a.text-warning:focus, a.text-warning:hover { + color: #d39e00 !important; +} + +.text-danger { + color: #dc3545 !important; +} + +a.text-danger:focus, a.text-danger:hover { + color: #bd2130 !important; +} + +.text-light { + color: #f8f9fa !important; +} + +a.text-light:focus, a.text-light:hover { + color: #dae0e5 !important; +} + +.text-dark { + color: #343a40 !important; +} + +a.text-dark:focus, a.text-dark:hover { + color: #1d2124 !important; +} + +.text-muted { + color: #868e96 !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/Backend/static/bootstrap/css/bootstrap.css.map b/Backend/static/bootstrap/css/bootstrap.css.map new file mode 100644 index 0000000..77a5c8e --- /dev/null +++ b/Backend/static/bootstrap/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_print.scss","bootstrap.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/mixins/_transition.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_functions.scss","../../scss/_forms.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/mixins/_gradients.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/mixins/_clearfix.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/mixins/_float.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/mixins/_visibility.scss"],"names":[],"mappings":"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JwBY;EIvBZ,0BAjCuK;EAqCvK,sBArC+M;EA2C7M,kDnB/BY;CmBiCf;;ADGD;EC/CA,YJuDc;EKvDZ,0BpBqCa;EmBnCf,sBnBmCe;CkBYd;;AjB5CC;EkBCA,YJiDY;EKvDZ,0BDDoF;EASpF,sBATyH;ClBMnG;;AkBMxB;EAMI,gDnBoBW;CmBlBd;;AAGD;EAEE,0BnBaa;EmBZb,sBnBYa;CmBXd;;AAED;;EAGE,YJwBY;EIvBZ,0BAjCuK;EAqCvK,sBArC+M;EA2C7M,gDnBLW;CmBOd;;ADGD;EC/CA,YJuDc;EKvDZ,0BpBuCa;EmBrCf,sBnBqCe;CkBUd;;AjB5CC;EkBCA,YJiDY;EKvDZ,0BDDoF;EASpF,sBATyH;ClBMnG;;AkBMxB;EAMI,iDnBsBW;CmBpBd;;AAGD;EAEE,0BnBea;EmBdb,sBnBca;CmBbd;;AAED;;EAGE,YJwBY;EIvBZ,0BAjCuK;EAqCvK,sBArC+M;EA2C7M,iDnBHW;CmBKd;;ADGD;EC/CA,YJqDc;EKrDZ,0BpBoCa;EmBlCf,sBnBkCe;CkBad;;AjB5CC;EkBCA,YJ+CY;EKrDZ,0BDDoF;EASpF,sBATyH;ClBMnG;;AkBMxB;EAMI,gDnBmBW;CmBjBd;;AAGD;EAEE,0BnBYa;EmBXb,sBnBWa;CmBVd;;AAED;;EAGE,YJsBY;EIrBZ,0BAjCuK;EAqCvK,sBArC+M;EA2C7M,gDnBNW;CmBQd;;ADGD;EC/CA,YJuDc;EKvDZ,0BpBkCa;EmBhCf,sBnBgCe;CkBed;;AjB5CC;EkBCA,YJiDY;EKvDZ,0BDDoF;EASpF,sBATyH;ClBMnG;;AkBMxB;EAMI,gDnBiBW;CmBfd;;AAGD;EAEE,0BnBUa;EmBTb,sBnBSa;CmBRd;;AAED;;EAGE,YJwBY;EIvBZ,0BAjCuK;EAqCvK,sBArC+M;EA2C7M,gDnBRW;CmBUd;;ADGD;EC/CA,YJqDc;EKrDZ,0BpBMc;EmBJhB,sBnBIgB;CkB2Cf;;AjB5CC;EkBCA,YJ+CY;EKrDZ,0BDDoF;EASpF,sBATyH;ClBMnG;;AkBMxB;EAMI,kDnBXY;CmBaf;;AAGD;EAEE,0BnBlBc;EmBmBd,sBnBnBc;CmBoBf;;AAED;;EAGE,YJsBY;EIrBZ,0BAjCuK;EAqCvK,sBArC+M;EA2C7M,kDnBpCY;CmBsCf;;ADGD;EC/CA,YJuDc;EKvDZ,0BpBac;EmBXhB,sBnBWgB;CkBoCf;;AjB5CC;EkBCA,YJiDY;EKvDZ,0BDDoF;EASpF,sBATyH;ClBMnG;;AkBMxB;EAMI,+CnBJY;CmBMf;;AAGD;EAEE,0BnBXc;EmBYd,sBnBZc;CmBaf;;AAED;;EAGE,YJwBY;EIvBZ,0BAjCuK;EAqCvK,sBArC+M;EA2C7M,+CnB7BY;CmB+Bf;;ADSD;ECLA,enBlBe;EmBmBf,8BAA6B;EAC7B,uBAAsB;EACtB,sBnBrBe;CkB6Bd;;AjBtDC;EkBiDA,YnBjDW;EmBkDX,0BnBzBa;EmB0Bb,sBnB1Ba;CCzBS;;AkBsDxB;EAEE,gDnB/Ba;CmBgCd;;AAED;EAEE,enBpCa;EmBqCb,8BAA6B;CAC9B;;AAED;;EAGE,YnBpEW;EmBqEX,0BnB5Ca;EmB6Cb,sBnB7Ca;EmB+Cb,gDnB/Ca;CmBgDd;;ADzBD;ECLA,enBrCgB;EmBsChB,8BAA6B;EAC7B,uBAAsB;EACtB,sBnBxCgB;CkBgDf;;AjBtDC;EkBiDA,YnBjDW;EmBkDX,0BnB5Cc;EmB6Cd,sBnB7Cc;CCNQ;;AkBsDxB;EAEE,kDnBlDc;CmBmDf;;AAED;EAEE,enBvDc;EmBwDd,8BAA6B;CAC9B;;AAED;;EAGE,YnBpEW;EmBqEX,0BnB/Dc;EmBgEd,sBnBhEc;EmBkEd,kDnBlEc;CmBmEf;;ADzBD;ECLA,enBXe;EmBYf,8BAA6B;EAC7B,uBAAsB;EACtB,sBnBde;CkBsBd;;AjBtDC;EkBiDA,YnBjDW;EmBkDX,0BnBlBa;EmBmBb,sBnBnBa;CChCS;;AkBsDxB;EAEE,gDnBxBa;CmByBd;;AAED;EAEE,enB7Ba;EmB8Bb,8BAA6B;CAC9B;;AAED;;EAGE,YnBpEW;EmBqEX,0BnBrCa;EmBsCb,sBnBtCa;EmBwCb,gDnBxCa;CmByCd;;ADzBD;ECLA,enBTe;EmBUf,8BAA6B;EAC7B,uBAAsB;EACtB,sBnBZe;CkBoBd;;AjBtDC;EkBiDA,YnBjDW;EmBkDX,0BnBhBa;EmBiBb,sBnBjBa;CClCS;;AkBsDxB;EAEE,iDnBtBa;CmBuBd;;AAED;EAEE,enB3Ba;EmB4Bb,8BAA6B;CAC9B;;AAED;;EAGE,YnBpEW;EmBqEX,0BnBnCa;EmBoCb,sBnBpCa;EmBsCb,iDnBtCa;CmBuCd;;ADzBD;ECLA,enBZe;EmBaf,8BAA6B;EAC7B,uBAAsB;EACtB,sBnBfe;CkBuBd;;AjBtDC;EkBiDA,YnBjDW;EmBkDX,0BnBnBa;EmBoBb,sBnBpBa;CC/BS;;AkBsDxB;EAEE,gDnBzBa;CmB0Bd;;AAED;EAEE,enB9Ba;EmB+Bb,8BAA6B;CAC9B;;AAED;;EAGE,YnBpEW;EmBqEX,0BnBtCa;EmBuCb,sBnBvCa;EmByCb,gDnBzCa;CmB0Cd;;ADzBD;ECLA,enBde;EmBef,8BAA6B;EAC7B,uBAAsB;EACtB,sBnBjBe;CkByBd;;AjBtDC;EkBiDA,YnBjDW;EmBkDX,0BnBrBa;EmBsBb,sBnBtBa;CC7BS;;AkBsDxB;EAEE,gDnB3Ba;CmB4Bd;;AAED;EAEE,enBhCa;EmBiCb,8BAA6B;CAC9B;;AAED;;EAGE,YnBpEW;EmBqEX,0BnBxCa;EmByCb,sBnBzCa;EmB2Cb,gDnB3Ca;CmB4Cd;;ADzBD;ECLA,enB1CgB;EmB2ChB,8BAA6B;EAC7B,uBAAsB;EACtB,sBnB7CgB;CkBqDf;;AjBtDC;EkBiDA,enBxCc;EmByCd,0BnBjDc;EmBkDd,sBnBlDc;CCDQ;;AkBsDxB;EAEE,kDnBvDc;CmBwDf;;AAED;EAEE,enB5Dc;EmB6Dd,8BAA6B;CAC9B;;AAED;;EAGE,enB3Dc;EmB4Dd,0BnBpEc;EmBqEd,sBnBrEc;EmBuEd,kDnBvEc;CmBwEf;;ADzBD;ECLA,enBnCgB;EmBoChB,8BAA6B;EAC7B,uBAAsB;EACtB,sBnBtCgB;CkB8Cf;;AjBtDC;EkBiDA,YnBjDW;EmBkDX,0BnB1Cc;EmB2Cd,sBnB3Cc;CCRQ;;AkBsDxB;EAEE,+CnBhDc;CmBiDf;;AAED;EAEE,enBrDc;EmBsDd,8BAA6B;CAC9B;;AAED;;EAGE,YnBpEW;EmBqEX,0BnB7Dc;EmB8Dd,sBnB9Dc;EmBgEd,+CnBhEc;CmBiEf;;ADVH;EACE,iBlB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;G8ByB3B;EAtDT;IxBhKI,gCN6LgC;IM5LhC,iCN4LgC;G8BqBzB;EAlDX;IxBlJI,oCN+KgC;IM9KhC,mCN8KgC;G8BwBzB;EArDX;IAyDU,iBAAgB;GAMjB;EA/DT;;IA6DY,iBAAgB;GACjB;ChC2qHV;;AgC/pHD;EAEI,uB9BoWsC;C8BnWvC;;AnB/LC;EmB4LJ;IAMI,wB9B8WiC;Y8B9WjC,gB9B8WiC;I8B7WjC,4B9B8WuC;Y8B9WvC,oB9B8WuC;G8BvW1C;EAdD;IAUM,sBAAqB;IACrB,YAAW;GACZ;ChCkqHJ;;AiCl6HD;EACE,qBAAa;EAAb,cAAa;EACb,oBAAe;MAAf,gBAAe;EACf,sB/BowBsC;E+BnwBtC,oB/BswBsC;E+BrwBtC,iBAAgB;EAChB,0B/BOgB;EMTd,uBNmMgC;C+B/LnC;;AAED;EAGI,sBAAqB;EACrB,sB/B0vBqC;E+BzvBrC,qB/ByvBqC;E+BxvBrC,e/BCc;E+BAd,aAAiC;CAClC;;AARH;EAiBI,2BAA0B;CAC3B;;AAlBH;EAqBI,sBAAqB;CACtB;;AAtBH;EAyBI,e/BlBc;C+BmBf;;ACpCH;EACE,qBAAa;EAAb,cAAa;E7BGb,gBAAe;EACf,iBAAgB;EGDd,uBNmMgC;CgCnMnC;;AAED;EAGM,eAAc;E1BsBhB,gCNwKgC;EMvKhC,mCNuKgC;CgC5L/B;;AALL;E1BWI,iCNsLgC;EMrLhC,oCNqLgC;CgCvL/B;;AAVL;EAcI,WAAU;EACV,YhCVW;EgCWX,0BhCca;EgCbb,sBhCaa;CgCZd;;AAlBH;EAqBI,ehCVc;EgCWd,qBAAoB;EACpB,uBhClBW;EgCmBX,mBhCijBoC;CgChjBrC;;AAGH;EACE,mBAAkB;EAClB,eAAc;EACd,wBhCohBwC;EgCnhBxC,kBhC8J+B;EgC7J/B,kBhCuhBsC;EgCthBtC,ehCJe;EgCKf,uBhC9Ba;EgC+Bb,uBhCyhBsC;CgCjhBvC;;A/B3BG;E+BsBA,ehCgGgD;EgC/FhD,sBAAqB;EACrB,0BhClCc;EgCmCd,mBhCuhBoC;CC7iBnC;;AgCvBH;EACE,wBjCyjBsC;EiCxjBtC,mBjC2NkD;EiC1NlD,iBjC2L6B;CiC1L9B;;AAIG;E3BoBF,+BNyK+B;EMxK/B,kCNwK+B;CiC3L5B;;AAGD;E3BCF,gCNuL+B;EMtL/B,mCNsL+B;CiCtL5B;;AAfL;EACE,wBjCujBqC;EiCtjBrC,oBjC4NkD;EiC3NlD,iBjC4L6B;CiC3L9B;;AAIG;E3BoBF,+BN0K+B;EMzK/B,kCNyK+B;CiC5L5B;;AAGD;E3BCF,gCNwL+B;EMvL/B,mCNuL+B;CiCvL5B;;ACbP;EACE,sBAAqB;EACrB,sBlCmpBsC;EkClpBtC,elC+oBqC;EkC9oBrC,iBlC4N+B;EkC3N/B,eAAc;EACd,mBAAkB;EAClB,oBAAmB;EACnB,yBAAwB;E5BTtB,uBNmMgC;CkCnLnC;;AAfD;EAaI,cAAa;CACd;;AAIH;EACE,mBAAkB;EAClB,UAAS;CACV;;AAMD;EACE,qBlC4nBsC;EkC3nBtC,oBlC2nBsC;EMzpBpC,qBN4pBqC;CkC5nBxC;;AAOC;EC1CA,YpB4Dc;EoB3Dd,0BnCkCe;CkCSd;;AjCtBC;EkCjBE,YpBuDU;EoBtDV,sBAAqB;EACrB,0BAAkC;ClCkBnC;;AiCiBH;EC1CA,YpB4Dc;EoB3Dd,0BnCegB;CkC4Bf;;AjCtBC;EkCjBE,YpBuDU;EoBtDV,sBAAqB;EACrB,0BAAkC;ClCkBnC;;AiCiBH;EC1CA,YpB4Dc;EoB3Dd,0BnCyCe;CkCEd;;AjCtBC;EkCjBE,YpBuDU;EoBtDV,sBAAqB;EACrB,0BAAkC;ClCkBnC;;AiCiBH;EC1CA,YpB4Dc;EoB3Dd,0BnC2Ce;CkCAd;;AjCtBC;EkCjBE,YpBuDU;EoBtDV,sBAAqB;EACrB,0BAAkC;ClCkBnC;;AiCiBH;EC1CA,YpB0Dc;EoBzDd,0BnCwCe;CkCGd;;AjCtBC;EkCjBE,YpBqDU;EoBpDV,sBAAqB;EACrB,0BAAkC;ClCkBnC;;AiCiBH;EC1CA,YpB4Dc;EoB3Dd,0BnCsCe;CkCKd;;AjCtBC;EkCjBE,YpBuDU;EoBtDV,sBAAqB;EACrB,0BAAkC;ClCkBnC;;AiCiBH;EC1CA,YpB0Dc;EoBzDd,0BnCUgB;CkCiCf;;AjCtBC;EkCjBE,YpBqDU;EoBpDV,sBAAqB;EACrB,0BAAkC;ClCkBnC;;AiCiBH;EC1CA,YpB4Dc;EoB3Dd,0BnCiBgB;CkC0Bf;;AjCtBC;EkCjBE,YpBuDU;EoBtDV,sBAAqB;EACrB,0BAAkC;ClCkBnC;;AmC1BL;EACE,mBAAoD;EACpD,oBpCklBsC;EoCjlBtC,0BpCUgB;EMTd,sBNoM+B;CoC/LlC;;AzB+CG;EyBxDJ;IAOI,mBpC6kBoC;GoC3kBvC;CtCyoIA;;AsCvoID;EACE,iBAAgB;EAChB,gBAAe;E9BTb,iB8BUsB;CACzB;;ACXD;EACE,mBAAkB;EAClB,yBrCisByC;EqChsBzC,oBrCisBsC;EqChsBtC,8BAA6C;E/BJ3C,uBNmMgC;CqC7LnC;;AAGD;EAEE,eAAc;CACf;;AAGD;EACE,iBrCiN+B;CqChNhC;;AAOD;EAGI,mBAAkB;EAClB,OAAM;EACN,SAAQ;EACR,yBrCqqBuC;EqCpqBvC,eAAc;CACf;;AASD;EC5CA,evBmFgE;EK9E9D,0BL8E8D;EuBjFhE,sBvBiFgE;CsBrC/D;;AC1CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADkCD;EC5CA,evBmFgE;EK9E9D,0BL8E8D;EuBjFhE,sBvBiFgE;CsBrC/D;;AC1CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADkCD;EC5CA,evBmFgE;EK9E9D,0BL8E8D;EuBjFhE,sBvBiFgE;CsBrC/D;;AC1CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADkCD;EC5CA,evBmFgE;EK9E9D,0BL8E8D;EuBjFhE,sBvBiFgE;CsBrC/D;;AC1CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADkCD;EC5CA,evBmFgE;EK9E9D,0BL8E8D;EuBjFhE,sBvBiFgE;CsBrC/D;;AC1CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADkCD;EC5CA,evBmFgE;EK9E9D,0BL8E8D;EuBjFhE,sBvBiFgE;CsBrC/D;;AC1CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADkCD;EC5CA,evBmFgE;EK9E9D,0BL8E8D;EuBjFhE,sBvBiFgE;CsBrC/D;;AC1CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ADkCD;EC5CA,evBmFgE;EK9E9D,0BL8E8D;EuBjFhE,sBvBiFgE;CsBrC/D;;AC1CD;EACE,0BAAqC;CACtC;;AAED;EACE,eAA0B;CAC3B;;ACXH;EACE;IAAO,4BAAuC;GzCoyI7C;EyCnyID;IAAK,yBAAwB;GzCsyI5B;CACF;;AyCzyID;EACE;IAAO,4BAAuC;GzCoyI7C;EyCnyID;IAAK,yBAAwB;GzCsyI5B;CACF;;AyCpyID;EACE,qBAAa;EAAb,cAAa;EACb,avCysBsC;EuCxsBtC,iBAAgB;EAChB,mBvCwsByD;EuCvsBzD,0BvCGgB;EMTd,uBNmMgC;CuC3LnC;;AAED;EACE,qBAAa;EAAb,cAAa;EACb,uBAAmB;MAAnB,oBAAmB;EACnB,sBAAuB;MAAvB,wBAAuB;EACvB,YvCPa;EuCQb,0BvCiBe;CuChBhB;;AAED;EnBqBE,sMAA6I;EmBnB7I,2BvCwrBsC;CuCvrBvC;;AAED;EACE,2DvC2rBoD;UuC3rBpD,mDvC2rBoD;CuC1rBrD;;AC7BD;EACE,qBAAa;EAAb,cAAa;EACb,sBAAuB;MAAvB,wBAAuB;CACxB;;AAED;EACE,YAAO;MAAP,QAAO;CACR;;ACHD;EACE,qBAAa;EAAb,cAAa;EACb,2BAAsB;MAAtB,uBAAsB;EAGtB,gBAAe;EACf,iBAAgB;CACjB;;AAQD;EACE,YAAW;EACX,ezCHgB;EyCIhB,oBAAmB;CAapB;;AxCZG;EwCGA,ezCRc;EyCSd,sBAAqB;EACrB,0BzChBc;CCcb;;AwCPL;EAaI,ezCZc;EyCad,0BzCpBc;CyCqBf;;AAQH;EACE,mBAAkB;EAClB,eAAc;EACd,yBzCqrByC;EyCnrBzC,oBzCqJ+B;EyCpJ/B,uBzCrCa;EyCsCb,uCzC5Ba;CyCwDd;;AAnCD;EnChCI,gCN6LgC;EM5LhC,iCN4LgC;CyClJjC;;AAXH;EAcI,iBAAgB;EnChChB,oCN+KgC;EM9KhC,mCN8KgC;CyC7IjC;;AxCnCC;EwCsCA,sBAAqB;CxCnCpB;;AwCgBL;EAwBI,ezCjDc;EyCkDd,uBzCxDW;CyCyDZ;;AA1BH;EA8BI,WAAU;EACV,YzC9DW;EyC+DX,0BzCtCa;EyCuCb,sBzCvCa;CyCwCd;;AASH;EAEI,gBAAe;EACf,eAAc;EACd,iBAAgB;CACjB;;AALH;EASM,cAAa;CACd;;AAVL;EAeM,iBAAgB;CACjB;;AClGH;EACE,e3BgF8D;E2B/E9D,0B3B+E8D;C2B9E/D;;AAED;;EAEE,e3B0E8D;C2B9D/D;;AzCCC;;;EyCVE,e3BuE4D;E2BtE5D,0BAAyC;CzCY1C;;AyClBH;;EAUI,YAAW;EACX,0B3BiE4D;E2BhE5D,sB3BgE4D;C2B/D7D;;AAlBH;EACE,e3BgF8D;E2B/E9D,0B3B+E8D;C2B9E/D;;AAED;;EAEE,e3B0E8D;C2B9D/D;;AzCCC;;;EyCVE,e3BuE4D;E2BtE5D,0BAAyC;CzCY1C;;AyClBH;;EAUI,YAAW;EACX,0B3BiE4D;E2BhE5D,sB3BgE4D;C2B/D7D;;AAlBH;EACE,e3BgF8D;E2B/E9D,0B3B+E8D;C2B9E/D;;AAED;;EAEE,e3B0E8D;C2B9D/D;;AzCCC;;;EyCVE,e3BuE4D;E2BtE5D,0BAAyC;CzCY1C;;AyClBH;;EAUI,YAAW;EACX,0B3BiE4D;E2BhE5D,sB3BgE4D;C2B/D7D;;AAlBH;EACE,e3BgF8D;E2B/E9D,0B3B+E8D;C2B9E/D;;AAED;;EAEE,e3B0E8D;C2B9D/D;;AzCCC;;;EyCVE,e3BuE4D;E2BtE5D,0BAAyC;CzCY1C;;AyClBH;;EAUI,YAAW;EACX,0B3BiE4D;E2BhE5D,sB3BgE4D;C2B/D7D;;AAlBH;EACE,e3BgF8D;E2B/E9D,0B3B+E8D;C2B9E/D;;AAED;;EAEE,e3B0E8D;C2B9D/D;;AzCCC;;;EyCVE,e3BuE4D;E2BtE5D,0BAAyC;CzCY1C;;AyClBH;;EAUI,YAAW;EACX,0B3BiE4D;E2BhE5D,sB3BgE4D;C2B/D7D;;AAlBH;EACE,e3BgF8D;E2B/E9D,0B3B+E8D;C2B9E/D;;AAED;;EAEE,e3B0E8D;C2B9D/D;;AzCCC;;;EyCVE,e3BuE4D;E2BtE5D,0BAAyC;CzCY1C;;AyClBH;;EAUI,YAAW;EACX,0B3BiE4D;E2BhE5D,sB3BgE4D;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","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"print\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"utilities\";\n",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n// Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request:\n// http://www.phpied.com/delay-loading-your-print-css/\n// ==========================================================================\n\n@if $enable-print-styles {\n @media print {\n *,\n *::before,\n *::after {\n // Bootstrap specific; comment out `color` and `background`\n //color: #000 !important; // Black prints faster: http://www.sanbeiji.com/archives/953\n text-shadow: none !important;\n //background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n // Bootstrap specific; comment the following selector out\n //a[href]::after {\n // content: \" (\" attr(href) \")\";\n //}\n\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n\n // Bootstrap specific; comment the following selector out\n //\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n //\n\n //a[href^=\"#\"]::after,\n //a[href^=\"javascript:\"]::after {\n // content: \"\";\n //}\n\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: $border-width solid #999; // Bootstrap custom code; using `$border-width` instead of 1px\n page-break-inside: avoid;\n }\n\n //\n // Printing Tables:\n // http://css-discuss.incutio.com/wiki/Printing_Tables\n //\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .badge {\n border: $border-width solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n }\n}\n","/*!\n * Bootstrap v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #868e96;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #868e96;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n --font-family-monospace: \"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #868e96;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: .5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-family: inherit;\n font-weight: 500;\n line-height: 1.2;\n color: inherit;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 5px;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #868e96;\n}\n\n.blockquote-footer::before {\n content: \"\\2014 \\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 0.25rem;\n transition: all 0.2s ease-in-out;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #868e96;\n}\n\ncode,\nkbd,\npre,\nsamp {\n font-family: \"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\ncode {\n padding: 0.2rem 0.4rem;\n font-size: 90%;\n color: #bd4147;\n background-color: #f8f9fa;\n border-radius: 0.25rem;\n}\n\na > code {\n padding: 0;\n color: inherit;\n background-color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 90%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n font-size: 90%;\n color: #212529;\n}\n\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n background-color: transparent;\n border-radius: 0;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.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,\n.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,\n.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,\n.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,\n.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,\n.col-xl-auto {\n position: relative;\n width: 100%;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 1rem;\n background-color: transparent;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #e9ecef;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #e9ecef;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #e9ecef;\n}\n\n.table .table {\n background-color: #fff;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #e9ecef;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #e9ecef;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #dddfe2;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #cfd2d6;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #cfd2d6;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #212529;\n border-color: #32383e;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #e9ecef;\n}\n\n.table-dark {\n color: #fff;\n background-color: #212529;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #32383e;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-sm.table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-md.table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-lg.table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n }\n .table-responsive-xl.table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n\n.table-responsive.table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-image: none;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: none;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #868e96;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:not([size]):not([multiple]) {\n height: calc(2.25rem + 2px);\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.col-form-legend {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n font-size: 1rem;\n}\n\n.form-control-plaintext {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.5;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control,\n.input-group-sm > .form-control-plaintext.input-group-addon,\n.input-group-sm > .input-group-btn > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control,\n.input-group-lg > .form-control-plaintext.input-group-addon,\n.input-group-lg > .input-group-btn > .form-control-plaintext.btn {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\nselect.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]),\n.input-group-sm > select.input-group-addon:not([size]):not([multiple]),\n.input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) {\n height: calc(1.8125rem + 2px);\n}\n\n.form-control-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]),\n.input-group-lg > select.input-group-addon:not([size]):not([multiple]),\n.input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) {\n height: calc(2.875rem + 2px);\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n margin-bottom: 0.5rem;\n}\n\n.form-check.disabled .form-check-label {\n color: #868e96;\n}\n\n.form-check-label {\n padding-left: 1.25rem;\n margin-bottom: 0;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.25rem;\n margin-left: -1.25rem;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-label {\n vertical-align: middle;\n}\n\n.valid-feedback {\n display: none;\n margin-top: .25rem;\n font-size: .875rem;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n width: 250px;\n padding: .5rem;\n margin-top: .1rem;\n font-size: .875rem;\n line-height: 1;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.8);\n border-radius: .2rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid, .was-validated\n.custom-select:valid,\n.custom-select.is-valid {\n border-color: #28a745;\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated\n.custom-select:valid:focus,\n.custom-select.is-valid:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip, .was-validated\n.custom-select:valid ~ .valid-feedback,\n.was-validated\n.custom-select:valid ~ .valid-tooltip,\n.custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid + .form-check-label, .form-check-input.is-valid + .form-check-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-indicator, .custom-control-input.is-valid ~ .custom-control-indicator {\n background-color: rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-description, .custom-control-input.is-valid ~ .custom-control-description {\n color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-control, .custom-file-input.is-valid ~ .custom-file-control {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-control::before, .custom-file-input.is-valid ~ .custom-file-control::before {\n border-color: inherit;\n}\n\n.was-validated .custom-file-input:valid:focus, .custom-file-input.is-valid:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n margin-top: .25rem;\n font-size: .875rem;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n width: 250px;\n padding: .5rem;\n margin-top: .1rem;\n font-size: .875rem;\n line-height: 1;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.8);\n border-radius: .2rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated\n.custom-select:invalid,\n.custom-select.is-invalid {\n border-color: #dc3545;\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated\n.custom-select:invalid:focus,\n.custom-select.is-invalid:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip, .was-validated\n.custom-select:invalid ~ .invalid-feedback,\n.was-validated\n.custom-select:invalid ~ .invalid-tooltip,\n.custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid + .form-check-label, .form-check-input.is-invalid + .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-indicator, .custom-control-input.is-invalid ~ .custom-control-indicator {\n background-color: rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-description, .custom-control-input.is-invalid ~ .custom-control-description {\n color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-control, .custom-file-input.is-invalid ~ .custom-file-control {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-control::before, .custom-file-input.is-invalid ~ .custom-file-control::before {\n border-color: inherit;\n}\n\n.was-validated .custom-file-input:invalid:focus, .custom-file-input.is-invalid:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n margin-top: 0;\n margin-bottom: 0;\n }\n .form-inline .form-check-label {\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n display: flex;\n align-items: center;\n justify-content: center;\n padding-left: 0;\n }\n .form-inline .custom-control-indicator {\n position: static;\n display: inline-block;\n margin-right: 0.25rem;\n vertical-align: text-bottom;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n user-select: none;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n.btn:focus, .btn:hover {\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: .65;\n}\n\n.btn:not([disabled]):not(.disabled):active, .btn:not([disabled]):not(.disabled).active {\n background-image: none;\n}\n\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not([disabled]):not(.disabled):active, .btn-primary:not([disabled]):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #868e96;\n border-color: #868e96;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #727b84;\n border-color: #6c757d;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n background-color: #868e96;\n border-color: #868e96;\n}\n\n.btn-secondary:not([disabled]):not(.disabled):active, .btn-secondary:not([disabled]):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #666e76;\n box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not([disabled]):not(.disabled):active, .btn-success:not([disabled]):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not([disabled]):not(.disabled):active, .btn-info:not([disabled]):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-warning {\n color: #111;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #111;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not([disabled]):not(.disabled):active, .btn-warning:not([disabled]):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #111;\n background-color: #d39e00;\n border-color: #c69500;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not([disabled]):not(.disabled):active, .btn-danger:not([disabled]):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-light {\n color: #111;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #111;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not([disabled]):not(.disabled):active, .btn-light:not([disabled]):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #111;\n background-color: #dae0e5;\n border-color: #d3d9df;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not([disabled]):not(.disabled):active, .btn-dark:not([disabled]):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n background-color: transparent;\n background-image: none;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not([disabled]):not(.disabled):active, .btn-outline-primary:not([disabled]):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #868e96;\n background-color: transparent;\n background-image: none;\n border-color: #868e96;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #868e96;\n border-color: #868e96;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #868e96;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not([disabled]):not(.disabled):active, .btn-outline-secondary:not([disabled]):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #868e96;\n border-color: #868e96;\n box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n background-color: transparent;\n background-image: none;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not([disabled]):not(.disabled):active, .btn-outline-success:not([disabled]):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n background-color: transparent;\n background-image: none;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not([disabled]):not(.disabled):active, .btn-outline-info:not([disabled]):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n background-color: transparent;\n background-image: none;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #fff;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not([disabled]):not(.disabled):active, .btn-outline-warning:not([disabled]):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #fff;\n background-color: #ffc107;\n border-color: #ffc107;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n background-color: transparent;\n background-image: none;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not([disabled]):not(.disabled):active, .btn-outline-danger:not([disabled]):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n background-color: transparent;\n background-image: none;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not([disabled]):not(.disabled):active, .btn-outline-light:not([disabled]):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n background-color: transparent;\n background-image: none;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not([disabled]):not(.disabled):active, .btn-outline-dark:not([disabled]):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n background-color: transparent;\n border-color: transparent;\n}\n\n.btn-link:focus, .btn-link.focus {\n border-color: transparent;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #868e96;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n opacity: 0;\n transition: opacity 0.15s linear;\n}\n\n.fade.show {\n opacity: 1;\n}\n\n.collapse {\n display: none;\n}\n\n.collapse.show {\n display: block;\n}\n\ntr.collapse.show {\n display: table-row;\n}\n\ntbody.collapse.show {\n display: table-row-group;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n.dropup,\n.dropdown {\n position: relative;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropup .dropdown-menu {\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background: none;\n border: 0;\n}\n\n.dropdown-item:focus, .dropdown-item:hover {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #868e96;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #868e96;\n white-space: nowrap;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 0 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 2;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group,\n.btn-group-vertical .btn + .btn,\n.btn-group-vertical .btn + .btn-group,\n.btn-group-vertical .btn-group + .btn,\n.btn-group-vertical .btn-group + .btn-group {\n margin-left: -1px;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group > .btn-group {\n float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn + .dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.btn + .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical .btn,\n.btn-group-vertical .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group .form-control {\n position: relative;\n z-index: 2;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover {\n z-index: 3;\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: flex;\n align-items: center;\n}\n\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n\n.input-group-addon,\n.input-group-btn {\n white-space: nowrap;\n}\n\n.input-group-addon {\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-addon.form-control-sm,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .input-group-addon.btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.2rem;\n}\n\n.input-group-addon.form-control-lg,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .input-group-addon.btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.3rem;\n}\n\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group .form-control:not(:last-child),\n.input-group-addon:not(:last-child),\n.input-group-btn:not(:last-child) > .btn,\n.input-group-btn:not(:last-child) > .btn-group > .btn,\n.input-group-btn:not(:last-child) > .dropdown-toggle,\n.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group-addon:not(:last-child) {\n border-right: 0;\n}\n\n.input-group .form-control:not(:first-child),\n.input-group-addon:not(:first-child),\n.input-group-btn:not(:first-child) > .btn,\n.input-group-btn:not(:first-child) > .btn-group > .btn,\n.input-group-btn:not(:first-child) > .dropdown-toggle,\n.input-group-btn:not(:last-child) > .btn:not(:first-child),\n.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.form-control + .input-group-addon:not(:first-child) {\n border-left: 0;\n}\n\n.input-group-btn {\n position: relative;\n align-items: stretch;\n font-size: 0;\n white-space: nowrap;\n}\n\n.input-group-btn > .btn {\n position: relative;\n}\n\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n\n.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover {\n z-index: 3;\n}\n\n.input-group-btn:first-child > .btn + .btn {\n margin-left: 0;\n}\n\n.input-group-btn:not(:last-child) > .btn,\n.input-group-btn:not(:last-child) > .btn-group {\n margin-right: -1px;\n}\n\n.input-group-btn:not(:first-child) > .btn,\n.input-group-btn:not(:first-child) > .btn-group {\n z-index: 2;\n margin-left: 0;\n}\n\n.input-group-btn:not(:first-child) > .btn:first-child,\n.input-group-btn:not(:first-child) > .btn-group:first-child {\n margin-left: -1px;\n}\n\n.input-group-btn:not(:first-child) > .btn:focus, .input-group-btn:not(:first-child) > .btn:active, .input-group-btn:not(:first-child) > .btn:hover,\n.input-group-btn:not(:first-child) > .btn-group:focus,\n.input-group-btn:not(:first-child) > .btn-group:active,\n.input-group-btn:not(:first-child) > .btn-group:hover {\n z-index: 3;\n}\n\n.custom-control {\n position: relative;\n display: inline-flex;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-indicator {\n color: #fff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-indicator {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:active ~ .custom-control-indicator {\n color: #fff;\n background-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-indicator {\n background-color: #e9ecef;\n}\n\n.custom-control-input:disabled ~ .custom-control-description {\n color: #868e96;\n}\n\n.custom-control-indicator {\n position: absolute;\n top: 0.25rem;\n left: 0;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n user-select: none;\n background-color: #ddd;\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 50% 50%;\n}\n\n.custom-checkbox .custom-control-indicator {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-indicator {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator {\n background-color: #007bff;\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\");\n}\n\n.custom-radio .custom-control-indicator {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-indicator {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\");\n}\n\n.custom-controls-stacked {\n display: flex;\n flex-direction: column;\n}\n\n.custom-controls-stacked .custom-control {\n margin-bottom: 0.25rem;\n}\n\n.custom-controls-stacked .custom-control + .custom-control {\n margin-left: 0;\n}\n\n.custom-select {\n display: inline-block;\n max-width: 100%;\n height: calc(2.25rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right 0.75rem center;\n background-size: 8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: none;\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple] {\n height: auto;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #868e96;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n opacity: 0;\n}\n\n.custom-select-sm {\n height: calc(1.8125rem + 2px);\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n font-size: 75%;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n max-width: 100%;\n height: calc(2.25rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n min-width: 14rem;\n max-width: 100%;\n height: calc(2.25rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-control {\n box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.2rem #007bff;\n}\n\n.custom-file-control {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 5;\n height: calc(2.25rem + 2px);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n pointer-events: none;\n user-select: none;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-control:lang(en):empty::after {\n content: \"Choose file...\";\n}\n\n.custom-file-control::before {\n position: absolute;\n top: -1px;\n right: -1px;\n bottom: -1px;\n z-index: 6;\n display: block;\n height: calc(2.25rem + 2px);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-file-control:lang(en)::before {\n content: \"Browse\";\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:focus, .nav-link:hover {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #868e96;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover {\n border-color: #e9ecef #e9ecef #ddd;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #868e96;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #ddd #ddd #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:focus, .navbar-brand:hover {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:focus, .navbar-toggler:hover {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu-right {\n right: 0;\n left: auto;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: .5rem;\n padding-left: .5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n }\n}\n\n@media (max-width: 767px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu-right {\n right: 0;\n left: auto;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: .5rem;\n padding-left: .5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n }\n}\n\n@media (max-width: 991px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu-right {\n right: 0;\n left: auto;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: .5rem;\n padding-left: .5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n }\n}\n\n@media (max-width: 1199px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu-right {\n right: 0;\n left: auto;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: .5rem;\n padding-left: .5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: .5rem;\n padding-left: .5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-expand .dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:focus, .navbar-light .navbar-text a:hover {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:focus, .navbar-dark .navbar-text a:hover {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: flex;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n display: flex;\n flex: 1 0 0%;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: flex;\n flex-direction: column;\n}\n\n.card-group .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n flex-flow: row wrap;\n }\n .card-group .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group .card:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group .card:first-child .card-img-top {\n border-top-right-radius: 0;\n }\n .card-group .card:first-child .card-img-bottom {\n border-bottom-right-radius: 0;\n }\n .card-group .card:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group .card:last-child .card-img-top {\n border-top-left-radius: 0;\n }\n .card-group .card:last-child .card-img-bottom {\n border-bottom-left-radius: 0;\n }\n .card-group .card:only-child {\n border-radius: 0.25rem;\n }\n .card-group .card:only-child .card-img-top {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n }\n .card-group .card:only-child .card-img-bottom {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n }\n .card-group .card:not(:first-child):not(:last-child):not(:only-child) {\n border-radius: 0;\n }\n .card-group .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,\n .card-group .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom {\n border-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n color: #868e96;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #868e96;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #868e96;\n pointer-events: none;\n background-color: #fff;\n border-color: #ddd;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n\n.page-link:focus, .page-link:hover {\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #ddd;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\n.badge-primary[href]:focus, .badge-primary[href]:hover {\n color: #fff;\n text-decoration: none;\n background-color: #0062cc;\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #868e96;\n}\n\n.badge-secondary[href]:focus, .badge-secondary[href]:hover {\n color: #fff;\n text-decoration: none;\n background-color: #6c757d;\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\n.badge-success[href]:focus, .badge-success[href]:hover {\n color: #fff;\n text-decoration: none;\n background-color: #1e7e34;\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\n.badge-info[href]:focus, .badge-info[href]:hover {\n color: #fff;\n text-decoration: none;\n background-color: #117a8b;\n}\n\n.badge-warning {\n color: #111;\n background-color: #ffc107;\n}\n\n.badge-warning[href]:focus, .badge-warning[href]:hover {\n color: #111;\n text-decoration: none;\n background-color: #d39e00;\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\n.badge-danger[href]:focus, .badge-danger[href]:hover {\n color: #fff;\n text-decoration: none;\n background-color: #bd2130;\n}\n\n.badge-light {\n color: #111;\n background-color: #f8f9fa;\n}\n\n.badge-light[href]:focus, .badge-light[href]:hover {\n color: #111;\n text-decoration: none;\n background-color: #dae0e5;\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.badge-dark[href]:focus, .badge-dark[href]:hover {\n color: #fff;\n text-decoration: none;\n background-color: #1d2124;\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #464a4e;\n background-color: #e7e8ea;\n border-color: #dddfe2;\n}\n\n.alert-secondary hr {\n border-top-color: #cfd2d6;\n}\n\n.alert-secondary .alert-link {\n color: #2e3133;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n background-color: #007bff;\n}\n\n.progress-bar-striped {\n 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);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:focus, .list-group-item-action:hover {\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item:focus, .list-group-item:hover {\n text-decoration: none;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #868e96;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\na.list-group-item-primary,\nbutton.list-group-item-primary {\n color: #004085;\n}\n\na.list-group-item-primary:focus, a.list-group-item-primary:hover,\nbutton.list-group-item-primary:focus,\nbutton.list-group-item-primary:hover {\n color: #004085;\n background-color: #9fcdff;\n}\n\na.list-group-item-primary.active,\nbutton.list-group-item-primary.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #464a4e;\n background-color: #dddfe2;\n}\n\na.list-group-item-secondary,\nbutton.list-group-item-secondary {\n color: #464a4e;\n}\n\na.list-group-item-secondary:focus, a.list-group-item-secondary:hover,\nbutton.list-group-item-secondary:focus,\nbutton.list-group-item-secondary:hover {\n color: #464a4e;\n background-color: #cfd2d6;\n}\n\na.list-group-item-secondary.active,\nbutton.list-group-item-secondary.active {\n color: #fff;\n background-color: #464a4e;\n border-color: #464a4e;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #155724;\n}\n\na.list-group-item-success:focus, a.list-group-item-success:hover,\nbutton.list-group-item-success:focus,\nbutton.list-group-item-success:hover {\n color: #155724;\n background-color: #b1dfbb;\n}\n\na.list-group-item-success.active,\nbutton.list-group-item-success.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #0c5460;\n}\n\na.list-group-item-info:focus, a.list-group-item-info:hover,\nbutton.list-group-item-info:focus,\nbutton.list-group-item-info:hover {\n color: #0c5460;\n background-color: #abdde5;\n}\n\na.list-group-item-info.active,\nbutton.list-group-item-info.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #856404;\n}\n\na.list-group-item-warning:focus, a.list-group-item-warning:hover,\nbutton.list-group-item-warning:focus,\nbutton.list-group-item-warning:hover {\n color: #856404;\n background-color: #ffe8a1;\n}\n\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #721c24;\n}\n\na.list-group-item-danger:focus, a.list-group-item-danger:hover,\nbutton.list-group-item-danger:focus,\nbutton.list-group-item-danger:hover {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\na.list-group-item-light,\nbutton.list-group-item-light {\n color: #818182;\n}\n\na.list-group-item-light:focus, a.list-group-item-light:hover,\nbutton.list-group-item-light:focus,\nbutton.list-group-item-light:hover {\n color: #818182;\n background-color: #ececf6;\n}\n\na.list-group-item-light.active,\nbutton.list-group-item-light.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\na.list-group-item-dark,\nbutton.list-group-item-dark {\n color: #1b1e21;\n}\n\na.list-group-item-dark:focus, a.list-group-item-dark:hover,\nbutton.list-group-item-dark:focus,\nbutton.list-group-item-dark:hover {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\na.list-group-item-dark.active,\nbutton.list-group-item-dark.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:focus, .close:hover {\n color: #000;\n text-decoration: none;\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n outline: 0;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -25%);\n}\n\n.modal.show .modal-dialog {\n transform: translate(0, 0);\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n pointer-events: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 15px;\n border-bottom: 1px solid #e9ecef;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 15px;\n margin: -15px -15px -15px auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 15px;\n}\n\n.modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 15px;\n border-top: 1px solid #e9ecef;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 30px auto;\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg {\n max-width: 800px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 5px;\n height: 5px;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n border-color: transparent;\n border-style: solid;\n}\n\n.tooltip.bs-tooltip-top, .tooltip.bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 5px 0;\n}\n\n.tooltip.bs-tooltip-top .arrow, .tooltip.bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.tooltip.bs-tooltip-top .arrow::before, .tooltip.bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n margin-left: -3px;\n content: \"\";\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n\n.tooltip.bs-tooltip-right, .tooltip.bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 5px;\n}\n\n.tooltip.bs-tooltip-right .arrow, .tooltip.bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n}\n\n.tooltip.bs-tooltip-right .arrow::before, .tooltip.bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n margin-top: -3px;\n content: \"\";\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n\n.tooltip.bs-tooltip-bottom, .tooltip.bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 5px 0;\n}\n\n.tooltip.bs-tooltip-bottom .arrow, .tooltip.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.tooltip.bs-tooltip-bottom .arrow::before, .tooltip.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n margin-left: -3px;\n content: \"\";\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n\n.tooltip.bs-tooltip-left, .tooltip.bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 5px;\n}\n\n.tooltip.bs-tooltip-left .arrow, .tooltip.bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n}\n\n.tooltip.bs-tooltip-left .arrow::before, .tooltip.bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n right: 0;\n margin-top: -3px;\n content: \"\";\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.popover .arrow::before,\n.popover .arrow::after {\n position: absolute;\n display: block;\n border-color: transparent;\n border-style: solid;\n}\n\n.popover .arrow::before {\n content: \"\";\n border-width: 0.8rem;\n}\n\n.popover .arrow::after {\n content: \"\";\n border-width: 0.8rem;\n}\n\n.popover.bs-popover-top, .popover.bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.8rem;\n}\n\n.popover.bs-popover-top .arrow, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.popover.bs-popover-top .arrow::before, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow::before,\n.popover.bs-popover-top .arrow::after, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n border-bottom-width: 0;\n}\n\n.popover.bs-popover-top .arrow::before, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow::before {\n bottom: -0.8rem;\n margin-left: -0.8rem;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.popover.bs-popover-top .arrow::after, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n bottom: calc((0.8rem - 1px) * -1);\n margin-left: -0.8rem;\n border-top-color: #fff;\n}\n\n.popover.bs-popover-right, .popover.bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.8rem;\n}\n\n.popover.bs-popover-right .arrow, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n}\n\n.popover.bs-popover-right .arrow::before, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow::before,\n.popover.bs-popover-right .arrow::after, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n margin-top: -0.8rem;\n border-left-width: 0;\n}\n\n.popover.bs-popover-right .arrow::before, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow::before {\n left: -0.8rem;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.popover.bs-popover-right .arrow::after, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n left: calc((0.8rem - 1px) * -1);\n border-right-color: #fff;\n}\n\n.popover.bs-popover-bottom, .popover.bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.8rem;\n}\n\n.popover.bs-popover-bottom .arrow, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.popover.bs-popover-bottom .arrow::before, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow::before,\n.popover.bs-popover-bottom .arrow::after, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n margin-left: -0.8rem;\n border-top-width: 0;\n}\n\n.popover.bs-popover-bottom .arrow::before, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow::before {\n top: -0.8rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.popover.bs-popover-bottom .arrow::after, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n top: calc((0.8rem - 1px) * -1);\n border-bottom-color: #fff;\n}\n\n.popover.bs-popover-bottom .popover-header::before, .popover.bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 20px;\n margin-left: -10px;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.popover.bs-popover-left, .popover.bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.8rem;\n}\n\n.popover.bs-popover-left .arrow, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n}\n\n.popover.bs-popover-left .arrow::before, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow::before,\n.popover.bs-popover-left .arrow::after, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n margin-top: -0.8rem;\n border-right-width: 0;\n}\n\n.popover.bs-popover-left .arrow::before, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow::before {\n right: -0.8rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.popover.bs-popover-left .arrow::after, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n right: calc((0.8rem - 1px) * -1);\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n color: inherit;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-item {\n position: relative;\n display: none;\n align-items: center;\n width: 100%;\n transition: transform 0.6s ease;\n backface-visibility: hidden;\n perspective: 1000px;\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next,\n.carousel-item-prev {\n position: absolute;\n top: 0;\n}\n\n.carousel-item-next.carousel-item-left,\n.carousel-item-prev.carousel-item-right {\n transform: translateX(0);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-next.carousel-item-left,\n .carousel-item-prev.carousel-item-right {\n transform: translate3d(0, 0, 0);\n }\n}\n\n.carousel-item-next,\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-next,\n .active.carousel-item-right {\n transform: translate3d(100%, 0, 0);\n }\n}\n\n.carousel-item-prev,\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n@supports (transform-style: preserve-3d) {\n .carousel-item-prev,\n .active.carousel-item-left {\n transform: translate3d(-100%, 0, 0);\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n}\n\n.carousel-control-prev:focus, .carousel-control-prev:hover,\n.carousel-control-next:focus,\n.carousel-control-next:hover {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: .9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: transparent no-repeat center center;\n background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 10px;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n position: relative;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n background-color: rgba(255, 255, 255, 0.5);\n}\n\n.carousel-indicators li::before {\n position: absolute;\n top: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n}\n\n.carousel-indicators li::after {\n position: absolute;\n bottom: -10px;\n left: 0;\n display: inline-block;\n width: 100%;\n height: 10px;\n content: \"\";\n}\n\n.carousel-indicators .active {\n background-color: #fff;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:focus, a.bg-primary:hover {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #868e96 !important;\n}\n\na.bg-secondary:focus, a.bg-secondary:hover {\n background-color: #6c757d !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:focus, a.bg-success:hover {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:focus, a.bg-info:hover {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:focus, a.bg-warning:hover {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:focus, a.bg-danger:hover {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:focus, a.bg-light:hover {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:focus, a.bg-dark:hover {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #e9ecef !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #868e96 !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.d-print-block {\n display: none !important;\n}\n\n@media print {\n .d-print-block {\n display: block !important;\n }\n}\n\n.d-print-inline {\n display: none !important;\n}\n\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n}\n\n.d-print-inline-block {\n display: none !important;\n}\n\n@media print {\n .d-print-inline-block {\n display: inline-block !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n clip-path: inset(50%);\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n clip-path: none;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:focus, a.text-primary:hover {\n color: #0062cc !important;\n}\n\n.text-secondary {\n color: #868e96 !important;\n}\n\na.text-secondary:focus, a.text-secondary:hover {\n color: #6c757d !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:focus, a.text-success:hover {\n color: #1e7e34 !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:focus, a.text-info:hover {\n color: #117a8b !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:focus, a.text-warning:hover {\n color: #d39e00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:focus, a.text-danger:hover {\n color: #bd2130 !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:focus, a.text-light:hover {\n color: #dae0e5 !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:focus, a.text-dark:hover {\n color: #1d2124 !important;\n}\n\n.text-muted {\n color: #868e96 !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: rgba(0,0,0,0); // 6\n}\n\n// IE10+ doesn't honor `` in some cases.\n@at-root {\n @-ms-viewport {\n width: device-width;\n }\n}\n\n// stylelint-disable selector-list-comma-newline-after\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use the\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n font-size: $font-size-base;\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n// stylelint-enable selector-list-comma-newline-after\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] { // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 1\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\n// stylelint-disable font-weight-notation\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n// stylelint-enable font-weight-notation\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\n// stylelint-disable font-family-no-duplicate-names\npre,\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; // Correct the inheritance and scaling of font size in all browsers.\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n}\n// stylelint-enable font-family-no-duplicate-names\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so\n // we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg:not(:root) {\n overflow: hidden; // Hide the overflow in IE\n}\n\n\n// Avoid 300ms click delay on touch devices that support the `touch-action` CSS property.\n//\n// In particular, unlike most other browsers, IE11+Edge on Windows 10 on touch devices and IE Mobile 10-11\n// DON'T remove the click delay when `` is present.\n// However, they DO support removing the click delay via `touch-action: manipulation`.\n// See:\n// * https://getbootstrap.com/docs/4.0/content/reboot/#click-delay-optimization-for-touch\n// * https://caniuse.com/#feat=css-touch-action\n// * https://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $text-muted;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: .5rem;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\nhtml [type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #868e96 !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge((\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n), $grays);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge((\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n), $colors);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge((\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n), $theme-colors);\n// stylelint-enable\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-hover-media-query: false !default;\n$enable-grid-classes: true !default;\n$enable-print-styles: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n) !default;\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%\n) !default;\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints);\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-200 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$font-family-monospace: \"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: ($font-size-base * 1.25) !default;\n$font-size-sm: ($font-size-base * .875) !default;\n\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: ($spacer / 2) !default;\n$headings-font-family: inherit !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: inherit !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: ($font-size-base * 1.25) !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-font-size: ($font-size-base * 1.25) !default;\n\n$hr-border-color: rgba($black,.1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black,.25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: 5px !default;\n\n$mark-bg: #fcf8e3 !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-bg: transparent !default;\n$table-accent-bg: rgba($black,.05) !default;\n$table-hover-bg: rgba($black,.075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $gray-200 !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-bg: $gray-900 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($gray-900, 7.5%) !default;\n$table-dark-color: $body-bg !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background and border color.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba(theme-color(\"primary\"), .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white,.15), 0 1px 1px rgba($black,.075) !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black,.125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-btn-border-width: $border-width !default; // For form controls and buttons\n$input-box-shadow: inset 0 1px 1px rgba($black,.075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten(theme-color(\"primary\"), 25%) !default;\n$input-focus-color: $input-color !default;\n\n$input-placeholder-color: $gray-600 !default;\n\n$input-height-border: $input-btn-border-width * 2 !default;\n\n$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;\n$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;\n\n$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;\n$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;\n\n$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;\n$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;\n\n$input-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-margin-bottom: .5rem !default;\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .25rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-control-gutter: 1.5rem !default;\n$custom-control-spacer-y: .25rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: #ddd !default;\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black,.1) !default;\n\n$custom-control-indicator-disabled-bg: $gray-200 !default;\n$custom-control-description-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $white !default;\n$custom-control-indicator-checked-bg: theme-color(\"primary\") !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n\n$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;\n\n$custom-control-indicator-active-color: $white !default;\n$custom-control-indicator-active-bg: lighten(theme-color(\"primary\"), 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' 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\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: theme-color(\"primary\") !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n\n$custom-select-padding-y: .375rem !default;\n$custom-select-padding-x: .75rem !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-line-height: $input-btn-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $white !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: #333 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$custom-select-border-width: $input-btn-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n\n$custom-select-focus-border-color: lighten(theme-color(\"primary\"), 25%) !default;\n$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;\n\n$custom-select-font-size-sm: 75% !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-width: 14rem !default;\n$custom-file-focus-box-shadow: 0 0 0 .075rem $white, 0 0 0 .2rem theme-color(\"primary\") !default;\n\n$custom-file-padding-y: $input-btn-padding-y !default;\n$custom-file-padding-x: $input-btn-padding-x !default;\n$custom-file-line-height: $input-btn-line-height !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-btn-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n placeholder: (\n en: \"Choose file...\"\n ),\n button-label: (\n en: \"Browse\"\n )\n) !default;\n\n\n// Form validation\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black,.15) !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black,.175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: #ddd !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: #ddd !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n// Navbar\n\n$navbar-padding-y: ($spacer / 2) !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white,.5) !default;\n$navbar-dark-hover-color: rgba($white,.75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white,.25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white,.1) !default;\n\n$navbar-light-color: rgba($black,.5) !default;\n$navbar-light-hover-color: rgba($black,.7) !default;\n$navbar-light-active-color: rgba($black,.9) !default;\n$navbar-light-disabled-color: rgba($black,.3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black,.1) !default;\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: #ddd !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: #ddd !default;\n\n$pagination-active-color: $white !default;\n$pagination-active-bg: theme-color(\"primary\") !default;\n$pagination-active-border-color: theme-color(\"primary\") !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: #ddd !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black,.125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: ($grid-gutter-width / 2) !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: 3px !default;\n$tooltip-padding-x: 8px !default;\n$tooltip-margin: 0 !default;\n\n\n$tooltip-arrow-width: 5px !default;\n$tooltip-arrow-height: 5px !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n\n// Popovers\n\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black,.2) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black,.2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: .8rem !default;\n$popover-arrow-height: .4rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 15px !default;\n\n$modal-dialog-margin: 10px !default;\n$modal-dialog-margin-y-sm-up: 30px !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black,.2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-box-shadow-xs: 0 3px 9px rgba($black,.5) !default;\n$modal-content-box-shadow-sm-up: 0 5px 15px rgba($black,.5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $gray-200 !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding: 15px !default;\n\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: ($font-size-base * .75) !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black,.1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n// List group\n\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black,.125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: #ddd !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black,.075) !default;\n$thumbnail-transition: all .2s ease-in-out !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: \"/\" !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' 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\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' 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\"), \"#\", \"%23\") !default;\n\n$carousel-transition: transform .6s ease !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n// Code\n\n$code-font-size: 90% !default;\n$code-padding-y: .2rem !default;\n$code-padding-x: .4rem !default;\n$code-color: #bd4147 !default;\n$code-bg: $gray-100 !default;\n\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n","// stylelint-disable indentation\n@mixin hover {\n // TODO: re-enable along with mq4-hover-shim\n// @if $enable-hover-media-query {\n// // See Media Queries Level 4: https://drafts.csswg.org/mediaqueries/#hover\n// // Currently shimmed by https://github.com/twbs/mq4-hover-shim\n// @media (hover: hover) {\n// &:hover { @content }\n// }\n// }\n// @else {\n &:hover { @content; }\n// }\n}\n\n\n@mixin hover-focus {\n @if $enable-hover-media-query {\n &:focus {\n @content;\n }\n @include hover { @content; }\n } @else {\n &:focus,\n &:hover {\n @content;\n }\n }\n}\n\n@mixin plain-hover-focus {\n @if $enable-hover-media-query {\n &,\n &:focus {\n @content;\n }\n @include hover { @content; }\n } @else {\n &,\n &:focus,\n &:hover {\n @content;\n }\n }\n}\n\n@mixin hover-focus-active {\n @if $enable-hover-media-query {\n &:focus,\n &:active {\n @content;\n }\n @include hover { @content; }\n } @else {\n &:focus,\n &:active,\n &:hover {\n @content;\n }\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { font-size: $h1-font-size; }\nh2, .h2 { font-size: $h2-font-size; }\nh3, .h3 { font-size: $h3-font-size; }\nh4, .h4 { font-size: $h4-font-size; }\nh5, .h5 { font-size: $h5-font-size; }\nh6, .h6 { font-size: $h6-font-size; }\n\n.lead {\n font-size: $lead-font-size;\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n font-size: $display1-size;\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n font-size: $display2-size;\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n font-size: $display3-size;\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n font-size: $display4-size;\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n font-size: $small-font-size;\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n font-size: $blockquote-font-size;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%; // back to default font-size\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014 \\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include transition($thumbnail-transition);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: ($spacer / 2);\n line-height: 1;\n}\n\n.figure-caption {\n font-size: $figure-caption-font-size;\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n// stylelint-disable indentation, media-query-list-comma-newline-after\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n}\n","// Single side border-radius\n\n@mixin border-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n","@mixin transition($transition...) {\n @if $enable-transitions {\n @if length($transition) == 0 {\n transition: $transition-base;\n } @else {\n transition: $transition;\n }\n }\n}\n","// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: $font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: $code-padding-y $code-padding-x;\n font-size: $code-font-size;\n color: $code-color;\n background-color: $code-bg;\n @include border-radius($border-radius);\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n padding: 0;\n color: inherit;\n background-color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $code-padding-y $code-padding-x;\n font-size: $code-font-size;\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n font-size: $code-font-size;\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container() {\n width: 100%;\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row() {\n display: flex;\n flex-wrap: wrap;\n margin-right: ($grid-gutter-width / -2);\n margin-left: ($grid-gutter-width / -2);\n}\n\n@mixin make-col-ready() {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n min-height: 1px; // Prevent collapsing\n padding-right: ($grid-gutter-width / 2);\n padding-left: ($grid-gutter-width / 2);\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.1.\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - 1px, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash infront.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n min-height: 1px; // Prevent columns from collapsing when empty\n padding-right: ($gutter / 2);\n padding-left: ($gutter / 2);\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: none; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first {\n order: -1;\n }\n\n @for $i from 1 through $columns {\n .order#{$infix}-#{$i} {\n order: $i;\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: $spacer;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n\n .table {\n background-color: $body-bg;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: (2 * $table-border-width);\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, -9));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover {\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n -ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n &.table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// Bootstrap functions\n//\n// Utility mixins and functions for evalutating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map) {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}.\";\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= 150) {\n @return #111;\n } @else {\n @return #fff;\n }\n}\n\n// Retreive color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, #000, #fff);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-btn-padding-y $input-btn-padding-x;\n font-size: $font-size-base;\n line-height: $input-btn-line-height;\n color: $input-color;\n background-color: $input-bg;\n // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214.\n background-image: none;\n background-clip: padding-box;\n border: $input-btn-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @if $enable-rounded {\n // Manually use the if/else instead of the mixin to account for iOS override\n border-radius: $input-border-radius;\n } @else {\n // Otherwise undo the iOS default\n border-radius: 0;\n }\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label text to\n// align with the form controls.\n.col-form-label {\n padding-top: calc(#{$input-btn-padding-y} + #{$input-btn-border-width});\n padding-bottom: calc(#{$input-btn-padding-y} + #{$input-btn-border-width});\n margin-bottom: 0; // Override the `
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip"},u={SHOW:"show",OUT:"out"},d={HIDE:"hide"+i,HIDDEN:"hidden"+i,SHOW:"show"+i,SHOWN:"shown"+i,INSERTED:"inserted"+i,CLICK:"click"+i,FOCUSIN:"focusin"+i,FOCUSOUT:"focusout"+i,MOUSEENTER:"mouseenter"+i,MOUSELEAVE:"mouseleave"+i},f={FADE:"fade",SHOW:"show"},_={TOOLTIP:".tooltip",TOOLTIP_INNER:".tooltip-inner",ARROW:".arrow"},g={HOVER:"hover",FOCUS:"focus",CLICK:"click",MANUAL:"manual"},m=function(){function o(t,e){this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var m=o.prototype;return m.enable=function(){this._isEnabled=!0},m.disable=function(){this._isEnabled=!1},m.toggleEnabled=function(){this._isEnabled=!this._isEnabled},m.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass(f.SHOW))return void this._leave(null,this);this._enter(null,this)}},m.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&e(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,null!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},m.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var i=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(i);var r=e.contains(this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!r)return;var a=this.getTipElement(),l=s.getUID(this.constructor.NAME);a.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&e(a).addClass(f.FADE);var h="function"==typeof this.config.placement?this.config.placement.call(this,a,this.element):this.config.placement,c=this._getAttachment(h);this.addAttachmentClass(c);var d=!1===this.config.container?document.body:e(this.config.container);e(a).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(a).appendTo(d),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new n(this.element,a,{placement:c,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:_.ARROW}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){t._handlePopperPlacementChange(e)}}),e(a).addClass(f.SHOW),"ontouchstart"in document.documentElement&&e("body").children().on("mouseover",null,e.noop);var g=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),n===u.OUT&&t._leave(null,t)};s.supportsTransitionEnd()&&e(this.tip).hasClass(f.FADE)?e(this.tip).one(s.TRANSITION_END,g).emulateTransitionEnd(o._TRANSITION_DURATION):g()}},m.hide=function(t){var n=this,i=this.getTipElement(),r=e.Event(this.constructor.Event.HIDE),o=function(){n._hoverState!==u.SHOW&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};e(this.element).trigger(r),r.isDefaultPrevented()||(e(i).removeClass(f.SHOW),"ontouchstart"in document.documentElement&&e("body").children().off("mouseover",null,e.noop),this._activeTrigger[g.CLICK]=!1,this._activeTrigger[g.FOCUS]=!1,this._activeTrigger[g.HOVER]=!1,s.supportsTransitionEnd()&&e(this.tip).hasClass(f.FADE)?e(i).one(s.TRANSITION_END,o).emulateTransitionEnd(150):o(),this._hoverState="")},m.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},m.isWithContent=function(){return Boolean(this.getTitle())},m.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},m.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},m.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(_.TOOLTIP_INNER),this.getTitle()),t.removeClass(f.FADE+" "+f.SHOW)},m.setElementContent=function(t,n){var i=this.config.html;"object"==typeof n&&(n.nodeType||n.jquery)?i?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text()):t[i?"html":"text"](n)},m.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},m._getAttachment=function(t){return h[t.toUpperCase()]},m._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach(function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,function(e){return t.toggle(e)});else if(n!==g.MANUAL){var i=n===g.HOVER?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,s=n===g.HOVER?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,t.config.selector,function(e){return t._enter(e)}).on(s,t.config.selector,function(e){return t._leave(e)})}e(t.element).closest(".modal").on("hide.bs.modal",function(){return t.hide()})}),this.config.selector?this.config=e.extend({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},m._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},m._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?g.FOCUS:g.HOVER]=!0),e(n.getTipElement()).hasClass(f.SHOW)||n._hoverState===u.SHOW?n._hoverState=u.SHOW:(clearTimeout(n._timeout),n._hoverState=u.SHOW,n.config.delay&&n.config.delay.show?n._timeout=setTimeout(function(){n._hoverState===u.SHOW&&n.show()},n.config.delay.show):n.show())},m._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?g.FOCUS:g.HOVER]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState=u.OUT,n.config.delay&&n.config.delay.hide?n._timeout=setTimeout(function(){n._hoverState===u.OUT&&n.hide()},n.config.delay.hide):n.hide())},m._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},m._getConfig=function(n){return"number"==typeof(n=e.extend({},this.constructor.Default,e(this.element).data(),n)).delay&&(n.delay={show:n.delay,hide:n.delay}),"number"==typeof n.title&&(n.title=n.title.toString()),"number"==typeof n.content&&(n.content=n.content.toString()),s.typeCheckConfig(t,n,this.constructor.DefaultType),n},m._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},m._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(a);null!==n&&n.length>0&&t.removeClass(n.join(""))},m._handlePopperPlacementChange=function(t){this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},m._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass(f.FADE),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},o._jQueryInterface=function(t){return this.each(function(){var n=e(this).data("bs.tooltip"),i="object"==typeof t&&t;if((n||!/dispose|hide/.test(t))&&(n||(n=new o(this,i),e(this).data("bs.tooltip",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new Error('No method named "'+t+'"');n[t]()}})},r(o,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}},{key:"Default",get:function(){return c}},{key:"NAME",get:function(){return t}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return d}},{key:"EVENT_KEY",get:function(){return i}},{key:"DefaultType",get:function(){return l}}]),o}();return e.fn[t]=m._jQueryInterface,e.fn[t].Constructor=m,e.fn[t].noConflict=function(){return e.fn[t]=o,m._jQueryInterface},m}(),_=function(){var t="popover",n=".bs.popover",i=e.fn[t],s=new RegExp("(^|\\s)bs-popover\\S+","g"),a=e.extend({},f.Default,{placement:"right",trigger:"click",content:"",template:''}),l=e.extend({},f.DefaultType,{content:"(string|element|function)"}),h={FADE:"fade",SHOW:"show"},c={TITLE:".popover-header",CONTENT:".popover-body"},u={HIDE:"hide"+n,HIDDEN:"hidden"+n,SHOW:"show"+n,SHOWN:"shown"+n,INSERTED:"inserted"+n,CLICK:"click"+n,FOCUSIN:"focusin"+n,FOCUSOUT:"focusout"+n,MOUSEENTER:"mouseenter"+n,MOUSELEAVE:"mouseleave"+n},d=function(i){function d(){return i.apply(this,arguments)||this}o(d,i);var f=d.prototype;return f.isWithContent=function(){return this.getTitle()||this._getContent()},f.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},f.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},f.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(c.TITLE),this.getTitle()),this.setElementContent(t.find(c.CONTENT),this._getContent()),t.removeClass(h.FADE+" "+h.SHOW)},f._getContent=function(){return this.element.getAttribute("data-content")||("function"==typeof this.config.content?this.config.content.call(this.element):this.config.content)},f._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(s);null!==n&&n.length>0&&t.removeClass(n.join(""))},d._jQueryInterface=function(t){return this.each(function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/destroy|hide/.test(t))&&(n||(n=new d(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new Error('No method named "'+t+'"');n[t]()}})},r(d,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}},{key:"Default",get:function(){return a}},{key:"NAME",get:function(){return t}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return u}},{key:"EVENT_KEY",get:function(){return n}},{key:"DefaultType",get:function(){return l}}]),d}(f);return e.fn[t]=d._jQueryInterface,e.fn[t].Constructor=d,e.fn[t].noConflict=function(){return e.fn[t]=i,d._jQueryInterface},d}(),g=function(){var t="scrollspy",n=e.fn[t],i={offset:10,method:"auto",target:""},o={offset:"number",method:"string",target:"(string|element)"},a={ACTIVATE:"activate.bs.scrollspy",SCROLL:"scroll.bs.scrollspy",LOAD_DATA_API:"load.bs.scrollspy.data-api"},l={DROPDOWN_ITEM:"dropdown-item",DROPDOWN_MENU:"dropdown-menu",ACTIVE:"active"},h={DATA_SPY:'[data-spy="scroll"]',ACTIVE:".active",NAV_LIST_GROUP:".nav, .list-group",NAV_LINKS:".nav-link",NAV_ITEMS:".nav-item",LIST_ITEMS:".list-group-item",DROPDOWN:".dropdown",DROPDOWN_ITEMS:".dropdown-item",DROPDOWN_TOGGLE:".dropdown-toggle"},c={OFFSET:"offset",POSITION:"position"},u=function(){function n(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),this._selector=this._config.target+" "+h.NAV_LINKS+","+this._config.target+" "+h.LIST_ITEMS+","+this._config.target+" "+h.DROPDOWN_ITEMS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,e(this._scrollElement).on(a.SCROLL,function(t){return i._process(t)}),this.refresh(),this._process()}var u=n.prototype;return u.refresh=function(){var t=this,n=this._scrollElement!==this._scrollElement.window?c.POSITION:c.OFFSET,i="auto"===this._config.method?n:this._config.method,r=i===c.POSITION?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),e.makeArray(e(this._selector)).map(function(t){var n,o=s.getSelectorFromElement(t);if(o&&(n=e(o)[0]),n){var a=n.getBoundingClientRect();if(a.width||a.height)return[e(n)[i]().top+r,o]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(e){t._offsets.push(e[0]),t._targets.push(e[1])})},u.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},u._getConfig=function(n){if("string"!=typeof(n=e.extend({},i,n)).target){var r=e(n.target).attr("id");r||(r=s.getUID(t),e(n.target).attr("id",r)),n.target="#"+r}return s.typeCheckConfig(t,n,o),n},u._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},u._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},u._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},u._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var s=this._offsets.length;s--;)this._activeTarget!==this._targets[s]&&t>=this._offsets[s]&&("undefined"==typeof this._offsets[s+1]||t li > .active",DATA_TOGGLE:'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',DROPDOWN_TOGGLE:".dropdown-toggle",DROPDOWN_ACTIVE_CHILD:"> .dropdown-menu .active"},a=function(){function t(t){this._element=t}var a=t.prototype;return a.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&e(this._element).hasClass(i.ACTIVE)||e(this._element).hasClass(i.DISABLED))){var r,a,l=e(this._element).closest(o.NAV_LIST_GROUP)[0],h=s.getSelectorFromElement(this._element);if(l){var c="UL"===l.nodeName?o.ACTIVE_UL:o.ACTIVE;a=e.makeArray(e(l).find(c)),a=a[a.length-1]}var u=e.Event(n.HIDE,{relatedTarget:this._element}),d=e.Event(n.SHOW,{relatedTarget:a});if(a&&e(a).trigger(u),e(this._element).trigger(d),!d.isDefaultPrevented()&&!u.isDefaultPrevented()){h&&(r=e(h)[0]),this._activate(this._element,l);var f=function(){var i=e.Event(n.HIDDEN,{relatedTarget:t._element}),s=e.Event(n.SHOWN,{relatedTarget:a});e(a).trigger(i),e(t._element).trigger(s)};r?this._activate(r,r.parentNode,f):f()}}},a.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},a._activate=function(t,n,r){var a,l=this,h=(a="UL"===n.nodeName?e(n).find(o.ACTIVE_UL):e(n).children(o.ACTIVE))[0],c=r&&s.supportsTransitionEnd()&&h&&e(h).hasClass(i.FADE),u=function(){return l._transitionComplete(t,h,c,r)};h&&c?e(h).one(s.TRANSITION_END,u).emulateTransitionEnd(150):u(),h&&e(h).removeClass(i.SHOW)},a._transitionComplete=function(t,n,r,a){if(n){e(n).removeClass(i.ACTIVE);var l=e(n.parentNode).find(o.DROPDOWN_ACTIVE_CHILD)[0];l&&e(l).removeClass(i.ACTIVE),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(t).addClass(i.ACTIVE),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),r?(s.reflow(t),e(t).addClass(i.SHOW)):e(t).removeClass(i.FADE),t.parentNode&&e(t.parentNode).hasClass(i.DROPDOWN_MENU)){var h=e(t).closest(o.DROPDOWN)[0];h&&e(h).find(o.DROPDOWN_TOGGLE).addClass(i.ACTIVE),t.setAttribute("aria-expanded",!0)}a&&a()},t._jQueryInterface=function(n){return this.each(function(){var i=e(this),s=i.data("bs.tab");if(s||(s=new t(this),i.data("bs.tab",s)),"string"==typeof n){if("undefined"==typeof s[n])throw new Error('No method named "'+n+'"');s[n]()}})},r(t,null,[{key:"VERSION",get:function(){return"4.0.0-beta.2"}}]),t}();return e(document).on(n.CLICK_DATA_API,o.DATA_TOGGLE,function(t){t.preventDefault(),a._jQueryInterface.call(e(this),"show")}),e.fn.tab=a._jQueryInterface,e.fn.tab.Constructor=a,e.fn.tab.noConflict=function(){return e.fn.tab=t,a._jQueryInterface},a}();return function(){if("undefined"==typeof e)throw new Error("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(),t.Util=s,t.Alert=a,t.Button=l,t.Carousel=h,t.Collapse=c,t.Dropdown=u,t.Modal=d,t.Popover=_,t.Scrollspy=g,t.Tab=m,t.Tooltip=f,t}({},$,Popper); +//# sourceMappingURL=bootstrap.min.js.map \ No newline at end of file diff --git a/Backend/static/bootstrap/js/bootstrap.min.js.map b/Backend/static/bootstrap/js/bootstrap.min.js.map new file mode 100644 index 0000000..613897d --- /dev/null +++ b/Backend/static/bootstrap/js/bootstrap.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/index.js"],"names":["Util","toType","obj","toString","call","match","toLowerCase","getSpecialTransitionEndEvent","transition","end","event","$","target","is","this","handleObj","handler","apply","arguments","transitionEndTest","window","QUnit","el","document","createElement","name","TransitionEndEvent","style","transitionEndEmulator","duration","called","one","TRANSITION_END","triggerTransitionEnd","_this","prefix","Math","random","getElementById","element","selector","getAttribute","find","length","error","offsetHeight","trigger","Boolean","nodeType","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","expectedTypes","value","valueType","isElement","RegExp","test","Error","toUpperCase","fn","emulateTransitionEnd","supportsTransitionEnd","special","Alert","NAME","JQUERY_NO_CONFLICT","Event","ClassName","_element","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","getSelectorFromElement","parent","closest","ALERT","closeEvent","CLOSE","removeClass","SHOW","hasClass","FADE","_destroyElement","detach","CLOSED","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","CLICK_DATA_API","DISMISS","Constructor","noConflict","Button","Selector","toggle","triggerChangeEvent","addAriaPressed","DATA_TOGGLE","input","INPUT","type","checked","ACTIVE","activeElement","hasAttribute","classList","contains","focus","setAttribute","toggleClass","DATA_TOGGLE_CARROT","button","BUTTON","FOCUS_BLUR_DATA_API","FOCUS","Carousel","DATA_KEY","EVENT_KEY","Default","DefaultType","Direction","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","_config","_getConfig","_indicatorsElement","INDICATORS","_addEventListeners","next","_slide","NEXT","nextWhenVisible","hidden","css","prev","PREV","pause","NEXT_PREV","cycle","interval","setInterval","visibilityState","bind","to","index","ACTIVE_ITEM","activeIndex","_getItemIndex","SLID","direction","off","extend","typeCheckConfig","keyboard","KEYDOWN","_this2","_keydown","MOUSEENTER","MOUSELEAVE","documentElement","TOUCHEND","setTimeout","tagName","which","makeArray","ITEM","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","wrap","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","SLIDE","_setActiveIndicatorElement","nextIndicator","children","addClass","directionalClassName","orderClassName","activeElementIndex","nextElement","nextElementIndex","isCycling","LEFT","RIGHT","slidEvent","reflow","_this3","action","slide","_dataApiClickHandler","CAROUSEL","slideIndex","DATA_SLIDE","LOAD_DATA_API","DATA_RIDE","$carousel","Collapse","Dimension","_isTransitioning","_triggerArray","id","tabToggles","i","elem","filter","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","ACTIVES","startEvent","dimension","_getDimension","COLLAPSE","COLLAPSING","COLLAPSED","attr","setTransitioning","complete","SHOWN","scrollSize","slice","HIDE","getBoundingClientRect","HIDDEN","isTransitioning","WIDTH","HEIGHT","jquery","_getTargetFromElement","triggerArray","isOpen","$this","currentTarget","$trigger","$target","Dropdown","Popper","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","AttachmentMap","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","DISABLED","_getParentFromElement","isActive","_clearMenus","showEvent","DROPUP","MENULEFT","MENURIGHT","_getPopperConfig","NAVBAR_NAV","noop","destroy","update","scheduleUpdate","CLICK","stopPropagation","constructor","MENU","_getPlacement","$parentDropdown","placement","BOTTOM","TOP","TOPEND","BOTTOMEND","offsetConf","offset","offsets","popperConfig","flip","modifiers","applyStyle","toggles","context","dropdownMenu","hideEvent","parentNode","_dataApiKeydownHandler","items","VISIBLE_ITEMS","get","KEYDOWN_DATA_API","KEYUP_DATA_API","FORM_CHILD","e","Modal","_dialog","DIALOG","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_originalBodyPadding","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","body","OPEN","_setEscapeEvent","_setResizeEvent","CLICK_DISMISS","DATA_DISMISS","MOUSEDOWN_DISMISS","MOUSEUP_DISMISS","_showBackdrop","_showElement","FOCUSIN","_hideModal","handleUpdate","Node","ELEMENT_NODE","appendChild","display","removeAttribute","scrollTop","_enforceFocus","shownEvent","transitionComplete","_this4","has","KEYDOWN_DISMISS","RESIZE","_this6","_resetAdjustments","_resetScrollbar","_this7","_removeBackdrop","callback","animate","backdrop","doAnimate","className","BACKDROP","appendTo","_this8","callbackRemove","isModalOverflowing","scrollHeight","clientHeight","paddingLeft","paddingRight","rect","left","right","innerWidth","_getScrollbarWidth","FIXED_CONTENT","actualPadding","calculatedPadding","parseFloat","_this9","STICKY_CONTENT","actualMargin","marginRight","calculatedMargin","NAVBAR_TOGGLER","padding","margin","scrollDiv","SCROLLBAR_MEASURER","scrollbarWidth","width","clientWidth","removeChild","Tooltip","BSCLS_PREFIX_REGEX","HoverState","Trigger","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","isWithContent","isInTheDom","ownerDocument","tipId","getUID","setContent","animation","attachment","_getAttachment","addAttachmentClass","container","INSERTED","fallbackPlacement","ARROW","originalPlacement","_handlePopperPlacementChange","_fixTransition","prevHoverState","OUT","_TRANSITION_DURATION","_cleanTipClass","HOVER","getTitle","CLASS_PREFIX","template","$tip","setElementContent","TOOLTIP_INNER","content","html","empty","append","text","title","split","forEach","MANUAL","eventIn","eventOut","FOCUSOUT","_fixTitle","titleType","delay","key","tabClass","join","initConfigAnimation","Popover","_getContent","TITLE","CONTENT","ScrollSpy","OffsetMethod","_scrollElement","_selector","NAV_LINKS","LIST_ITEMS","DROPDOWN_ITEMS","_offsets","_targets","_activeTarget","_scrollHeight","SCROLL","_process","refresh","autoMethod","POSITION","OFFSET","offsetMethod","method","offsetBase","_getScrollTop","_getScrollHeight","map","targetSelector","targetBCR","height","top","item","sort","a","b","pageYOffset","max","_getOffsetHeight","innerHeight","maxScroll","_activate","_clear","queries","$link","DROPDOWN_ITEM","DROPDOWN","DROPDOWN_TOGGLE","parents","NAV_LIST_GROUP","NAV_ITEMS","ACTIVATE","scrollSpys","DATA_SPY","$spy","Tab","previous","listElement","itemSelector","nodeName","ACTIVE_UL","hiddenEvent","activeElements","active","_transitionComplete","dropdownChild","DROPDOWN_ACTIVE_CHILD","DROPDOWN_MENU","dropdownElement","version"],"mappings":"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","sourcesContent":["import $ from 'jquery'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Util = (() => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\n let transition = false\n\n const MAX_UID = 1000000\n\n const TransitionEndEvent = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n }\n\n // shoutout AngusCroll (https://goo.gl/pxwQGp)\n function toType(obj) {\n return {}.toString.call(obj).match(/\\s([a-zA-Z]+)/)[1].toLowerCase()\n }\n\n function getSpecialTransitionEndEvent() {\n return {\n bindType: transition.end,\n delegateType: transition.end,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n return undefined // eslint-disable-line no-undefined\n }\n }\n }\n\n function transitionEndTest() {\n if (window.QUnit) {\n return false\n }\n\n const el = document.createElement('bootstrap')\n\n for (const name in TransitionEndEvent) {\n if (typeof el.style[name] !== 'undefined') {\n return {\n end: TransitionEndEvent[name]\n }\n }\n }\n\n return false\n }\n\n function transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n }\n\n function setTransitionEndSupport() {\n transition = transitionEndTest()\n\n $.fn.emulateTransitionEnd = transitionEndEmulator\n\n if (Util.supportsTransitionEnd()) {\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n }\n }\n\n\n /**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n const Util = {\n\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n if (!selector || selector === '#') {\n selector = element.getAttribute('href') || ''\n }\n\n try {\n const $selector = $(document).find(selector)\n return $selector.length > 0 ? selector : null\n } catch (error) {\n return null\n }\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(transition.end)\n },\n\n supportsTransitionEnd() {\n return Boolean(transition)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n }\n }\n\n setTransitionEndSupport()\n\n return Util\n\n})($)\n\nexport default Util\n","import $ from 'jquery'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Alert = (() => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'alert'\n const VERSION = '4.0.0-beta.2'\n const DATA_KEY = 'bs.alert'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 150\n\n const Selector = {\n DISMISS : '[data-dismiss=\"alert\"]'\n }\n\n const Event = {\n CLOSE : `close${EVENT_KEY}`,\n CLOSED : `closed${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n ALERT : 'alert',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Alert {\n\n constructor(element) {\n this._element = element\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n\n // public\n\n close(element) {\n element = element || this._element\n\n const rootElement = this._getRootElement(element)\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n\n // private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = $(selector)[0]\n }\n\n if (!parent) {\n parent = $(element).closest(`.${ClassName.ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(Event.CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(ClassName.SHOW)\n\n if (!Util.supportsTransitionEnd() ||\n !$(element).hasClass(ClassName.FADE)) {\n this._destroyElement(element)\n return\n }\n\n $(element)\n .one(Util.TRANSITION_END, (event) => this._destroyElement(element, event))\n .emulateTransitionEnd(TRANSITION_DURATION)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(Event.CLOSED)\n .remove()\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(\n Event.CLICK_DATA_API,\n Selector.DISMISS,\n Alert._handleDismiss(new Alert())\n )\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Alert._jQueryInterface\n $.fn[NAME].Constructor = Alert\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n }\n\n return Alert\n\n})($)\n\nexport default Alert\n","import $ from 'jquery'\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Button = (() => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'button'\n const VERSION = '4.0.0-beta.2'\n const DATA_KEY = 'bs.button'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const ClassName = {\n ACTIVE : 'active',\n BUTTON : 'btn',\n FOCUS : 'focus'\n }\n\n const Selector = {\n DATA_TOGGLE_CARROT : '[data-toggle^=\"button\"]',\n DATA_TOGGLE : '[data-toggle=\"buttons\"]',\n INPUT : 'input',\n ACTIVE : '.active',\n BUTTON : '.btn'\n }\n\n const Event = {\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} `\n + `blur${EVENT_KEY}${DATA_API_KEY}`\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Button {\n\n constructor(element) {\n this._element = element\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n\n // public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(\n Selector.DATA_TOGGLE\n )[0]\n\n if (rootElement) {\n const input = $(this._element).find(Selector.INPUT)[0]\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked &&\n $(this._element).hasClass(ClassName.ACTIVE)) {\n triggerChangeEvent = false\n\n } else {\n const activeElement = $(rootElement).find(Selector.ACTIVE)[0]\n\n if (activeElement) {\n $(activeElement).removeClass(ClassName.ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n if (input.hasAttribute('disabled') ||\n rootElement.hasAttribute('disabled') ||\n input.classList.contains('disabled') ||\n rootElement.classList.contains('disabled')) {\n return\n }\n input.checked = !$(this._element).hasClass(ClassName.ACTIVE)\n $(input).trigger('change')\n }\n\n input.focus()\n addAriaPressed = false\n }\n\n }\n\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed',\n !$(this._element).hasClass(ClassName.ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(ClassName.ACTIVE)\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n event.preventDefault()\n\n let button = event.target\n\n if (!$(button).hasClass(ClassName.BUTTON)) {\n button = $(button).closest(Selector.BUTTON)\n }\n\n Button._jQueryInterface.call($(button), 'toggle')\n })\n .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => {\n const button = $(event.target).closest(Selector.BUTTON)[0]\n $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Button._jQueryInterface\n $.fn[NAME].Constructor = Button\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n }\n\n return Button\n\n})($)\n\nexport default Button\n","import $ from 'jquery'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Carousel = (() => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'carousel'\n const VERSION = '4.0.0-beta.2'\n const DATA_KEY = 'bs.carousel'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 600\n const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\n const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\n const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\n const Default = {\n interval : 5000,\n keyboard : true,\n slide : false,\n pause : 'hover',\n wrap : true\n }\n\n const DefaultType = {\n interval : '(number|boolean)',\n keyboard : 'boolean',\n slide : '(boolean|string)',\n pause : '(string|boolean)',\n wrap : 'boolean'\n }\n\n const Direction = {\n NEXT : 'next',\n PREV : 'prev',\n LEFT : 'left',\n RIGHT : 'right'\n }\n\n const Event = {\n SLIDE : `slide${EVENT_KEY}`,\n SLID : `slid${EVENT_KEY}`,\n KEYDOWN : `keydown${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\n TOUCHEND : `touchend${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n CAROUSEL : 'carousel',\n ACTIVE : 'active',\n SLIDE : 'slide',\n RIGHT : 'carousel-item-right',\n LEFT : 'carousel-item-left',\n NEXT : 'carousel-item-next',\n PREV : 'carousel-item-prev',\n ITEM : 'carousel-item'\n }\n\n const Selector = {\n ACTIVE : '.active',\n ACTIVE_ITEM : '.active.carousel-item',\n ITEM : '.carousel-item',\n NEXT_PREV : '.carousel-item-next, .carousel-item-prev',\n INDICATORS : '.carousel-indicators',\n DATA_SLIDE : '[data-slide], [data-slide-to]',\n DATA_RIDE : '[data-ride=\"carousel\"]'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Carousel {\n\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n\n this._isPaused = false\n this._isSliding = false\n\n this.touchTimeout = null\n\n this._config = this._getConfig(config)\n this._element = $(element)[0]\n this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0]\n\n this._addEventListeners()\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n\n // public\n\n next() {\n if (!this._isSliding) {\n this._slide(Direction.NEXT)\n }\n }\n\n nextWhenVisible() {\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(Direction.PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if ($(this._element).find(Selector.NEXT_PREV)[0] &&\n Util.supportsTransitionEnd()) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(Event.SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n Direction.NEXT :\n Direction.PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n\n // private\n\n _getConfig(config) {\n config = $.extend({}, Default, config)\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element)\n .on(Event.KEYDOWN, (event) => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(Event.MOUSEENTER, (event) => this.pause(event))\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\n if ('ontouchstart' in document.documentElement) {\n // if it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n $(this._element).on(Event.TOUCHEND, () => {\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n })\n }\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n return\n }\n }\n\n _getItemIndex(element) {\n this._items = $.makeArray($(element).parent().find(Selector.ITEM))\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === Direction.NEXT\n const isPrevDirection = direction === Direction.PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === Direction.PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0])\n const slideEvent = $.Event(Event.SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n $(this._indicatorsElement)\n .find(Selector.ACTIVE)\n .removeClass(ClassName.ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(ClassName.ACTIVE)\n }\n }\n }\n\n _slide(direction, element) {\n const activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === Direction.NEXT) {\n directionalClassName = ClassName.LEFT\n orderClassName = ClassName.NEXT\n eventDirectionName = Direction.LEFT\n } else {\n directionalClassName = ClassName.RIGHT\n orderClassName = ClassName.PREV\n eventDirectionName = Direction.RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n\n const slidEvent = $.Event(Event.SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if (Util.supportsTransitionEnd() &&\n $(this._element).hasClass(ClassName.SLIDE)) {\n\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(ClassName.ACTIVE)\n\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n\n })\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n } else {\n $(activeElement).removeClass(ClassName.ACTIVE)\n $(nextElement).addClass(ClassName.ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = $.extend({}, Default, $(this).data())\n\n if (typeof config === 'object') {\n $.extend(_config, config)\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new Error(`No method named \"${action}\"`)\n }\n data[action]()\n } else if (_config.interval) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n return\n }\n\n const config = $.extend({}, $(target).data(), $(this).data())\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\n\n $(window).on(Event.LOAD_DATA_API, () => {\n $(Selector.DATA_RIDE).each(function () {\n const $carousel = $(this)\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n })\n })\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Carousel._jQueryInterface\n $.fn[NAME].Constructor = Carousel\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n }\n\n return Carousel\n\n})($)\n\nexport default Carousel\n","import $ from 'jquery'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Collapse = (() => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'collapse'\n const VERSION = '4.0.0-beta.2'\n const DATA_KEY = 'bs.collapse'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 600\n\n const Default = {\n toggle : true,\n parent : ''\n }\n\n const DefaultType = {\n toggle : 'boolean',\n parent : '(string|element)'\n }\n\n const Event = {\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SHOW : 'show',\n COLLAPSE : 'collapse',\n COLLAPSING : 'collapsing',\n COLLAPSED : 'collapsed'\n }\n\n const Dimension = {\n WIDTH : 'width',\n HEIGHT : 'height'\n }\n\n const Selector = {\n ACTIVES : '.show, .collapsing',\n DATA_TOGGLE : '[data-toggle=\"collapse\"]'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Collapse {\n\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = $.makeArray($(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n const tabToggles = $(Selector.DATA_TOGGLE)\n for (let i = 0; i < tabToggles.length; i++) {\n const elem = tabToggles[i]\n const selector = Util.getSelectorFromElement(elem)\n if (selector !== null && $(selector).filter(element).length > 0) {\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n\n // public\n\n toggle() {\n if ($(this._element).hasClass(ClassName.SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = $.makeArray($(this._parent).children().children(Selector.ACTIVES))\n if (!actives.length) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(Event.SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(ClassName.COLLAPSE)\n .addClass(ClassName.COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(ClassName.COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .addClass(ClassName.SHOW)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(Event.SHOWN)\n }\n\n if (!Util.supportsTransitionEnd()) {\n complete()\n return\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(ClassName.SHOW)) {\n return\n }\n\n const startEvent = $.Event(Event.HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(ClassName.COLLAPSING)\n .removeClass(ClassName.COLLAPSE)\n .removeClass(ClassName.SHOW)\n\n if (this._triggerArray.length) {\n for (let i = 0; i < this._triggerArray.length; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n if (selector !== null) {\n const $elem = $(selector)\n if (!$elem.hasClass(ClassName.SHOW)) {\n $(trigger).addClass(ClassName.COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(ClassName.COLLAPSING)\n .addClass(ClassName.COLLAPSE)\n .trigger(Event.HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n if (!Util.supportsTransitionEnd()) {\n complete()\n return\n }\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n\n // private\n\n _getConfig(config) {\n config = $.extend({}, Default, config)\n config.toggle = Boolean(config.toggle) // coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(Dimension.WIDTH)\n return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT\n }\n\n _getParent() {\n let parent = null\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // it's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = $(this._config.parent)[0]\n }\n\n const selector =\n `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n\n $(parent).find(selector).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n if (element) {\n const isOpen = $(element).hasClass(ClassName.SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(ClassName.COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n }\n\n\n // static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? $(selector)[0] : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n const _config = $.extend(\n {},\n Default,\n $this.data(),\n typeof config === 'object' && config\n )\n\n if (!data && _config.toggle && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new Error(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n $(selector).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n })\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Collapse._jQueryInterface\n $.fn[NAME].Constructor = Collapse\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n }\n\n return Collapse\n\n})($)\n\nexport default Collapse\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Dropdown = (() => {\n\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)')\n }\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'dropdown'\n const VERSION = '4.0.0-beta.2'\n const DATA_KEY = 'bs.dropdown'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\n const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\n const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\n const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\n const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\n const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`,\n KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`,\n KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DISABLED : 'disabled',\n SHOW : 'show',\n DROPUP : 'dropup',\n MENURIGHT : 'dropdown-menu-right',\n MENULEFT : 'dropdown-menu-left'\n }\n\n const Selector = {\n DATA_TOGGLE : '[data-toggle=\"dropdown\"]',\n FORM_CHILD : '.dropdown form',\n MENU : '.dropdown-menu',\n NAVBAR_NAV : '.navbar-nav',\n VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled)'\n }\n\n const AttachmentMap = {\n TOP : 'top-start',\n TOPEND : 'top-end',\n BOTTOM : 'bottom-start',\n BOTTOMEND : 'bottom-end'\n }\n\n const Default = {\n offset : 0,\n flip : true\n }\n\n const DefaultType = {\n offset : '(number|string|function)',\n flip : 'boolean'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Dropdown {\n\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this._element)\n const isActive = $(this._menu).hasClass(ClassName.SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n const relatedTarget = {\n relatedTarget : this._element\n }\n const showEvent = $.Event(Event.SHOW, relatedTarget)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n let element = this._element\n // for dropup with alignment we use the parent as popper container\n if ($(parent).hasClass(ClassName.DROPUP)) {\n if ($(this._menu).hasClass(ClassName.MENULEFT) || $(this._menu).hasClass(ClassName.MENURIGHT)) {\n element = parent\n }\n }\n this._popper = new Popper(element, this._menu, this._getPopperConfig())\n\n // if this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n !$(parent).closest(Selector.NAVBAR_NAV).length) {\n $('body').children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(ClassName.SHOW)\n $(parent)\n .toggleClass(ClassName.SHOW)\n .trigger($.Event(Event.SHOWN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n this._popper = null\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // private\n\n _addEventListeners() {\n $(this._element).on(Event.CLICK, (event) => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = $.extend(\n {},\n this.constructor.Default,\n $(this._element).data(),\n config\n )\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n this._menu = $(parent).find(Selector.MENU)[0]\n }\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element).parent()\n let placement = AttachmentMap.BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n placement = AttachmentMap.TOP\n if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.TOPEND\n }\n } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n placement = AttachmentMap.BOTTOMEND\n }\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getPopperConfig() {\n const offsetConf = {}\n if (typeof this._config.offset === 'function') {\n offsetConf.fn = (data) => {\n data.offsets = $.extend({}, data.offsets, this._config.offset(data.offsets) || {})\n return data\n }\n } else {\n offsetConf.offset = this._config.offset\n }\n const popperConfig = {\n placement : this._getPlacement(),\n modifiers : {\n offset : offsetConf,\n flip : {\n enabled : this._config.flip\n }\n }\n }\n\n // Disable Popper.js for Dropdown in Navbar\n if (this._inNavbar) {\n popperConfig.modifiers.applyStyle = {\n enabled: !this._inNavbar\n }\n }\n return popperConfig\n }\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new Error(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = $.makeArray($(Selector.DATA_TOGGLE))\n for (let i = 0; i < toggles.length; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget : toggles[i]\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(ClassName.SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE)\n && $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(Event.HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // if this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $('body').children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n $(dropdownMenu).removeClass(ClassName.SHOW)\n $(parent)\n .removeClass(ClassName.SHOW)\n .trigger($.Event(Event.HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = $(selector)[0]\n }\n\n return parent || element.parentNode\n }\n\n static _dataApiKeydownHandler(event) {\n if (!REGEXP_KEYDOWN.test(event.which) || /button/i.test(event.target.tagName) && event.which === SPACE_KEYCODE ||\n /input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(ClassName.SHOW)\n\n if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) ||\n isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n\n if (event.which === ESCAPE_KEYCODE) {\n const toggle = $(parent).find(Selector.DATA_TOGGLE)[0]\n $(toggle).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = $(parent).find(Selector.VISIBLE_ITEMS).get()\n\n if (!items.length) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document)\n .on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler)\n .on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => {\n e.stopPropagation()\n })\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Dropdown._jQueryInterface\n $.fn[NAME].Constructor = Dropdown\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n }\n\n return Dropdown\n\n})($, Popper)\n\nexport default Dropdown\n","import $ from 'jquery'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Modal = (() => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'modal'\n const VERSION = '4.0.0-beta.2'\n const DATA_KEY = 'bs.modal'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 300\n const BACKDROP_TRANSITION_DURATION = 150\n const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\n const Default = {\n backdrop : true,\n keyboard : true,\n focus : true,\n show : true\n }\n\n const DefaultType = {\n backdrop : '(boolean|string)',\n keyboard : 'boolean',\n focus : 'boolean',\n show : 'boolean'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n RESIZE : `resize${EVENT_KEY}`,\n CLICK_DISMISS : `click.dismiss${EVENT_KEY}`,\n KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`,\n MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`,\n MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`,\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n SCROLLBAR_MEASURER : 'modal-scrollbar-measure',\n BACKDROP : 'modal-backdrop',\n OPEN : 'modal-open',\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n DIALOG : '.modal-dialog',\n DATA_TOGGLE : '[data-toggle=\"modal\"]',\n DATA_DISMISS : '[data-dismiss=\"modal\"]',\n FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n STICKY_CONTENT : '.sticky-top',\n NAVBAR_TOGGLER : '.navbar-toggler'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Modal {\n\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = $(element).find(Selector.DIALOG)[0]\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._originalBodyPadding = 0\n this._scrollbarWidth = 0\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n\n // public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isTransitioning || this._isShown) {\n return\n }\n\n if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(Event.SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n $(document.body).addClass(ClassName.OPEN)\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n Event.CLICK_DISMISS,\n Selector.DATA_DISMISS,\n (event) => this.hide(event)\n )\n\n $(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => {\n $(this._element).one(Event.MOUSEUP_DISMISS, (event) => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (this._isTransitioning || !this._isShown) {\n return\n }\n\n const hideEvent = $.Event(Event.HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n\n const transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(Event.FOCUSIN)\n\n $(this._element).removeClass(ClassName.SHOW)\n\n $(this._element).off(Event.CLICK_DISMISS)\n $(this._dialog).off(Event.MOUSEDOWN_DISMISS)\n\n if (transition) {\n\n $(this._element)\n .one(Util.TRANSITION_END, (event) => this._hideModal(event))\n .emulateTransitionEnd(TRANSITION_DURATION)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n $(window, document, this._element, this._backdrop).off(EVENT_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // private\n\n _getConfig(config) {\n config = $.extend({}, Default, config)\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _showElement(relatedTarget) {\n const transition = Util.supportsTransitionEnd() &&\n $(this._element).hasClass(ClassName.FADE)\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // don't move modals dom position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.scrollTop = 0\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(ClassName.SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(Event.SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(Event.FOCUSIN) // guard against infinite focus loop\n .on(Event.FOCUSIN, (event) => {\n if (document !== event.target &&\n this._element !== event.target &&\n !$(this._element).has(event.target).length) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown && this._config.keyboard) {\n $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\n if (event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n }\n })\n\n } else if (!this._isShown) {\n $(this._element).off(Event.KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(Event.RESIZE, (event) => this.handleUpdate(event))\n } else {\n $(window).off(Event.RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(ClassName.OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(Event.HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(ClassName.FADE) ?\n ClassName.FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n const doAnimate = Util.supportsTransitionEnd() && animate\n\n this._backdrop = document.createElement('div')\n this._backdrop.className = ClassName.BACKDROP\n\n if (animate) {\n $(this._backdrop).addClass(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(Event.CLICK_DISMISS, (event) => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n if (event.target !== event.currentTarget) {\n return\n }\n if (this._config.backdrop === 'static') {\n this._element.focus()\n } else {\n this.hide()\n }\n })\n\n if (doAnimate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(ClassName.SHOW)\n\n if (!callback) {\n return\n }\n\n if (!doAnimate) {\n callback()\n return\n }\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(BACKDROP_TRANSITION_DURATION)\n\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(ClassName.SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if (Util.supportsTransitionEnd() &&\n $(this._element).hasClass(ClassName.FADE)) {\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(BACKDROP_TRANSITION_DURATION)\n } else {\n callbackRemove()\n }\n\n } else if (callback) {\n callback()\n }\n }\n\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing =\n this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = rect.left + rect.right < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n\n // Adjust fixed content padding\n $(Selector.FIXED_CONTENT).each((index, element) => {\n const actualPadding = $(element)[0].style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(Selector.STICKY_CONTENT).each((index, element) => {\n const actualMargin = $(element)[0].style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust navbar-toggler margin\n $(Selector.NAVBAR_TOGGLER).each((index, element) => {\n const actualMargin = $(element)[0].style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) + this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $('body').css('padding-right')\n $('body').data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n $(Selector.FIXED_CONTENT).each((index, element) => {\n const padding = $(element).data('padding-right')\n if (typeof padding !== 'undefined') {\n $(element).css('padding-right', padding).removeData('padding-right')\n }\n })\n\n // Restore sticky content and navbar-toggler margin\n $(`${Selector.STICKY_CONTENT}, ${Selector.NAVBAR_TOGGLER}`).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $('body').data('padding-right')\n if (typeof padding !== 'undefined') {\n $('body').css('padding-right', padding).removeData('padding-right')\n }\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = ClassName.SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n\n // static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = $.extend(\n {},\n Modal.Default,\n $(this).data(),\n typeof config === 'object' && config\n )\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new Error(`No method named \"${config}\"`)\n }\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = $(selector)[0]\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : $.extend({}, $(target).data(), $(this).data())\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(Event.SHOW, (showEvent) => {\n if (showEvent.isDefaultPrevented()) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(Event.HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n })\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Modal._jQueryInterface\n $.fn[NAME].Constructor = Modal\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n }\n\n return Modal\n\n})($)\n\nexport default Modal\n","import $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tooltip = (() => {\n\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new Error('Bootstrap tooltips require Popper.js (https://popper.js.org)')\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.0.0-beta.2'\n const DATA_KEY = 'bs.tooltip'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 150\n const CLASS_PREFIX = 'bs-tooltip'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const DefaultType = {\n animation : 'boolean',\n template : 'string',\n title : '(string|element|function)',\n trigger : 'string',\n delay : '(number|object)',\n html : 'boolean',\n selector : '(string|boolean)',\n placement : '(string|function)',\n offset : '(number|string)',\n container : '(string|element|boolean)',\n fallbackPlacement : '(string|array)'\n }\n\n const AttachmentMap = {\n AUTO : 'auto',\n TOP : 'top',\n RIGHT : 'right',\n BOTTOM : 'bottom',\n LEFT : 'left'\n }\n\n const Default = {\n animation : true,\n template : '
'\n + '
'\n + '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : 0,\n container : false,\n fallbackPlacement : 'flip'\n }\n\n const HoverState = {\n SHOW : 'show',\n OUT : 'out'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n ARROW : '.arrow'\n }\n\n const Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n\n constructor(element, config) {\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n\n // public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n\n } else {\n\n if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal')\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this.config.container === false ? document.body : $(this.config.container)\n\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, {\n placement: attachment,\n modifiers: {\n offset: {\n offset: this.config.offset\n },\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: Selector.ARROW\n }\n },\n onCreate: (data) => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate : (data) => {\n this._handlePopperPlacementChange(data)\n }\n })\n\n $(tip).addClass(ClassName.SHOW)\n\n // if this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $('body').children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(Tooltip._TRANSITION_DURATION)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HoverState.SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.SHOW)\n\n // if this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $('body').children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[Trigger.CLICK] = false\n this._activeTrigger[Trigger.FOCUS] = false\n this._activeTrigger[Trigger.HOVER] = false\n\n if (Util.supportsTransitionEnd() &&\n $(this.tip).hasClass(ClassName.FADE)) {\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n } else {\n complete()\n }\n\n this._hoverState = ''\n\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle())\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n setElementContent($element, content) {\n const html = this.config.html\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // content is a DOM node or a jQuery\n if (html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n } else {\n $element[html ? 'html' : 'text'](content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n\n // private\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n (event) => this.toggle(event)\n )\n\n } else if (trigger !== Trigger.MANUAL) {\n const eventIn = trigger === Trigger.HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === Trigger.HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n (event) => this._enter(event)\n )\n .on(\n eventOut,\n this.config.selector,\n (event) => this._leave(event)\n )\n }\n\n $(this.element).closest('.modal').on(\n 'hide.bs.modal',\n () => this.hide()\n )\n })\n\n if (this.config.selector) {\n this.config = $.extend({}, this.config, {\n trigger : 'manual',\n selector : ''\n })\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.SHOW) ||\n context._hoverState === HoverState.SHOW) {\n context._hoverState = HoverState.SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = $.extend(\n {},\n this.constructor.Default,\n $(this.element).data(),\n config\n )\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show : config.delay,\n hide : config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(data) {\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(data.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n $(tip).removeClass(ClassName.FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new Error(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n\n})($, Popper)\n\nexport default Tooltip\n","import $ from 'jquery'\nimport Tooltip from './tooltip'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Popover = (() => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'popover'\n const VERSION = '4.0.0-beta.2'\n const DATA_KEY = 'bs.popover'\n const EVENT_KEY = `.${DATA_KEY}`\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const CLASS_PREFIX = 'bs-popover'\n const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\n const Default = $.extend({}, Tooltip.Default, {\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
'\n + '
'\n + '

'\n + '
'\n })\n\n const DefaultType = $.extend({}, Tooltip.DefaultType, {\n content : '(string|element|function)'\n })\n\n const ClassName = {\n FADE : 'fade',\n SHOW : 'show'\n }\n\n const Selector = {\n TITLE : '.popover-header',\n CONTENT : '.popover-body'\n }\n\n const Event = {\n HIDE : `hide${EVENT_KEY}`,\n HIDDEN : `hidden${EVENT_KEY}`,\n SHOW : `show${EVENT_KEY}`,\n SHOWN : `shown${EVENT_KEY}`,\n INSERTED : `inserted${EVENT_KEY}`,\n CLICK : `click${EVENT_KEY}`,\n FOCUSIN : `focusin${EVENT_KEY}`,\n FOCUSOUT : `focusout${EVENT_KEY}`,\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\n MOUSELEAVE : `mouseleave${EVENT_KEY}`\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Popover extends Tooltip {\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n\n // overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // we use append for html objects to maintain js events\n this.setElementContent($tip.find(Selector.TITLE), this.getTitle())\n this.setElementContent($tip.find(Selector.CONTENT), this._getContent())\n\n $tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`)\n }\n\n // private\n\n _getContent() {\n return this.element.getAttribute('data-content')\n || (typeof this.config.content === 'function' ?\n this.config.content.call(this.element) :\n this.config.content)\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /destroy|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new Error(`No method named \"${config}\"`)\n }\n data[config]()\n }\n })\n }\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Popover._jQueryInterface\n $.fn[NAME].Constructor = Popover\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n }\n\n return Popover\n\n})($)\n\nexport default Popover\n","import $ from 'jquery'\nimport Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst ScrollSpy = (() => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'scrollspy'\n const VERSION = '4.0.0-beta.2'\n const DATA_KEY = 'bs.scrollspy'\n const EVENT_KEY = `.${DATA_KEY}`\n const DATA_API_KEY = '.data-api'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n offset : 10,\n method : 'auto',\n target : ''\n }\n\n const DefaultType = {\n offset : 'number',\n method : 'string',\n target : '(string|element)'\n }\n\n const Event = {\n ACTIVATE : `activate${EVENT_KEY}`,\n SCROLL : `scroll${EVENT_KEY}`,\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`\n }\n\n const ClassName = {\n DROPDOWN_ITEM : 'dropdown-item',\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n }\n\n const Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n NAV_LIST_GROUP : '.nav, .list-group',\n NAV_LINKS : '.nav-link',\n NAV_ITEMS : '.nav-item',\n LIST_ITEMS : '.list-group-item',\n DROPDOWN : '.dropdown',\n DROPDOWN_ITEMS : '.dropdown-item',\n DROPDOWN_TOGGLE : '.dropdown-toggle'\n }\n\n const OffsetMethod = {\n OFFSET : 'offset',\n POSITION : 'position'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class ScrollSpy {\n\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${Selector.NAV_LINKS},`\n + `${this._config.target} ${Selector.LIST_ITEMS},`\n + `${this._config.target} ${Selector.DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, (event) => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n\n // public\n\n refresh() {\n const autoMethod = this._scrollElement !== this._scrollElement.window ?\n OffsetMethod.POSITION : OffsetMethod.OFFSET\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === OffsetMethod.POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = $.makeArray($(this._selector))\n\n targets\n .map((element) => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = $(targetSelector)[0]\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // todo (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n return null\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n\n // private\n\n _getConfig(config) {\n config = $.extend({}, Default, config)\n\n if (typeof config.target !== 'string') {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset\n + scrollHeight\n - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i]\n && scrollTop >= this._offsets[i]\n && (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n let queries = this._selector.split(',')\n // eslint-disable-next-line arrow-body-style\n queries = queries.map((selector) => {\n return `${selector}[data-target=\"${target}\"],` +\n `${selector}[href=\"${target}\"]`\n })\n\n const $link = $(queries.join(','))\n\n if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n $link.addClass(ClassName.ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(ClassName.ACTIVE)\n // Set triggered links parents as active\n // With both
'),this.element.appendChild(e));var l=e.getElementsByTagName("span")[0];return l&&(null!=l.textContent?l.textContent=this.options.dictFallbackMessage:null!=l.innerText&&(l.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(e,t,n,i){var r={srcX:0,srcY:0,srcWidth:e.width,srcHeight:e.height},o=e.width/e.height;null==t&&null==n?(t=r.srcWidth,n=r.srcHeight):null==t?t=n*o:null==n&&(n=t/o);var a=(t=Math.min(t,r.srcWidth))/(n=Math.min(n,r.srcHeight));if(r.srcWidth>t||r.srcHeight>n)if("crop"===i)a\n
\n
\n
\n
\n
\n
\n
\n
\n \n Check\n \n \n \n \n
\n
\n \n Error\n \n \n \n \n \n \n
\n
',drop:function(){return this.element.classList.remove("dz-drag-hover")},dragstart:function(){},dragend:function(){return this.element.classList.remove("dz-drag-hover")},dragenter:function(){return this.element.classList.add("dz-drag-hover")},dragover:function(){return this.element.classList.add("dz-drag-hover")},dragleave:function(){return this.element.classList.remove("dz-drag-hover")},paste:function(){},reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(t){var n=this;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){t.previewElement=C.createElement(this.options.previewTemplate.trim()),t.previewTemplate=t.previewElement,this.previewsContainer.appendChild(t.previewElement);var e=!0,i=!1,r=void 0;try{for(var o,a=t.previewElement.querySelectorAll("[data-dz-name]")[Symbol.iterator]();!(e=(o=a.next()).done);e=!0){var l=o.value;l.textContent=t.name}}catch(e){i=!0,r=e}finally{try{e||null==a.return||a.return()}finally{if(i)throw r}}var s=!0,u=!1,c=void 0;try{for(var d,p=t.previewElement.querySelectorAll("[data-dz-size]")[Symbol.iterator]();!(s=(d=p.next()).done);s=!0)(l=d.value).innerHTML=this.filesize(t.size)}catch(e){u=!0,c=e}finally{try{s||null==p.return||p.return()}finally{if(u)throw c}}this.options.addRemoveLinks&&(t._removeLink=C.createElement(''.concat(this.options.dictRemoveFile,"")),t.previewElement.appendChild(t._removeLink));var h=function(e){return e.preventDefault(),e.stopPropagation(),t.status===C.UPLOADING?C.confirm(n.options.dictCancelUploadConfirmation,function(){return n.removeFile(t)}):n.options.dictRemoveFileConfirmation?C.confirm(n.options.dictRemoveFileConfirmation,function(){return n.removeFile(t)}):n.removeFile(t)},f=!0,v=!1,m=void 0;try{for(var y,g=t.previewElement.querySelectorAll("[data-dz-remove]")[Symbol.iterator]();!(f=(y=g.next()).done);f=!0){y.value.addEventListener("click",h)}}catch(e){v=!0,m=e}finally{try{f||null==g.return||g.return()}finally{if(v)throw m}}}},removedfile:function(e){return null!=e.previewElement&&null!=e.previewElement.parentNode&&e.previewElement.parentNode.removeChild(e.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(e,t){if(e.previewElement){e.previewElement.classList.remove("dz-file-preview");var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-thumbnail]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var l=o.value;l.alt=e.name,l.src=t}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}return setTimeout(function(){return e.previewElement.classList.add("dz-image-preview")},1)}},error:function(e,t){if(e.previewElement){e.previewElement.classList.add("dz-error"),"String"!=typeof t&&t.error&&(t=t.error);var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-errormessage]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){o.value.textContent=t}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}}},errormultiple:function(){},processing:function(e){if(e.previewElement&&(e.previewElement.classList.add("dz-processing"),e._removeLink))return e._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(e,t){if(e.previewElement){var n=!0,i=!1,r=void 0;try{for(var o,a=e.previewElement.querySelectorAll("[data-dz-uploadprogress]")[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var l=o.value;"PROGRESS"===l.nodeName?l.value=t:l.style.width="".concat(t,"%")}}catch(e){i=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(e){if(e.previewElement)return e.previewElement.classList.add("dz-success")},successmultiple:function(){},canceled:function(e){return this.emit("error",e,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(e){if(e._removeLink&&(e._removeLink.innerHTML=this.options.dictRemoveFile),e.previewElement)return e.previewElement.classList.add("dz-complete")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}},this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:"extend",value:function(e){for(var t=arguments.length,n=new Array(1"))),this.clickableElements.length){!function l(){return s.hiddenFileInput&&s.hiddenFileInput.parentNode.removeChild(s.hiddenFileInput),s.hiddenFileInput=document.createElement("input"),s.hiddenFileInput.setAttribute("type","file"),(null===s.options.maxFiles||1")),n+='');var i=C.createElement(n);return"FORM"!==this.element.tagName?(t=C.createElement('
'))).appendChild(i):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=t?t:i}},{key:"getExistingFallback",value:function(){for(var e=function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;if(/(^| )fallback($| )/.test(a.className))return a}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}},t=0,n=["div","form"];t".concat(t," ").concat(this.options.dictFileSizeUnits[n])}},{key:"_updateMaxFilesReachedClass",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")}},{key:"drop",value:function(e){if(e.dataTransfer){this.emit("drop",e);for(var t=[],n=0;n1024*this.options.maxFilesize*1024?t(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(e.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):C.isValidFile(e,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(t(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",e)):this.options.accept.call(this,e,t):t(this.options.dictInvalidFileType)}},{key:"addFile",value:function(t){var n=this;t.upload={uuid:C.uuidv4(),progress:0,total:t.size,bytesSent:0,filename:this._renameFile(t)},this.files.push(t),t.status=C.ADDED,this.emit("addedfile",t),this._enqueueThumbnail(t),this.accept(t,function(e){e?(t.accepted=!1,n._errorProcessing([t],e)):(t.accepted=!0,n.options.autoQueue&&n.enqueueFile(t)),n._updateMaxFilesReachedClass()})}},{key:"enqueueFiles",value:function(e){var t=!0,n=!1,i=void 0;try{for(var r,o=e[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;this.enqueueFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return null}},{key:"enqueueFile",value:function(e){var t=this;if(e.status!==C.ADDED||!0!==e.accepted)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(e.status=C.QUEUED,this.options.autoProcessQueue)return setTimeout(function(){return t.processQueue()},0)}},{key:"_enqueueThumbnail",value:function(e){var t=this;if(this.options.createImageThumbnails&&e.type.match(/image.*/)&&e.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(e),setTimeout(function(){return t._processThumbnailQueue()},0)}},{key:"_processThumbnailQueue",value:function(){var t=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var n=this._thumbnailQueue.shift();return this.createThumbnail(n,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(e){return t.emit("thumbnail",n,e),t._processingThumbnail=!1,t._processThumbnailQueue()})}}},{key:"removeFile",value:function(e){if(e.status===C.UPLOADING&&this.cancelUpload(e),this.files=without(this.files,e),this.emit("removedfile",e),0===this.files.length)return this.emit("reset")}},{key:"removeAllFiles",value:function(e){null==e&&(e=!1);var t=!0,n=!1,i=void 0;try{for(var r,o=this.files.slice()[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var a=r.value;a.status===C.UPLOADING&&!e||this.removeFile(a)}}catch(e){n=!0,i=e}finally{try{t||null==o.return||o.return()}finally{if(n)throw i}}return null}},{key:"resizeImage",value:function(r,e,t,n,o){var a=this;return this.createThumbnail(r,e,t,n,!0,function(e,t){if(null==t)return o(r);var n=a.options.resizeMimeType;null==n&&(n=r.type);var i=t.toDataURL(n,a.options.resizeQuality);return"image/jpeg"!==n&&"image/jpg"!==n||(i=ExifRestore.restore(r.dataURL,i)),o(C.dataURItoBlob(i))})}},{key:"createThumbnail",value:function(e,t,n,i,r,o){var a=this,l=new FileReader;l.onload=function(){e.dataURL=l.result,"image/svg+xml"!==e.type?a.createThumbnailFromUrl(e,t,n,i,r,o):null!=o&&o(l.result)},l.readAsDataURL(e)}},{key:"displayExistingFile",value:function(t,e,n,i,r){var o=this,a=!(4u.options.chunkSize),s[0].upload.totalChunkCount=Math.ceil(t.size/u.options.chunkSize)}if(s[0].upload.chunked){var r=s[0],o=e[0];r.upload.chunks=[];var i=function(){for(var e=0;void 0!==r.upload.chunks[e];)e++;if(!(e>=r.upload.totalChunkCount)){0;var t=e*u.options.chunkSize,n=Math.min(t+u.options.chunkSize,r.size),i={name:u._getParamName(0),data:o.webkitSlice?o.webkitSlice(t,n):o.slice(t,n),filename:r.upload.filename,chunkIndex:e};r.upload.chunks[e]={file:r,index:e,dataBlock:i,status:C.UPLOADING,progress:0,retries:0},u._uploadData(s,[i])}};if(r.upload.finishedChunkUpload=function(e){var t=!0;e.status=C.SUCCESS,e.dataBlock=null,e.xhr=null;for(var n=0;n>1}var s=l/t;return 0==s?1:s},drawImageIOSFix=function(e,t,n,i,r,o,a,l,s,u){var c=detectVerticalSquash(t);return e.drawImage(t,n,i,r,o,a,l,s,u/c)},ExifRestore=function(){function e(){_classCallCheck(this,e)}return _createClass(e,null,[{key:"initClass",value:function(){this.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}},{key:"encode64",value:function(e){for(var t="",n=void 0,i=void 0,r="",o=void 0,a=void 0,l=void 0,s="",u=0;o=(n=e[u++])>>2,a=(3&n)<<4|(i=e[u++])>>4,l=(15&i)<<2|(r=e[u++])>>6,s=63&r,isNaN(i)?l=s=64:isNaN(r)&&(s=64),t=t+this.KEY_STR.charAt(o)+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(l)+this.KEY_STR.charAt(s),n=i=r="",o=a=l=s="",ue.length)break}return n}},{key:"decode64",value:function(e){var t=void 0,n=void 0,i="",r=void 0,o=void 0,a="",l=0,s=[];for(/[^A-Za-z0-9\+\/\=]/g.exec(e)&&console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");t=this.KEY_STR.indexOf(e.charAt(l++))<<2|(r=this.KEY_STR.indexOf(e.charAt(l++)))>>4,n=(15&r)<<4|(o=this.KEY_STR.indexOf(e.charAt(l++)))>>2,i=(3&o)<<6|(a=this.KEY_STR.indexOf(e.charAt(l++))),s.push(t),64!==o&&s.push(n),64!==a&&s.push(i),t=n=i="",r=o=a="",l+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/account-logout.svg b/Backend/static/open-iconic/svg/account-logout.svg new file mode 100644 index 0000000..123cece --- /dev/null +++ b/Backend/static/open-iconic/svg/account-logout.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/action-redo.svg b/Backend/static/open-iconic/svg/action-redo.svg new file mode 100644 index 0000000..373f7cb --- /dev/null +++ b/Backend/static/open-iconic/svg/action-redo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/action-undo.svg b/Backend/static/open-iconic/svg/action-undo.svg new file mode 100644 index 0000000..6e4cfa3 --- /dev/null +++ b/Backend/static/open-iconic/svg/action-undo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/align-center.svg b/Backend/static/open-iconic/svg/align-center.svg new file mode 100644 index 0000000..bbac8ec --- /dev/null +++ b/Backend/static/open-iconic/svg/align-center.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/align-left.svg b/Backend/static/open-iconic/svg/align-left.svg new file mode 100644 index 0000000..2e92e0d --- /dev/null +++ b/Backend/static/open-iconic/svg/align-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/align-right.svg b/Backend/static/open-iconic/svg/align-right.svg new file mode 100644 index 0000000..22d127a --- /dev/null +++ b/Backend/static/open-iconic/svg/align-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/aperture.svg b/Backend/static/open-iconic/svg/aperture.svg new file mode 100644 index 0000000..d45f6ca --- /dev/null +++ b/Backend/static/open-iconic/svg/aperture.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-bottom.svg b/Backend/static/open-iconic/svg/arrow-bottom.svg new file mode 100644 index 0000000..005d723 --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-bottom.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-circle-bottom.svg b/Backend/static/open-iconic/svg/arrow-circle-bottom.svg new file mode 100644 index 0000000..fffa96b --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-circle-bottom.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-circle-left.svg b/Backend/static/open-iconic/svg/arrow-circle-left.svg new file mode 100644 index 0000000..b4d7600 --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-circle-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-circle-right.svg b/Backend/static/open-iconic/svg/arrow-circle-right.svg new file mode 100644 index 0000000..a62bc17 --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-circle-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-circle-top.svg b/Backend/static/open-iconic/svg/arrow-circle-top.svg new file mode 100644 index 0000000..2ac6e7f --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-circle-top.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-left.svg b/Backend/static/open-iconic/svg/arrow-left.svg new file mode 100644 index 0000000..6de9f24 --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-right.svg b/Backend/static/open-iconic/svg/arrow-right.svg new file mode 100644 index 0000000..735e5f6 --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-thick-bottom.svg b/Backend/static/open-iconic/svg/arrow-thick-bottom.svg new file mode 100644 index 0000000..0c05067 --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-thick-bottom.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-thick-left.svg b/Backend/static/open-iconic/svg/arrow-thick-left.svg new file mode 100644 index 0000000..2075e42 --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-thick-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-thick-right.svg b/Backend/static/open-iconic/svg/arrow-thick-right.svg new file mode 100644 index 0000000..8b407e9 --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-thick-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-thick-top.svg b/Backend/static/open-iconic/svg/arrow-thick-top.svg new file mode 100644 index 0000000..78b310c --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-thick-top.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/arrow-top.svg b/Backend/static/open-iconic/svg/arrow-top.svg new file mode 100644 index 0000000..d03d52d --- /dev/null +++ b/Backend/static/open-iconic/svg/arrow-top.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/audio-spectrum.svg b/Backend/static/open-iconic/svg/audio-spectrum.svg new file mode 100644 index 0000000..7077ec7 --- /dev/null +++ b/Backend/static/open-iconic/svg/audio-spectrum.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/audio.svg b/Backend/static/open-iconic/svg/audio.svg new file mode 100644 index 0000000..803d592 --- /dev/null +++ b/Backend/static/open-iconic/svg/audio.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/badge.svg b/Backend/static/open-iconic/svg/badge.svg new file mode 100644 index 0000000..47b8322 --- /dev/null +++ b/Backend/static/open-iconic/svg/badge.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/ban.svg b/Backend/static/open-iconic/svg/ban.svg new file mode 100644 index 0000000..3a23300 --- /dev/null +++ b/Backend/static/open-iconic/svg/ban.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/bar-chart.svg b/Backend/static/open-iconic/svg/bar-chart.svg new file mode 100644 index 0000000..a1cde5a --- /dev/null +++ b/Backend/static/open-iconic/svg/bar-chart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/basket.svg b/Backend/static/open-iconic/svg/basket.svg new file mode 100644 index 0000000..fc5f8c5 --- /dev/null +++ b/Backend/static/open-iconic/svg/basket.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/battery-empty.svg b/Backend/static/open-iconic/svg/battery-empty.svg new file mode 100644 index 0000000..61efd9a --- /dev/null +++ b/Backend/static/open-iconic/svg/battery-empty.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/battery-full.svg b/Backend/static/open-iconic/svg/battery-full.svg new file mode 100644 index 0000000..85d8839 --- /dev/null +++ b/Backend/static/open-iconic/svg/battery-full.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/beaker.svg b/Backend/static/open-iconic/svg/beaker.svg new file mode 100644 index 0000000..0eb1c02 --- /dev/null +++ b/Backend/static/open-iconic/svg/beaker.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/bell.svg b/Backend/static/open-iconic/svg/bell.svg new file mode 100644 index 0000000..a701e7e --- /dev/null +++ b/Backend/static/open-iconic/svg/bell.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/bluetooth.svg b/Backend/static/open-iconic/svg/bluetooth.svg new file mode 100644 index 0000000..36a4028 --- /dev/null +++ b/Backend/static/open-iconic/svg/bluetooth.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/bold.svg b/Backend/static/open-iconic/svg/bold.svg new file mode 100644 index 0000000..72432db --- /dev/null +++ b/Backend/static/open-iconic/svg/bold.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/bolt.svg b/Backend/static/open-iconic/svg/bolt.svg new file mode 100644 index 0000000..d6e8df1 --- /dev/null +++ b/Backend/static/open-iconic/svg/bolt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/book.svg b/Backend/static/open-iconic/svg/book.svg new file mode 100644 index 0000000..dd6a29b --- /dev/null +++ b/Backend/static/open-iconic/svg/book.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/bookmark.svg b/Backend/static/open-iconic/svg/bookmark.svg new file mode 100644 index 0000000..cd349c7 --- /dev/null +++ b/Backend/static/open-iconic/svg/bookmark.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/box.svg b/Backend/static/open-iconic/svg/box.svg new file mode 100644 index 0000000..9d1abb0 --- /dev/null +++ b/Backend/static/open-iconic/svg/box.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/briefcase.svg b/Backend/static/open-iconic/svg/briefcase.svg new file mode 100644 index 0000000..b211550 --- /dev/null +++ b/Backend/static/open-iconic/svg/briefcase.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/british-pound.svg b/Backend/static/open-iconic/svg/british-pound.svg new file mode 100644 index 0000000..ef70d88 --- /dev/null +++ b/Backend/static/open-iconic/svg/british-pound.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/browser.svg b/Backend/static/open-iconic/svg/browser.svg new file mode 100644 index 0000000..616cfbe --- /dev/null +++ b/Backend/static/open-iconic/svg/browser.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/brush.svg b/Backend/static/open-iconic/svg/brush.svg new file mode 100644 index 0000000..bad9ec0 --- /dev/null +++ b/Backend/static/open-iconic/svg/brush.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/bug.svg b/Backend/static/open-iconic/svg/bug.svg new file mode 100644 index 0000000..70c1473 --- /dev/null +++ b/Backend/static/open-iconic/svg/bug.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/bullhorn.svg b/Backend/static/open-iconic/svg/bullhorn.svg new file mode 100644 index 0000000..885f0d5 --- /dev/null +++ b/Backend/static/open-iconic/svg/bullhorn.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/calculator.svg b/Backend/static/open-iconic/svg/calculator.svg new file mode 100644 index 0000000..f756287 --- /dev/null +++ b/Backend/static/open-iconic/svg/calculator.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/calendar.svg b/Backend/static/open-iconic/svg/calendar.svg new file mode 100644 index 0000000..a35049b --- /dev/null +++ b/Backend/static/open-iconic/svg/calendar.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/camera-slr.svg b/Backend/static/open-iconic/svg/camera-slr.svg new file mode 100644 index 0000000..0ee45c0 --- /dev/null +++ b/Backend/static/open-iconic/svg/camera-slr.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/caret-bottom.svg b/Backend/static/open-iconic/svg/caret-bottom.svg new file mode 100644 index 0000000..2b4c525 --- /dev/null +++ b/Backend/static/open-iconic/svg/caret-bottom.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/caret-left.svg b/Backend/static/open-iconic/svg/caret-left.svg new file mode 100644 index 0000000..9d2c25a --- /dev/null +++ b/Backend/static/open-iconic/svg/caret-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/caret-right.svg b/Backend/static/open-iconic/svg/caret-right.svg new file mode 100644 index 0000000..23b33a0 --- /dev/null +++ b/Backend/static/open-iconic/svg/caret-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/caret-top.svg b/Backend/static/open-iconic/svg/caret-top.svg new file mode 100644 index 0000000..2ad42e0 --- /dev/null +++ b/Backend/static/open-iconic/svg/caret-top.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/cart.svg b/Backend/static/open-iconic/svg/cart.svg new file mode 100644 index 0000000..55bdfc0 --- /dev/null +++ b/Backend/static/open-iconic/svg/cart.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/chat.svg b/Backend/static/open-iconic/svg/chat.svg new file mode 100644 index 0000000..e1a1da0 --- /dev/null +++ b/Backend/static/open-iconic/svg/chat.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/check.svg b/Backend/static/open-iconic/svg/check.svg new file mode 100644 index 0000000..8b0e73d --- /dev/null +++ b/Backend/static/open-iconic/svg/check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/chevron-bottom.svg b/Backend/static/open-iconic/svg/chevron-bottom.svg new file mode 100644 index 0000000..b919722 --- /dev/null +++ b/Backend/static/open-iconic/svg/chevron-bottom.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/chevron-left.svg b/Backend/static/open-iconic/svg/chevron-left.svg new file mode 100644 index 0000000..256902c --- /dev/null +++ b/Backend/static/open-iconic/svg/chevron-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/chevron-right.svg b/Backend/static/open-iconic/svg/chevron-right.svg new file mode 100644 index 0000000..2da0760 --- /dev/null +++ b/Backend/static/open-iconic/svg/chevron-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/chevron-top.svg b/Backend/static/open-iconic/svg/chevron-top.svg new file mode 100644 index 0000000..d8bf89c --- /dev/null +++ b/Backend/static/open-iconic/svg/chevron-top.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/circle-check.svg b/Backend/static/open-iconic/svg/circle-check.svg new file mode 100644 index 0000000..5df0f15 --- /dev/null +++ b/Backend/static/open-iconic/svg/circle-check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/circle-x.svg b/Backend/static/open-iconic/svg/circle-x.svg new file mode 100644 index 0000000..0244752 --- /dev/null +++ b/Backend/static/open-iconic/svg/circle-x.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/clipboard.svg b/Backend/static/open-iconic/svg/clipboard.svg new file mode 100644 index 0000000..6b0be4d --- /dev/null +++ b/Backend/static/open-iconic/svg/clipboard.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/clock.svg b/Backend/static/open-iconic/svg/clock.svg new file mode 100644 index 0000000..058e443 --- /dev/null +++ b/Backend/static/open-iconic/svg/clock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/cloud-download.svg b/Backend/static/open-iconic/svg/cloud-download.svg new file mode 100644 index 0000000..485cf92 --- /dev/null +++ b/Backend/static/open-iconic/svg/cloud-download.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/cloud-upload.svg b/Backend/static/open-iconic/svg/cloud-upload.svg new file mode 100644 index 0000000..2bb2196 --- /dev/null +++ b/Backend/static/open-iconic/svg/cloud-upload.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/cloud.svg b/Backend/static/open-iconic/svg/cloud.svg new file mode 100644 index 0000000..8c858ab --- /dev/null +++ b/Backend/static/open-iconic/svg/cloud.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/cloudy.svg b/Backend/static/open-iconic/svg/cloudy.svg new file mode 100644 index 0000000..0bd98c6 --- /dev/null +++ b/Backend/static/open-iconic/svg/cloudy.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/code.svg b/Backend/static/open-iconic/svg/code.svg new file mode 100644 index 0000000..14e4937 --- /dev/null +++ b/Backend/static/open-iconic/svg/code.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/cog.svg b/Backend/static/open-iconic/svg/cog.svg new file mode 100644 index 0000000..7bbbce4 --- /dev/null +++ b/Backend/static/open-iconic/svg/cog.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/collapse-down.svg b/Backend/static/open-iconic/svg/collapse-down.svg new file mode 100644 index 0000000..47a37c5 --- /dev/null +++ b/Backend/static/open-iconic/svg/collapse-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/collapse-left.svg b/Backend/static/open-iconic/svg/collapse-left.svg new file mode 100644 index 0000000..31ef1d6 --- /dev/null +++ b/Backend/static/open-iconic/svg/collapse-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/collapse-right.svg b/Backend/static/open-iconic/svg/collapse-right.svg new file mode 100644 index 0000000..6f104f6 --- /dev/null +++ b/Backend/static/open-iconic/svg/collapse-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/collapse-up.svg b/Backend/static/open-iconic/svg/collapse-up.svg new file mode 100644 index 0000000..6693e1e --- /dev/null +++ b/Backend/static/open-iconic/svg/collapse-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/command.svg b/Backend/static/open-iconic/svg/command.svg new file mode 100644 index 0000000..ae05df6 --- /dev/null +++ b/Backend/static/open-iconic/svg/command.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/comment-square.svg b/Backend/static/open-iconic/svg/comment-square.svg new file mode 100644 index 0000000..591eb51 --- /dev/null +++ b/Backend/static/open-iconic/svg/comment-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/compass.svg b/Backend/static/open-iconic/svg/compass.svg new file mode 100644 index 0000000..7b923b7 --- /dev/null +++ b/Backend/static/open-iconic/svg/compass.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/contrast.svg b/Backend/static/open-iconic/svg/contrast.svg new file mode 100644 index 0000000..a38a3a4 --- /dev/null +++ b/Backend/static/open-iconic/svg/contrast.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/copywriting.svg b/Backend/static/open-iconic/svg/copywriting.svg new file mode 100644 index 0000000..910f8c0 --- /dev/null +++ b/Backend/static/open-iconic/svg/copywriting.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/credit-card.svg b/Backend/static/open-iconic/svg/credit-card.svg new file mode 100644 index 0000000..58b508b --- /dev/null +++ b/Backend/static/open-iconic/svg/credit-card.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/crop.svg b/Backend/static/open-iconic/svg/crop.svg new file mode 100644 index 0000000..8a7f1eb --- /dev/null +++ b/Backend/static/open-iconic/svg/crop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/dashboard.svg b/Backend/static/open-iconic/svg/dashboard.svg new file mode 100644 index 0000000..083918d --- /dev/null +++ b/Backend/static/open-iconic/svg/dashboard.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/data-transfer-download.svg b/Backend/static/open-iconic/svg/data-transfer-download.svg new file mode 100644 index 0000000..9f14f33 --- /dev/null +++ b/Backend/static/open-iconic/svg/data-transfer-download.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/data-transfer-upload.svg b/Backend/static/open-iconic/svg/data-transfer-upload.svg new file mode 100644 index 0000000..5fb17fa --- /dev/null +++ b/Backend/static/open-iconic/svg/data-transfer-upload.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/delete.svg b/Backend/static/open-iconic/svg/delete.svg new file mode 100644 index 0000000..2f7ca18 --- /dev/null +++ b/Backend/static/open-iconic/svg/delete.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/dial.svg b/Backend/static/open-iconic/svg/dial.svg new file mode 100644 index 0000000..0371785 --- /dev/null +++ b/Backend/static/open-iconic/svg/dial.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/document.svg b/Backend/static/open-iconic/svg/document.svg new file mode 100644 index 0000000..8e2ba05 --- /dev/null +++ b/Backend/static/open-iconic/svg/document.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/dollar.svg b/Backend/static/open-iconic/svg/dollar.svg new file mode 100644 index 0000000..f49a4ad --- /dev/null +++ b/Backend/static/open-iconic/svg/dollar.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/double-quote-sans-left.svg b/Backend/static/open-iconic/svg/double-quote-sans-left.svg new file mode 100644 index 0000000..1ceb012 --- /dev/null +++ b/Backend/static/open-iconic/svg/double-quote-sans-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/double-quote-sans-right.svg b/Backend/static/open-iconic/svg/double-quote-sans-right.svg new file mode 100644 index 0000000..93705ae --- /dev/null +++ b/Backend/static/open-iconic/svg/double-quote-sans-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/double-quote-serif-left.svg b/Backend/static/open-iconic/svg/double-quote-serif-left.svg new file mode 100644 index 0000000..3e04ae6 --- /dev/null +++ b/Backend/static/open-iconic/svg/double-quote-serif-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/double-quote-serif-right.svg b/Backend/static/open-iconic/svg/double-quote-serif-right.svg new file mode 100644 index 0000000..9d38e9e --- /dev/null +++ b/Backend/static/open-iconic/svg/double-quote-serif-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/droplet.svg b/Backend/static/open-iconic/svg/droplet.svg new file mode 100644 index 0000000..fc4a2d4 --- /dev/null +++ b/Backend/static/open-iconic/svg/droplet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/eject.svg b/Backend/static/open-iconic/svg/eject.svg new file mode 100644 index 0000000..f7ff102 --- /dev/null +++ b/Backend/static/open-iconic/svg/eject.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/elevator.svg b/Backend/static/open-iconic/svg/elevator.svg new file mode 100644 index 0000000..1e839cf --- /dev/null +++ b/Backend/static/open-iconic/svg/elevator.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/ellipses.svg b/Backend/static/open-iconic/svg/ellipses.svg new file mode 100644 index 0000000..dd2a7ee --- /dev/null +++ b/Backend/static/open-iconic/svg/ellipses.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/envelope-closed.svg b/Backend/static/open-iconic/svg/envelope-closed.svg new file mode 100644 index 0000000..9fb9588 --- /dev/null +++ b/Backend/static/open-iconic/svg/envelope-closed.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/envelope-open.svg b/Backend/static/open-iconic/svg/envelope-open.svg new file mode 100644 index 0000000..b67740f --- /dev/null +++ b/Backend/static/open-iconic/svg/envelope-open.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/euro.svg b/Backend/static/open-iconic/svg/euro.svg new file mode 100644 index 0000000..b109761 --- /dev/null +++ b/Backend/static/open-iconic/svg/euro.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/excerpt.svg b/Backend/static/open-iconic/svg/excerpt.svg new file mode 100644 index 0000000..e83a3ee --- /dev/null +++ b/Backend/static/open-iconic/svg/excerpt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/expand-down.svg b/Backend/static/open-iconic/svg/expand-down.svg new file mode 100644 index 0000000..b1d8ed0 --- /dev/null +++ b/Backend/static/open-iconic/svg/expand-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/expand-left.svg b/Backend/static/open-iconic/svg/expand-left.svg new file mode 100644 index 0000000..380eae2 --- /dev/null +++ b/Backend/static/open-iconic/svg/expand-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/expand-right.svg b/Backend/static/open-iconic/svg/expand-right.svg new file mode 100644 index 0000000..a75dadb --- /dev/null +++ b/Backend/static/open-iconic/svg/expand-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/expand-up.svg b/Backend/static/open-iconic/svg/expand-up.svg new file mode 100644 index 0000000..36c3973 --- /dev/null +++ b/Backend/static/open-iconic/svg/expand-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/external-link.svg b/Backend/static/open-iconic/svg/external-link.svg new file mode 100644 index 0000000..6fdc00c --- /dev/null +++ b/Backend/static/open-iconic/svg/external-link.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/eye.svg b/Backend/static/open-iconic/svg/eye.svg new file mode 100644 index 0000000..9f6f158 --- /dev/null +++ b/Backend/static/open-iconic/svg/eye.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/eyedropper.svg b/Backend/static/open-iconic/svg/eyedropper.svg new file mode 100644 index 0000000..97b8e13 --- /dev/null +++ b/Backend/static/open-iconic/svg/eyedropper.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/file.svg b/Backend/static/open-iconic/svg/file.svg new file mode 100644 index 0000000..145853d --- /dev/null +++ b/Backend/static/open-iconic/svg/file.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/fire.svg b/Backend/static/open-iconic/svg/fire.svg new file mode 100644 index 0000000..aeb99e7 --- /dev/null +++ b/Backend/static/open-iconic/svg/fire.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/flag.svg b/Backend/static/open-iconic/svg/flag.svg new file mode 100644 index 0000000..da93787 --- /dev/null +++ b/Backend/static/open-iconic/svg/flag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/flash.svg b/Backend/static/open-iconic/svg/flash.svg new file mode 100644 index 0000000..20a8a37 --- /dev/null +++ b/Backend/static/open-iconic/svg/flash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/folder.svg b/Backend/static/open-iconic/svg/folder.svg new file mode 100644 index 0000000..ef47dd6 --- /dev/null +++ b/Backend/static/open-iconic/svg/folder.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/fork.svg b/Backend/static/open-iconic/svg/fork.svg new file mode 100644 index 0000000..12e41f5 --- /dev/null +++ b/Backend/static/open-iconic/svg/fork.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/fullscreen-enter.svg b/Backend/static/open-iconic/svg/fullscreen-enter.svg new file mode 100644 index 0000000..4efb890 --- /dev/null +++ b/Backend/static/open-iconic/svg/fullscreen-enter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/fullscreen-exit.svg b/Backend/static/open-iconic/svg/fullscreen-exit.svg new file mode 100644 index 0000000..c57d8ad --- /dev/null +++ b/Backend/static/open-iconic/svg/fullscreen-exit.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/globe.svg b/Backend/static/open-iconic/svg/globe.svg new file mode 100644 index 0000000..42a6dfe --- /dev/null +++ b/Backend/static/open-iconic/svg/globe.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/graph.svg b/Backend/static/open-iconic/svg/graph.svg new file mode 100644 index 0000000..4727dd8 --- /dev/null +++ b/Backend/static/open-iconic/svg/graph.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/grid-four-up.svg b/Backend/static/open-iconic/svg/grid-four-up.svg new file mode 100644 index 0000000..bdcc178 --- /dev/null +++ b/Backend/static/open-iconic/svg/grid-four-up.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/grid-three-up.svg b/Backend/static/open-iconic/svg/grid-three-up.svg new file mode 100644 index 0000000..2a929a0 --- /dev/null +++ b/Backend/static/open-iconic/svg/grid-three-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/grid-two-up.svg b/Backend/static/open-iconic/svg/grid-two-up.svg new file mode 100644 index 0000000..71503ba --- /dev/null +++ b/Backend/static/open-iconic/svg/grid-two-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/hard-drive.svg b/Backend/static/open-iconic/svg/hard-drive.svg new file mode 100644 index 0000000..8fcd853 --- /dev/null +++ b/Backend/static/open-iconic/svg/hard-drive.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/header.svg b/Backend/static/open-iconic/svg/header.svg new file mode 100644 index 0000000..e794cc4 --- /dev/null +++ b/Backend/static/open-iconic/svg/header.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/headphones.svg b/Backend/static/open-iconic/svg/headphones.svg new file mode 100644 index 0000000..63e4559 --- /dev/null +++ b/Backend/static/open-iconic/svg/headphones.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/heart.svg b/Backend/static/open-iconic/svg/heart.svg new file mode 100644 index 0000000..cc5f71e --- /dev/null +++ b/Backend/static/open-iconic/svg/heart.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/home.svg b/Backend/static/open-iconic/svg/home.svg new file mode 100644 index 0000000..8057619 --- /dev/null +++ b/Backend/static/open-iconic/svg/home.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/image.svg b/Backend/static/open-iconic/svg/image.svg new file mode 100644 index 0000000..fa9a105 --- /dev/null +++ b/Backend/static/open-iconic/svg/image.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/inbox.svg b/Backend/static/open-iconic/svg/inbox.svg new file mode 100644 index 0000000..4c8fbd0 --- /dev/null +++ b/Backend/static/open-iconic/svg/inbox.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/infinity.svg b/Backend/static/open-iconic/svg/infinity.svg new file mode 100644 index 0000000..bdc5569 --- /dev/null +++ b/Backend/static/open-iconic/svg/infinity.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/info.svg b/Backend/static/open-iconic/svg/info.svg new file mode 100644 index 0000000..a61e598 --- /dev/null +++ b/Backend/static/open-iconic/svg/info.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/italic.svg b/Backend/static/open-iconic/svg/italic.svg new file mode 100644 index 0000000..facb403 --- /dev/null +++ b/Backend/static/open-iconic/svg/italic.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/justify-center.svg b/Backend/static/open-iconic/svg/justify-center.svg new file mode 100644 index 0000000..544162c --- /dev/null +++ b/Backend/static/open-iconic/svg/justify-center.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/justify-left.svg b/Backend/static/open-iconic/svg/justify-left.svg new file mode 100644 index 0000000..e5787c3 --- /dev/null +++ b/Backend/static/open-iconic/svg/justify-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/justify-right.svg b/Backend/static/open-iconic/svg/justify-right.svg new file mode 100644 index 0000000..2e8c6fd --- /dev/null +++ b/Backend/static/open-iconic/svg/justify-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/key.svg b/Backend/static/open-iconic/svg/key.svg new file mode 100644 index 0000000..9517346 --- /dev/null +++ b/Backend/static/open-iconic/svg/key.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/laptop.svg b/Backend/static/open-iconic/svg/laptop.svg new file mode 100644 index 0000000..b8e7e56 --- /dev/null +++ b/Backend/static/open-iconic/svg/laptop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/layers.svg b/Backend/static/open-iconic/svg/layers.svg new file mode 100644 index 0000000..564c4ae --- /dev/null +++ b/Backend/static/open-iconic/svg/layers.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/lightbulb.svg b/Backend/static/open-iconic/svg/lightbulb.svg new file mode 100644 index 0000000..8c0d98a --- /dev/null +++ b/Backend/static/open-iconic/svg/lightbulb.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/link-broken.svg b/Backend/static/open-iconic/svg/link-broken.svg new file mode 100644 index 0000000..7bd085e --- /dev/null +++ b/Backend/static/open-iconic/svg/link-broken.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/link-intact.svg b/Backend/static/open-iconic/svg/link-intact.svg new file mode 100644 index 0000000..cdfbabd --- /dev/null +++ b/Backend/static/open-iconic/svg/link-intact.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/list-rich.svg b/Backend/static/open-iconic/svg/list-rich.svg new file mode 100644 index 0000000..cf816d1 --- /dev/null +++ b/Backend/static/open-iconic/svg/list-rich.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/list.svg b/Backend/static/open-iconic/svg/list.svg new file mode 100644 index 0000000..83ada76 --- /dev/null +++ b/Backend/static/open-iconic/svg/list.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/location.svg b/Backend/static/open-iconic/svg/location.svg new file mode 100644 index 0000000..9fa01f2 --- /dev/null +++ b/Backend/static/open-iconic/svg/location.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/lock-locked.svg b/Backend/static/open-iconic/svg/lock-locked.svg new file mode 100644 index 0000000..ef54f3a --- /dev/null +++ b/Backend/static/open-iconic/svg/lock-locked.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/lock-unlocked.svg b/Backend/static/open-iconic/svg/lock-unlocked.svg new file mode 100644 index 0000000..7f78a6f --- /dev/null +++ b/Backend/static/open-iconic/svg/lock-unlocked.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/loop-circular.svg b/Backend/static/open-iconic/svg/loop-circular.svg new file mode 100644 index 0000000..fe5853a --- /dev/null +++ b/Backend/static/open-iconic/svg/loop-circular.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/loop-square.svg b/Backend/static/open-iconic/svg/loop-square.svg new file mode 100644 index 0000000..e052f40 --- /dev/null +++ b/Backend/static/open-iconic/svg/loop-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/loop.svg b/Backend/static/open-iconic/svg/loop.svg new file mode 100644 index 0000000..4b524c3 --- /dev/null +++ b/Backend/static/open-iconic/svg/loop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/magnifying-glass.svg b/Backend/static/open-iconic/svg/magnifying-glass.svg new file mode 100644 index 0000000..1e4ffb6 --- /dev/null +++ b/Backend/static/open-iconic/svg/magnifying-glass.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/map-marker.svg b/Backend/static/open-iconic/svg/map-marker.svg new file mode 100644 index 0000000..e1f5b99 --- /dev/null +++ b/Backend/static/open-iconic/svg/map-marker.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/map.svg b/Backend/static/open-iconic/svg/map.svg new file mode 100644 index 0000000..28f377c --- /dev/null +++ b/Backend/static/open-iconic/svg/map.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/media-pause.svg b/Backend/static/open-iconic/svg/media-pause.svg new file mode 100644 index 0000000..a74159e --- /dev/null +++ b/Backend/static/open-iconic/svg/media-pause.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/media-play.svg b/Backend/static/open-iconic/svg/media-play.svg new file mode 100644 index 0000000..54cebff --- /dev/null +++ b/Backend/static/open-iconic/svg/media-play.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/media-record.svg b/Backend/static/open-iconic/svg/media-record.svg new file mode 100644 index 0000000..6bbe079 --- /dev/null +++ b/Backend/static/open-iconic/svg/media-record.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/media-skip-backward.svg b/Backend/static/open-iconic/svg/media-skip-backward.svg new file mode 100644 index 0000000..c60167b --- /dev/null +++ b/Backend/static/open-iconic/svg/media-skip-backward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/media-skip-forward.svg b/Backend/static/open-iconic/svg/media-skip-forward.svg new file mode 100644 index 0000000..13b8a52 --- /dev/null +++ b/Backend/static/open-iconic/svg/media-skip-forward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/media-step-backward.svg b/Backend/static/open-iconic/svg/media-step-backward.svg new file mode 100644 index 0000000..78ac714 --- /dev/null +++ b/Backend/static/open-iconic/svg/media-step-backward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/media-step-forward.svg b/Backend/static/open-iconic/svg/media-step-forward.svg new file mode 100644 index 0000000..df21299 --- /dev/null +++ b/Backend/static/open-iconic/svg/media-step-forward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/media-stop.svg b/Backend/static/open-iconic/svg/media-stop.svg new file mode 100644 index 0000000..af6f4f4 --- /dev/null +++ b/Backend/static/open-iconic/svg/media-stop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/medical-cross.svg b/Backend/static/open-iconic/svg/medical-cross.svg new file mode 100644 index 0000000..71028f9 --- /dev/null +++ b/Backend/static/open-iconic/svg/medical-cross.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/menu.svg b/Backend/static/open-iconic/svg/menu.svg new file mode 100644 index 0000000..79a4d8c --- /dev/null +++ b/Backend/static/open-iconic/svg/menu.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/microphone.svg b/Backend/static/open-iconic/svg/microphone.svg new file mode 100644 index 0000000..088bc44 --- /dev/null +++ b/Backend/static/open-iconic/svg/microphone.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/minus.svg b/Backend/static/open-iconic/svg/minus.svg new file mode 100644 index 0000000..82f4163 --- /dev/null +++ b/Backend/static/open-iconic/svg/minus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/monitor.svg b/Backend/static/open-iconic/svg/monitor.svg new file mode 100644 index 0000000..a7c4667 --- /dev/null +++ b/Backend/static/open-iconic/svg/monitor.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/moon.svg b/Backend/static/open-iconic/svg/moon.svg new file mode 100644 index 0000000..b5520af --- /dev/null +++ b/Backend/static/open-iconic/svg/moon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/move.svg b/Backend/static/open-iconic/svg/move.svg new file mode 100644 index 0000000..4674db8 --- /dev/null +++ b/Backend/static/open-iconic/svg/move.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/musical-note.svg b/Backend/static/open-iconic/svg/musical-note.svg new file mode 100644 index 0000000..644ca61 --- /dev/null +++ b/Backend/static/open-iconic/svg/musical-note.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/paperclip.svg b/Backend/static/open-iconic/svg/paperclip.svg new file mode 100644 index 0000000..380fe55 --- /dev/null +++ b/Backend/static/open-iconic/svg/paperclip.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/pencil.svg b/Backend/static/open-iconic/svg/pencil.svg new file mode 100644 index 0000000..8109530 --- /dev/null +++ b/Backend/static/open-iconic/svg/pencil.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/people.svg b/Backend/static/open-iconic/svg/people.svg new file mode 100644 index 0000000..7d909ca --- /dev/null +++ b/Backend/static/open-iconic/svg/people.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/person.svg b/Backend/static/open-iconic/svg/person.svg new file mode 100644 index 0000000..a9396b2 --- /dev/null +++ b/Backend/static/open-iconic/svg/person.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/phone.svg b/Backend/static/open-iconic/svg/phone.svg new file mode 100644 index 0000000..883f3ba --- /dev/null +++ b/Backend/static/open-iconic/svg/phone.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/pie-chart.svg b/Backend/static/open-iconic/svg/pie-chart.svg new file mode 100644 index 0000000..8d04463 --- /dev/null +++ b/Backend/static/open-iconic/svg/pie-chart.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/pin.svg b/Backend/static/open-iconic/svg/pin.svg new file mode 100644 index 0000000..3aa1c8c --- /dev/null +++ b/Backend/static/open-iconic/svg/pin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/play-circle.svg b/Backend/static/open-iconic/svg/play-circle.svg new file mode 100644 index 0000000..d668d52 --- /dev/null +++ b/Backend/static/open-iconic/svg/play-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/plus.svg b/Backend/static/open-iconic/svg/plus.svg new file mode 100644 index 0000000..74aea49 --- /dev/null +++ b/Backend/static/open-iconic/svg/plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/power-standby.svg b/Backend/static/open-iconic/svg/power-standby.svg new file mode 100644 index 0000000..0a08500 --- /dev/null +++ b/Backend/static/open-iconic/svg/power-standby.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/print.svg b/Backend/static/open-iconic/svg/print.svg new file mode 100644 index 0000000..4fa2202 --- /dev/null +++ b/Backend/static/open-iconic/svg/print.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/project.svg b/Backend/static/open-iconic/svg/project.svg new file mode 100644 index 0000000..e8e9154 --- /dev/null +++ b/Backend/static/open-iconic/svg/project.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/pulse.svg b/Backend/static/open-iconic/svg/pulse.svg new file mode 100644 index 0000000..751c7e0 --- /dev/null +++ b/Backend/static/open-iconic/svg/pulse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/puzzle-piece.svg b/Backend/static/open-iconic/svg/puzzle-piece.svg new file mode 100644 index 0000000..6a56995 --- /dev/null +++ b/Backend/static/open-iconic/svg/puzzle-piece.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/question-mark.svg b/Backend/static/open-iconic/svg/question-mark.svg new file mode 100644 index 0000000..a5e65ce --- /dev/null +++ b/Backend/static/open-iconic/svg/question-mark.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/rain.svg b/Backend/static/open-iconic/svg/rain.svg new file mode 100644 index 0000000..0891310 --- /dev/null +++ b/Backend/static/open-iconic/svg/rain.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/random.svg b/Backend/static/open-iconic/svg/random.svg new file mode 100644 index 0000000..9908f14 --- /dev/null +++ b/Backend/static/open-iconic/svg/random.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/reload.svg b/Backend/static/open-iconic/svg/reload.svg new file mode 100644 index 0000000..92611c5 --- /dev/null +++ b/Backend/static/open-iconic/svg/reload.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/resize-both.svg b/Backend/static/open-iconic/svg/resize-both.svg new file mode 100644 index 0000000..d4d0fb4 --- /dev/null +++ b/Backend/static/open-iconic/svg/resize-both.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/resize-height.svg b/Backend/static/open-iconic/svg/resize-height.svg new file mode 100644 index 0000000..8ddb0e5 --- /dev/null +++ b/Backend/static/open-iconic/svg/resize-height.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/resize-width.svg b/Backend/static/open-iconic/svg/resize-width.svg new file mode 100644 index 0000000..864ebaf --- /dev/null +++ b/Backend/static/open-iconic/svg/resize-width.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/rss-alt.svg b/Backend/static/open-iconic/svg/rss-alt.svg new file mode 100644 index 0000000..b55d816 --- /dev/null +++ b/Backend/static/open-iconic/svg/rss-alt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/rss.svg b/Backend/static/open-iconic/svg/rss.svg new file mode 100644 index 0000000..1e70b74 --- /dev/null +++ b/Backend/static/open-iconic/svg/rss.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/script.svg b/Backend/static/open-iconic/svg/script.svg new file mode 100644 index 0000000..14b7ff8 --- /dev/null +++ b/Backend/static/open-iconic/svg/script.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/share-boxed.svg b/Backend/static/open-iconic/svg/share-boxed.svg new file mode 100644 index 0000000..46f29a5 --- /dev/null +++ b/Backend/static/open-iconic/svg/share-boxed.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/share.svg b/Backend/static/open-iconic/svg/share.svg new file mode 100644 index 0000000..604cf5a --- /dev/null +++ b/Backend/static/open-iconic/svg/share.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/shield.svg b/Backend/static/open-iconic/svg/shield.svg new file mode 100644 index 0000000..1ebf81e --- /dev/null +++ b/Backend/static/open-iconic/svg/shield.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/signal.svg b/Backend/static/open-iconic/svg/signal.svg new file mode 100644 index 0000000..14137f4 --- /dev/null +++ b/Backend/static/open-iconic/svg/signal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/signpost.svg b/Backend/static/open-iconic/svg/signpost.svg new file mode 100644 index 0000000..965e95a --- /dev/null +++ b/Backend/static/open-iconic/svg/signpost.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/sort-ascending.svg b/Backend/static/open-iconic/svg/sort-ascending.svg new file mode 100644 index 0000000..bb8d497 --- /dev/null +++ b/Backend/static/open-iconic/svg/sort-ascending.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/sort-descending.svg b/Backend/static/open-iconic/svg/sort-descending.svg new file mode 100644 index 0000000..6af7349 --- /dev/null +++ b/Backend/static/open-iconic/svg/sort-descending.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/spreadsheet.svg b/Backend/static/open-iconic/svg/spreadsheet.svg new file mode 100644 index 0000000..f2f7c8f --- /dev/null +++ b/Backend/static/open-iconic/svg/spreadsheet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/star.svg b/Backend/static/open-iconic/svg/star.svg new file mode 100644 index 0000000..ab716a0 --- /dev/null +++ b/Backend/static/open-iconic/svg/star.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/sun.svg b/Backend/static/open-iconic/svg/sun.svg new file mode 100644 index 0000000..d8245ff --- /dev/null +++ b/Backend/static/open-iconic/svg/sun.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/tablet.svg b/Backend/static/open-iconic/svg/tablet.svg new file mode 100644 index 0000000..25d0eaa --- /dev/null +++ b/Backend/static/open-iconic/svg/tablet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/tag.svg b/Backend/static/open-iconic/svg/tag.svg new file mode 100644 index 0000000..b9efc2b --- /dev/null +++ b/Backend/static/open-iconic/svg/tag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/tags.svg b/Backend/static/open-iconic/svg/tags.svg new file mode 100644 index 0000000..d01264d --- /dev/null +++ b/Backend/static/open-iconic/svg/tags.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/target.svg b/Backend/static/open-iconic/svg/target.svg new file mode 100644 index 0000000..68daa5e --- /dev/null +++ b/Backend/static/open-iconic/svg/target.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/task.svg b/Backend/static/open-iconic/svg/task.svg new file mode 100644 index 0000000..786c7bf --- /dev/null +++ b/Backend/static/open-iconic/svg/task.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/terminal.svg b/Backend/static/open-iconic/svg/terminal.svg new file mode 100644 index 0000000..59fabc5 --- /dev/null +++ b/Backend/static/open-iconic/svg/terminal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/text.svg b/Backend/static/open-iconic/svg/text.svg new file mode 100644 index 0000000..7a4ffb4 --- /dev/null +++ b/Backend/static/open-iconic/svg/text.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/thumb-down.svg b/Backend/static/open-iconic/svg/thumb-down.svg new file mode 100644 index 0000000..e2d2706 --- /dev/null +++ b/Backend/static/open-iconic/svg/thumb-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/thumb-up.svg b/Backend/static/open-iconic/svg/thumb-up.svg new file mode 100644 index 0000000..2c936b6 --- /dev/null +++ b/Backend/static/open-iconic/svg/thumb-up.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/timer.svg b/Backend/static/open-iconic/svg/timer.svg new file mode 100644 index 0000000..9041be3 --- /dev/null +++ b/Backend/static/open-iconic/svg/timer.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/transfer.svg b/Backend/static/open-iconic/svg/transfer.svg new file mode 100644 index 0000000..39ace35 --- /dev/null +++ b/Backend/static/open-iconic/svg/transfer.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/trash.svg b/Backend/static/open-iconic/svg/trash.svg new file mode 100644 index 0000000..83d8cdc --- /dev/null +++ b/Backend/static/open-iconic/svg/trash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/underline.svg b/Backend/static/open-iconic/svg/underline.svg new file mode 100644 index 0000000..a6f8073 --- /dev/null +++ b/Backend/static/open-iconic/svg/underline.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/vertical-align-bottom.svg b/Backend/static/open-iconic/svg/vertical-align-bottom.svg new file mode 100644 index 0000000..1e8dd01 --- /dev/null +++ b/Backend/static/open-iconic/svg/vertical-align-bottom.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/vertical-align-center.svg b/Backend/static/open-iconic/svg/vertical-align-center.svg new file mode 100644 index 0000000..2069a11 --- /dev/null +++ b/Backend/static/open-iconic/svg/vertical-align-center.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/vertical-align-top.svg b/Backend/static/open-iconic/svg/vertical-align-top.svg new file mode 100644 index 0000000..d303529 --- /dev/null +++ b/Backend/static/open-iconic/svg/vertical-align-top.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/video.svg b/Backend/static/open-iconic/svg/video.svg new file mode 100644 index 0000000..001148b --- /dev/null +++ b/Backend/static/open-iconic/svg/video.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/volume-high.svg b/Backend/static/open-iconic/svg/volume-high.svg new file mode 100644 index 0000000..c8a52c6 --- /dev/null +++ b/Backend/static/open-iconic/svg/volume-high.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/volume-low.svg b/Backend/static/open-iconic/svg/volume-low.svg new file mode 100644 index 0000000..bd492db --- /dev/null +++ b/Backend/static/open-iconic/svg/volume-low.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/volume-off.svg b/Backend/static/open-iconic/svg/volume-off.svg new file mode 100644 index 0000000..38237b2 --- /dev/null +++ b/Backend/static/open-iconic/svg/volume-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/warning.svg b/Backend/static/open-iconic/svg/warning.svg new file mode 100644 index 0000000..e3594a8 --- /dev/null +++ b/Backend/static/open-iconic/svg/warning.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/wifi.svg b/Backend/static/open-iconic/svg/wifi.svg new file mode 100644 index 0000000..d5ae76b --- /dev/null +++ b/Backend/static/open-iconic/svg/wifi.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/wrench.svg b/Backend/static/open-iconic/svg/wrench.svg new file mode 100644 index 0000000..b10e33b --- /dev/null +++ b/Backend/static/open-iconic/svg/wrench.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/x.svg b/Backend/static/open-iconic/svg/x.svg new file mode 100644 index 0000000..fc7251c --- /dev/null +++ b/Backend/static/open-iconic/svg/x.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/yen.svg b/Backend/static/open-iconic/svg/yen.svg new file mode 100644 index 0000000..2a77158 --- /dev/null +++ b/Backend/static/open-iconic/svg/yen.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/zoom-in.svg b/Backend/static/open-iconic/svg/zoom-in.svg new file mode 100644 index 0000000..6a39b37 --- /dev/null +++ b/Backend/static/open-iconic/svg/zoom-in.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/static/open-iconic/svg/zoom-out.svg b/Backend/static/open-iconic/svg/zoom-out.svg new file mode 100644 index 0000000..9898a86 --- /dev/null +++ b/Backend/static/open-iconic/svg/zoom-out.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/Backend/templates/base.html b/Backend/templates/base.html new file mode 100644 index 0000000..e2cddaa --- /dev/null +++ b/Backend/templates/base.html @@ -0,0 +1,137 @@ + + + {% load static %} + {% load auth_tags %} + + + + {% block title %}Seitenname{% endblock %} + + + + + + + + + + + + + + + +
+ {% block content %} {% endblock %} +
+ + + + + {% block javascript %} {% endblock %} + +
+ {% block svg-footer %} {% endblock %} +
+ + \ No newline at end of file diff --git a/Backend/templates/index.html b/Backend/templates/index.html new file mode 100644 index 0000000..da9a08c --- /dev/null +++ b/Backend/templates/index.html @@ -0,0 +1,25 @@ +{% extends "base.html" %} + +{% block title %}efi - Informationssystem{% endblock %} + +{% block content %} + +
+
+

efi Informationssystem

+ {% if user.is_authenticated %} +

Herzlich Willkommen!

+ {% else %} +

Bitte melden Sie sich mit Ihrer Domänenkennung an.

+ {% endif %} +
+ + {% if error %} +
+ {{ error }} +
+ {% endif %} + +
+ +{% endblock %} diff --git a/Backend/templates/pruefplan/clearTable.html b/Backend/templates/pruefplan/clearTable.html new file mode 100644 index 0000000..abc42e1 --- /dev/null +++ b/Backend/templates/pruefplan/clearTable.html @@ -0,0 +1,9 @@ +{% extends 'base.html' %} + +{% block title %}Prüfungsplan - Datenbank gelöscht{% endblock %} + + +{% block content %} +

Hinweis

+ Datenbank gelöscht! +{% endblock %} \ No newline at end of file diff --git a/Backend/templates/pruefplan/exam.html b/Backend/templates/pruefplan/exam.html new file mode 100644 index 0000000..99b87ec --- /dev/null +++ b/Backend/templates/pruefplan/exam.html @@ -0,0 +1,80 @@ +{% extends 'pruefplan/tableBase.html' %} + +{% block title %}Prüfungsplan - Ansicht Prüfungen{% endblock %} + +{% block additionalScript %} + +{% endblock %} + +{% block table %} + +

Prüfungsplan - Ansicht Prüfungen

+ +
+ + + + + + + + + + + + + + {% for ex in exams %} + + + + + + + + + + + {% endfor %} + + + +
DatumWochentagFachkennungFächerFächerbezeichnungTeilprüfungAufsichtsperson
{{ ex.date|date:"d.m.Y" }} {{ ex.time|date:"H:i" }}{{ ex.weekday }} + {% for partialExam in ex.partialexam_set.all %} + {% for subject in partialExam.subjectIds.all %} + {{ subject.initials }}
+ {% endfor %} + {% endfor %} +
+ {% for partialExam in ex.partialexam_set.all %} + {{ partialExam.identification }}
+ {% endfor %} +
+ {% for partialExam in ex.partialexam_set.all %} + {% for subject in partialExam.subjectIds.all %} + {{ subject.name }}
+ {% endfor %} + {% endfor %} +
+ {% for partialExam in ex.partialexam_set.all %} + {% for subject in partialExam.subjectIds.all %} + {{ subject.identification }}
+ {% endfor %} + {% endfor %} +
+ {% for supervisor in supervisorSetDict|get_item:ex.identification %} + {{ supervisor }}
+ {% endfor %} +
+
+ + + +{% endblock %} diff --git a/Backend/templates/pruefplan/exceptionHandling.html b/Backend/templates/pruefplan/exceptionHandling.html new file mode 100644 index 0000000..33dd456 --- /dev/null +++ b/Backend/templates/pruefplan/exceptionHandling.html @@ -0,0 +1,30 @@ +{% extends 'base.html' %} + +{% block content %} +
+

Fehlermeldungen

+ +
+

Beim Upload und Einlesen der Rohdateien sind folgende Fehler aufgetreten:

+
    + {% for exception in exceptions %} +

    {{ exception }}

    + {% endfor %} +
+
+
+ +
+

Warnmeldungen

+ +
+

Beim Upload und Einlesen der Rohdateien sind folgende Warnmeldungen aufgetreten:

+
    + {% for warning in warnings %} +

    {{ warning }}

    + {% endfor %} +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/Backend/templates/pruefplan/lecturer.html b/Backend/templates/pruefplan/lecturer.html new file mode 100644 index 0000000..ca58ac0 --- /dev/null +++ b/Backend/templates/pruefplan/lecturer.html @@ -0,0 +1,50 @@ +{% extends 'pruefplan/tableBase.html' %} +{% load static %} + +{% block title%}Prüfungsplan - Ansicht Lehrkräfte{% endblock %} + +{% block table %} + +

Prüfungsplan - Ansicht Lehrkräfte

+ +
+ + + + + + + + + + + + {% for lec in lecturers %} + + + + + + + + {% endfor %} + + +
IDVornameNachnameTitelPrüfungen
{{ lec.identification }}{{ lec.firstName }}{{ lec.lastName }}{{ lec.title }} + + Prüfungen + +
+
+ + + +{% endblock %} diff --git a/Backend/templates/pruefplan/lecturerExam.html b/Backend/templates/pruefplan/lecturerExam.html new file mode 100644 index 0000000..2379cad --- /dev/null +++ b/Backend/templates/pruefplan/lecturerExam.html @@ -0,0 +1,230 @@ + +{% extends "pruefplan/tableBase.html" %} +{% load static %} + +{% block additionalScript %} + +{% endblock %} + +{% block table %} +
+

Prüfungsplan - {{ lecturer.firstName }} {{ lecturer.lastName }}

+ + + + + + + + + + + + + + + + {% for examExeLine in lecExamLines %} + + + + + + + + + + + + + + + + + + + + + + + {% endfor %} + + {% comment %} + + + {% endcomment %} +
DatumWochentagRaumFachkennungFächerFächerbezeichnungTeilprüfungAnzahl AnmeldungenAufsichtsart
{{ examExeLine.date|date:"d.m.Y" }} {{ examExeLine.time|date:"H:i" }}{{ examExeLine.weekday }}{{ examExeLine.location|default_if_none:'' }}{{ examExeLine.examIdent|default_if_none:'' }} + {% for subject in examExeLine.subjectIds.all %} + {{ subject.initials }} +
+ {% endfor %} +
+ {% for subject in examExeLine.subjectIds.all %} + {{ subject.name }} +
+ {% endfor %} +
+ {% for subject in examExeLine.subjectIds.all %} + {{ subject.identification }} +
+ {% endfor %} +
{{ examExeLine.examStudCound|default_if_none:'' }}{{ examExeLine.supervisorType }}
+
+ + + + + + + + + +
Aufsichtspersonen: + {% for examExecutions in examExeLine.executionSet %} + {{ examExecutions.lecturer.firstName }} {{ examExecutions.lecturer.lastName }} +
+ {% endfor %} +
Prüfungskennung:{{ examExeLine.partialExamIdent }}
+
+
+
+ +{% endblock %} + + +{% comment %} + + {% for examExeLine in lecExamExes %} + + + {{ examExeLine.partialExam.exam.date|date:"d.m.Y" }} {{ + examExeLine.partialExam.exam.time|date:"H:i" }} + + {{ examExeLine.partialExam.exam.weekday }} + {{ examExeLine.location }} +{% endblock %} {% comment %} + + {% for examExeLine in lecExamExes %} + + + {{ examExeLine.partialExam.exam.date|date:"d.m.Y" }} {{ + examExeLine.partialExam.exam.time|date:"H:i" }} + + {{ examExeLine.partialExam.exam.weekday }} + {{ examExeLine.location }} + + + {% for subject in examExeLine.subjectIds.all %}{{ subject.initials }}
{% endfor %} + + {{ examExeLine.partialExam.identification }} + + {% for subject in examExeLine.subjectIds.all %}{{ subject.name }}
{% endfor %} + + + {% for subject in examExeLine.subjectIds.all %} {{ subject.identification + }}
+ {% endfor %} + + + {% for subject in examExeLine.subjectIds.all %} {{ subject.initials }}
+ {% endfor %} + + {{ examExeLine.partialExam.identification }} + + {% for subject in examExeLine.subjectIds.all %} {{ subject.name }}
+ {% endfor %} + + + {% for subject in examExeLine.subjectIds.all %} {{ subject.identification + }}
+ {% endfor %} + + + {{ examExeLine.partialExam.regStudCount }} + {{ examExeLine.supervisorType }} + + + +
+ + + + + + + + + +
Aufsichtspersonen: + {% for examExecutions in + examExeLine.partialExam.examexecution_set.all %} {{ + examExecutions.lecturer.firstName }} {{ + examExecutions.lecturer.lastName }}
+ {% endfor %} +
Prüfungskennung:{{ examExeLine.partialExam.exam.identification }}
+
+ + + + + + + + + + + {% endfor %} + +{{ examExeLine.partialExam.regStudCount }} +{{ examExeLine.supervisorType }} + + + +
+ + + + + + + + + +
Aufsichtspersonen: + {% for examExecutions in + examExeLine.partialExam.examexecution_set.all %} + {{ + examExecutions.lecturer.firstName }} {{ + examExecutions.lecturer.lastName }} +
+ {% endfor %} +
Prüfungskennung:{{ examExeLine.partialExam.exam.identification }}
+
+ + + + + + + + + + + {% endfor %} + +{% endcomment %} diff --git a/Backend/templates/pruefplan/parse.html b/Backend/templates/pruefplan/parse.html new file mode 100644 index 0000000..c28614d --- /dev/null +++ b/Backend/templates/pruefplan/parse.html @@ -0,0 +1,5 @@ +{% extends 'base.html' %} + +{% block content %} + Lesen der Json-Dateien und eintragen in die Datenbank abgeschlossen +{% endblock %} \ No newline at end of file diff --git a/Backend/templates/pruefplan/student.html b/Backend/templates/pruefplan/student.html new file mode 100644 index 0000000..9772138 --- /dev/null +++ b/Backend/templates/pruefplan/student.html @@ -0,0 +1,42 @@ +{% extends 'pruefplan/tableBase.html' %} +{% load static %} + +{% block title %}Prüfungsplan - Ansicht Studierende{% endblock %} + +{% block table %} + +

Prüfungsplan - Ansicht Studierende

+ +
+ + + + + + + + + {% for student in students %} + + + + + {% endfor %} + + + +
MatrikelnummerPrüfungen
{{ student.matrikel }} + + Prüfungen + +
+
+ + +{% endblock %} + diff --git a/Backend/templates/pruefplan/studentExam.html b/Backend/templates/pruefplan/studentExam.html new file mode 100644 index 0000000..b4616a6 --- /dev/null +++ b/Backend/templates/pruefplan/studentExam.html @@ -0,0 +1,70 @@ +{% extends 'pruefplan/tableBase.html' %} + +{% block additionalScript %} + +{% endblock %} + +{% block table %} +
+

Prüfungsplan - Matrikelnummer: {{ student.matrikel}}

+

Hinweis: Sie können mit einem Bookmark auf diese Seite jederzeit auf Ihren Prüfungsplan zugreifen.

+ + + + + + + + + + + + + + + + + {% for exam in exams %} + + + + + + + + + + + + + + {% endfor %} + + + +
DatumUhrzeitWochentagRaumFachkennungFächerAufsichtspersonFächerbezeichungTeilpfrüfung
{{ exam.date|date:"d.m.Y" }}{{ exam.time|date:"H:i" }}{{ exam.weekday }}{{ exam.location }} + {% for subject in exam.examExecution.subjectIds.all %} + {{ subject.initials }}
+ {% endfor %} +
{{ exam.examExecution.partialExam.identification }}{{ exam.examExecution.lecturer.firstName }} {{ exam.examExecution.lecturer.lastName }} + {% for subject in exam.examExecution.subjectIds.all %} + {{ subject.name }}
+ {% endfor %} +
+ {% for subject in exam.examExecution.subjectIds.all %} + {{ subject.identification }}
+ {% endfor %} +
+
+ + + +{% endblock %} + diff --git a/Backend/templates/pruefplan/subject.html b/Backend/templates/pruefplan/subject.html new file mode 100644 index 0000000..8d4ee34 --- /dev/null +++ b/Backend/templates/pruefplan/subject.html @@ -0,0 +1,39 @@ +{% extends 'pruefplan/tableBase.html' %} + +{% block title %}Prüfungsplan - Ansicht Fächer{% endblock %} + +{% block table %} + +

Prüfungsplan - Ansicht Fächer

+ +
+ + + + + + + + + + {% for sub in subjects %} + + + + + + {% endfor %} + + + +
IdentificationInitialsName
{{ sub.identification }}{{ sub.initials }}{{ sub.name }}
+
+ + +{% endblock %} + diff --git a/Backend/templates/pruefplan/tableBase.html b/Backend/templates/pruefplan/tableBase.html new file mode 100644 index 0000000..4ee3077 --- /dev/null +++ b/Backend/templates/pruefplan/tableBase.html @@ -0,0 +1,23 @@ +{% extends 'base.html' %} + +{% block title %}Prüfungsplan{% endblock %} + +{% block content %} + + + + + + + + + + + + + + {% block additionalScript %}{% endblock %} + {% block table %}{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/Backend/templates/pruefplan/upload.html b/Backend/templates/pruefplan/upload.html new file mode 100644 index 0000000..871eacb --- /dev/null +++ b/Backend/templates/pruefplan/upload.html @@ -0,0 +1,31 @@ +{% extends 'base.html' %} +{% block title %}Prüfungsplan{% endblock %} +{% block content %} +

Hochladen der JSON-Dateien

+
+
+ {% csrf_token %} + Dozenten: + {{ form.lecturers_file }} +
+
+ Faecher: + {{ form.subjects_file }} +
+
+ Präsenzen: + {{ form.attendance_file }} +
+
+ Pruefungen: + {{ form.exams_file }} +
+
+ Saaleinteilung: + {{ form.student_file }} +
+
+ +
+
+{% endblock %} diff --git a/Backend/templates/registration/logged_out.html b/Backend/templates/registration/logged_out.html new file mode 100644 index 0000000..e397cdd --- /dev/null +++ b/Backend/templates/registration/logged_out.html @@ -0,0 +1,7 @@ +{% extends "base.html" %} + +{% block content %} +

Logged out!

+ +Click here to login again. +{% endblock %} \ No newline at end of file diff --git a/Backend/templates/registration/login.html b/Backend/templates/registration/login.html new file mode 100644 index 0000000..95cd345 --- /dev/null +++ b/Backend/templates/registration/login.html @@ -0,0 +1,36 @@ +{% extends "base.html" %} + +{% block content %} + +{% if form.errors %} +

Your username and password didn't match. Please try again.

+{% endif %} + +{% if next %} + {% if user.is_authenticated %} +

Your account doesn't have access to this page. To proceed, + please login with an account that has access.

+ {% else %} +

Please login to see this page.

+ {% endif %} +{% endif %} + +
+{% csrf_token %} + +
+ {{ form.username.label_tag }} + {{ form.username }} +
+
+ {{ form.password.label_tag }} + {{ form.password }} +
+ +
+ + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/Frontend/.gitignore b/Frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/Frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Frontend/README.md b/Frontend/README.md new file mode 100644 index 0000000..f768e33 --- /dev/null +++ b/Frontend/README.md @@ -0,0 +1,8 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh diff --git a/Frontend/eslint.config.js b/Frontend/eslint.config.js new file mode 100644 index 0000000..238d2e4 --- /dev/null +++ b/Frontend/eslint.config.js @@ -0,0 +1,38 @@ +import js from '@eslint/js' +import globals from 'globals' +import react from 'eslint-plugin-react' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' + +export default [ + { ignores: ['dist'] }, + { + files: ['**/*.{js,jsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + settings: { react: { version: '18.3' } }, + plugins: { + react, + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...js.configs.recommended.rules, + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + ...reactHooks.configs.recommended.rules, + 'react/jsx-no-target-blank': 'off', + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +] diff --git a/Frontend/index.html b/Frontend/index.html new file mode 100644 index 0000000..64596d6 --- /dev/null +++ b/Frontend/index.html @@ -0,0 +1,34 @@ + + + + + + + Technische Hochschule Nuernberg - Pruefplan Ansicht + + + + + + + +
+ + + + diff --git a/Frontend/jsconfig.json b/Frontend/jsconfig.json new file mode 100644 index 0000000..80636cc --- /dev/null +++ b/Frontend/jsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Bundler", + "target": "ES2022", + "jsx": "react", + "allowImportingTsExtensions": true, + "strictNullChecks": true, + "strictFunctionTypes": true + }, + "exclude": [ + "node_modules", + "**/node_modules/*" + ] +} \ No newline at end of file diff --git a/Frontend/package.json b/Frontend/package.json new file mode 100644 index 0000000..d863037 --- /dev/null +++ b/Frontend/package.json @@ -0,0 +1,48 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@ckeditor/ckeditor5-build-classic": "^40.2.0", + "@ckeditor/ckeditor5-react": "^6.2.0", + "axios": "^1.6.5", + "bootstrap": "^5.3.2", + "chart.js": "^4.4.7", + "dayjs": "^1.11.10", + "js-cookie": "^3.0.5", + "jwt-decode": "^3.1.2", + "moment": "^2.30.1", + "react": "^18.2.0", + "react-bootstrap": "^2.10.0", + "react-chartjs-2": "^5.2.0", + "react-dom": "^18.2.0", + "react-hook-form": "^7.48.2", + "react-icons": "^5.0.1", + "react-photo-album": "^2.3.0", + "react-player": "^2.14.1", + "react-rater": "^6.0.5", + "react-router-dom": "6.10.0", + "sweetalert2": "^11.7.32", + "yet-another-react-lightbox": "^3.14.0", + "zustand": "^4.4.4" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@vitejs/plugin-react": "^4.0.3", + "eslint": "^9.0.0", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "prettier": "^3.0.3", + "simple-zustand-devtools": "^1.1.0", + "vite": "^4.4.5" + } +} diff --git a/Frontend/public/vite.svg b/Frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/Frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Frontend/src/App.css b/Frontend/src/App.css new file mode 100644 index 0000000..71a77bf --- /dev/null +++ b/Frontend/src/App.css @@ -0,0 +1,58 @@ +/* #root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} */ + + +.dropdown-card{ + position: relative; + top: -500px; + transition: top 0.4s ease-in-out; +} + +.dropdown-card.visible{ + top: 0; +} + +.custom-btn-hover:hover { + background-color: #c72427cc !important; /* Keep original background */ + color: white !important; +} \ No newline at end of file diff --git a/Frontend/src/App.jsx b/Frontend/src/App.jsx new file mode 100644 index 0000000..ddff1f0 --- /dev/null +++ b/Frontend/src/App.jsx @@ -0,0 +1,31 @@ +// import { useState } from 'react' +// import reactLogo from './assets/react.svg' +// import viteLogo from '/vite.svg' +// import './App.css' + +import { Route, Routes, BrowserRouter } from "react-router-dom" +import MainWrapper from "./layouts/MainWrapper" +import PrivateRoute from "./layouts/PrivateRoute" + + +import Homepage from "./views/Homepage" +import Mainpage from "./views/Mainpage" + +function App() { + return ( + + {/* Everything in here will be routed by the BrowserRouter from react */} + + {/* Everything in here will be wrapped with the MainWrapper and is the children of it */} + + {/* These are the differrent pages to route to -> like path... in django */} + }/> + }/> + + + + ) + +} + +export default App diff --git a/Frontend/src/assets/settings_icon.png b/Frontend/src/assets/settings_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3293951d60e4655050c8df5303b17cbcbd9dfd5d GIT binary patch literal 15591 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 P%pm+BThj_-LiGOwd(z2O literal 0 HcmV?d00001 diff --git a/Frontend/src/assets/th_logo_big.jpg b/Frontend/src/assets/th_logo_big.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c39de7ba1974539c066d7694c72b5ca7d3b293f0 GIT binary patch literal 13495 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
T^weMOo(kXS_VlkExfAUHF$V% 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 A&!KOb>i220U3sSZRbaa!t4(7p=CDJr%b&r#Z9D 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 literal 0 HcmV?d00001 diff --git a/Frontend/src/components/EventTable.jsx b/Frontend/src/components/EventTable.jsx new file mode 100644 index 0000000..5435c9f --- /dev/null +++ b/Frontend/src/components/EventTable.jsx @@ -0,0 +1,59 @@ +import Table from 'react-bootstrap/Table'; +import { useState,useEffect } from 'react'; + + + + +const EventTable = () => { + const [data, setData] = useState([]); + + useEffect(() => { + // Sample data for Testing + const sampleData = [ + { + event: "System Update", + date: "2025-01-01T12:00:00Z", + }, + { + event: "User Login", + date: "2025-01-02T09:30:00Z", + }, + { + event: "Password Reset", + date: "2025-01-03T15:45:00Z", + }, + ]; + setData(sampleData) + + }, []); + + return ( +
+ + + + + + + + + {data.length > 0 ? ( + data.map((item, index) => ( + + + + + )) + ) : ( + + + + )} + +
EventDatum
{item.event}{item.date}
No data available
+
+ ); + }; + + +export default EventTable \ No newline at end of file diff --git a/Frontend/src/components/LogbookCard.jsx b/Frontend/src/components/LogbookCard.jsx new file mode 100644 index 0000000..95eca33 --- /dev/null +++ b/Frontend/src/components/LogbookCard.jsx @@ -0,0 +1,34 @@ +import { Alert } from 'bootstrap'; +import { useState, useEffect, useCallback } from 'react'; +import "../App.css" +import EventTable from './EventTable'; + + + +const LogbookCard = ({isVisible}) => { + + + return ( + <> +
+ +
+
+
Logbuch
+
+
Uploads & Änderungen
+ + +
+ + +
+ + +
+
+ + ) +} + +export default LogbookCard \ No newline at end of file diff --git a/Frontend/src/components/LoginForm.jsx b/Frontend/src/components/LoginForm.jsx new file mode 100644 index 0000000..711ab7f --- /dev/null +++ b/Frontend/src/components/LoginForm.jsx @@ -0,0 +1,106 @@ +import React from 'react' +import { Link, useNavigate } from 'react-router-dom' + +import {login} from '../utils/auth' +import { useState, useEffect } from 'react' + + +const LoginForm = () => { + const [username, setUsername] = useState("") + const [password, setPassword] = useState("") + const [isLoading, setIsLoading] = useState(false) + + const navigate = useNavigate() // Hook for navigation handling + + const handleSubmit = async (e) =>{ + e.preventDefault() //placeholder are invalide + setIsLoading(true) + + const {error} = await login(username, password) + if (error){ + alert(error) + setIsLoading(false) + }else{ + navigate("/mainpage/") + setIsLoading(false) + } + + } + + + return ( + <> +
+
+
+
+
+
+

Anmelden

+

Als Studierende der Th-Nuernber mit Ihren Rechner-Zugangsdaten

+
+ {/* Form */} +
+ {/* Username */} +
+ + setUsername(e.target.value)} + /> +
+ Please enter valid username. +
+
+ {/* Password */} +
+ + setPassword(e.target.value)} + /> +
+ Please enter valid password. +
+
+
+
+ {/* Change the submit button according to the loading state -> depending on the backend authentication */} + {isLoading === true && ( + + )} + {isLoading === false && ( + + )} +
+
+
+
+
+
+
+
+ + + ) + } + + export default LoginForm \ No newline at end of file diff --git a/Frontend/src/components/MartNrForm.jsx b/Frontend/src/components/MartNrForm.jsx new file mode 100644 index 0000000..aa2958e --- /dev/null +++ b/Frontend/src/components/MartNrForm.jsx @@ -0,0 +1,78 @@ +import React from 'react' +import { Link, useNavigate } from 'react-router-dom' + +import {login} from '../utils/auth' +import { useState, useEffect } from 'react' +import "../App.css" + + +const MartNrForm = ( {onSubmit} ) => { + const [martNr, setMartNr] = useState("") + const [isLoading, setIsLoading] = useState(false) + + const handleSubmit = async (e) =>{ + e.preventDefault() //placeholder are invalide + setIsLoading(true) + + onSubmit(martNr) + + setIsLoading(false) + } + + + return ( + <> +
+
+
+
+
+
+

Martrikelnummer

+

Geben Sie Ihre Martirkelnummer ein um nur Ihre Prüfungen zu sehen

+
+ {/* Form */} +
+ {/* Username */} +
+ setMartNr(e.target.value)} + /> +
+ Please enter valid username. +
+
+ +
+
+ {/* Change the submit button according to the loading state -> depending on the backend authentication */} + {isLoading === true && ( + + )} + {isLoading === false && ( + + )} +
+
+
+
+
+
+
+
+ + + ) + } + + export default MartNrForm \ No newline at end of file diff --git a/Frontend/src/components/Navbar.jsx b/Frontend/src/components/Navbar.jsx new file mode 100644 index 0000000..8666d0c --- /dev/null +++ b/Frontend/src/components/Navbar.jsx @@ -0,0 +1,121 @@ +import React, { useEffect, useState } from "react"; +import PropTypes from "prop-types"; +import { Link, useNavigate} from "react-router-dom"; +import "bootstrap/dist/css/bootstrap.min.css"; +import jwt_decode from "jwt-decode" +import Coockie from "js-cookie" +import { useAuthStore } from "../store/auth"; +import logo from '/src/assets/th_logo_big.jpg'; +import {logout} from '../utils/auth' +import PruefPlanTable from "./PruefplanTable"; + + + + + + +function Navbar({setSettingsVisibility, setLogbookVisibility}) { + + const isVisible = useAuthStore((state) => state.isLoggedIn()); + const userName = useAuthStore((state) => state.user().user_name) + const navigate = useNavigate() + + + const handleSettingsButton = () => { + setSettingsVisibility((prev) => { + const newState = !prev + return newState + }) + } + const handleLogbookButton = () => { + setLogbookVisibility((prev) => { + const newState = !prev + return newState + }) + } + const handleLogout = async (e) =>{ + e.preventDefault() //placeholder are invalide + + const {error} = await logout() + if (error){ + alert(error) + }else{ + navigate("/") + } + + } + + + return ( + + + ); + +}; + + +export default Navbar; + diff --git a/Frontend/src/components/PruefplanTable.jsx b/Frontend/src/components/PruefplanTable.jsx new file mode 100644 index 0000000..23f4669 --- /dev/null +++ b/Frontend/src/components/PruefplanTable.jsx @@ -0,0 +1,353 @@ +import { useState, useEffect } from 'react'; +import apiInstance from "../utils/axios" + + +const PruefPlanTable = ({ martNr, columnVisibility }) => { + + const [allData, setAllData] = useState([]) + const [data, setData] = useState([]); + const [sortConfig, setSortConfig] = useState(null); + const [filter, setFilter] = useState(""); + const [today, setToday] = useState("") + const [loading, isLoading] = useState(true); + const [error, setError] = useState(null) + + const visibleColumnCount = Object.values(columnVisibility).filter(Boolean).length; + + + useEffect(() => { + + const fetchPruefplanData = async () => { + isLoading(true) + + try { + + const { data, status } = await apiInstance.get('api/fetchExamData', {}) + + const formattedData = data.map(item => ({ + ...item, + date: new Date(item.date).toLocaleDateString("de-DE", { + year: "2-digit", + month: "2-digit", + day: "2-digit" + }) + })); + + setAllData(formattedData) + + + } catch (error) { + setError(error.message) + } + finally { + isLoading(false) + } + } + + fetchPruefplanData(); + }, []) + + + const handleFilterToday = () => { + if (today === "") { + setToday(getTodayDate) + } + else { + setToday("") + } + } + + const makeDataUnique = (dataSet) => { + const seen = new Set() + return dataSet.filter((data) => { + const uniqueKey = `${data.examIdent}` + // const uniqueKey = `${data.date}-${data.time}-${data.weekday}-${data.room}-${data.location}-${data.subjectIdent}-${data.examIdent}` + if (seen.has(uniqueKey)) { + return false + } + seen.add(uniqueKey) + return true + }) + } + + useEffect(() => { + let filtered = allData; + + if (martNr) { + filtered = filtered.filter(item => item.studMartNr === martNr); + } + + filtered = makeDataUnique(filtered) + + if (today) { + filtered = filtered.filter(item => item.date === today) + } + + if (filter) { + filtered = filtered.filter( + item => + item.date.toLowerCase().includes(filter.toLowerCase()) || + item.time.toLowerCase().includes(filter.toLowerCase()) || + item.weekday.toLowerCase().includes(filter.toLowerCase()) || + item.room.toLowerCase().includes(filter.toLowerCase()) || + item.location.toLowerCase().includes(filter.toLowerCase()) || + item.subjectIdent.toLowerCase().includes(filter.toLowerCase()) || + item.examIdent.toLowerCase().includes(filter.toLowerCase()) || + item.supervisor.toLowerCase().includes(filter.toLowerCase()) || + item.examStudCount.toLowerCase().includes(filter.toLowerCase()) + ); + } + + setData(filtered); + }, [martNr, filter, today, allData]); + + // Function to get today's date in "dd.mm.yyyy" format + const getTodayDate = () => { + const today = new Date(); + const day = String(today.getDate()).padStart(2, '0'); + const month = String(today.getMonth() + 1).padStart(2, '0'); + const year = today.getFullYear(); + return `${day}.${month}.${year}`; + }; + + const parseDateTime = (dateStr, timeStr) => { + const [day, month, year] = dateStr.split(".").map(Number); + const [hour, minute] = timeStr.split(":").map(Number); + return new Date(year, month - 1, day, hour, minute); + }; + + // Function to handle sorting + const sortData = (key) => { + let sortedData = [...data]; + if (key === "date") { + sortedData.sort((a, b) => { + const dateA = parseDateTime(a.date, "00:00"); + const dateB = parseDateTime(b.date, "00:00"); + return sortConfig?.key === key && sortConfig.direction === "asc" + ? dateB - dateA + : dateA - dateB; + }); + } else if (key === "time") { + sortedData.sort((a, b) => { + const dateA = parseDateTime("01.01.2000", a.time); + const dateB = parseDateTime("01.01.2000", b.time); + return sortConfig?.key === key && sortConfig.direction === "asc" + ? dateB - dateA + : dateA - dateB; + }); + } else { + sortedData.sort((a, b) => { + return sortConfig?.key === key && sortConfig.direction === "asc" + ? b[key].localeCompare(a[key]) + : a[key].localeCompare(b[key]); + }); + } + + setSortConfig((prev) => ({ + key, + direction: prev?.key === key && prev.direction === "asc" ? "desc" : "asc", + })); + setData(sortedData); + }; + + // Function to format date and time to YYYYMMDDTHHMMSS for ICS + const formatICSTime = (date, time, addMinutes = 0) => { + const [day, month, year] = date.split('.').map(Number); + const fullYear = year < 100 ? 2000 + year : year; // Convert YY to YYYY + const [hour, minute] = time.split(':').map(Number); + + const eventDate = new Date(fullYear, month - 1, day, hour, minute); + eventDate.setMinutes(eventDate.getMinutes() + addMinutes); // Add minutes dynamically + + return eventDate.toISOString().replace(/[-:]/g, "").split(".")[0] + "Z"; + }; + + // Function to generate and download ICS file + const exportToCalendar = () => { + let icsContent = `BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//Your Company//NONSGML v1.0//EN\n`; + + data.forEach((item) => { + const startDate = formatICSTime(item.date, item.time); + const endDate = formatICSTime(item.date, item.time, 90); // Default duration: 90 minutes + + icsContent += `BEGIN:VEVENT\n`; + icsContent += `UID:${item.date.replace(/\./g, '')}-${item.time.replace(':', '')}-${Math.random() + .toString(36).substr(2, 9)}@pruefplan.com\n`; + icsContent += `DTSTAMP:${new Date().toISOString().replace(/[-:]/g, "").split(".")[0] + "Z"}\n`; + icsContent += `DTSTART:${startDate}\n`; + icsContent += `DTEND:${endDate}\n`; + icsContent += `SUMMARY:${item.subjectIdent} Prüfung\n`; + icsContent += `LOCATION:${item.location}\n`; + icsContent += `DESCRIPTION:Prüfung für ${item.subjectIdent} in Raum ${item.room}\n`; + icsContent += `END:VEVENT\n`; + }); + + icsContent += `END:VCALENDAR`; + + const blob = new Blob([icsContent], { type: "text/calendar" }); + const link = document.createElement("a"); + link.href = URL.createObjectURL(blob); + link.download = "Pruefungsplan.ics"; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }; + + + return ( + <> +
+ setFilter(e.target.value)} + disabled={loading} + /> + +
+
+ + + + + + {columnVisibility.date && + } + + {columnVisibility.time && + } + + {columnVisibility.weekday && + } + + {columnVisibility.room && + } + + {columnVisibility.location && + } + + {columnVisibility.subjectIdent && + } + + {columnVisibility.examIdent && + } + + {columnVisibility.examStudCount && + } + + {columnVisibility.supervisor && + } + + {/* */} + + + + + + + + { + loading ? + ( + + + + ) : error ? ( + + + + ) : ( + + data.length > 0 ? ( + data.map((item, index) => + + + {columnVisibility.date && } + {columnVisibility.time && } + {columnVisibility.weekday && } + {columnVisibility.room && } + {columnVisibility.location && ( + + )} + {columnVisibility.subjectIdent && } + {columnVisibility.examIdent && } + {columnVisibility.examStudCount && } + {columnVisibility.supervisor && } + + {/* */} + + + ) + ) : ( + + + + ) + ) + + } + + +
sortData("date")} style={{ cursor: "pointer" }}> + Datum {sortConfig?.key === "date" && (sortConfig.direction === "asc" ? "↑" : "↓")} + sortData("time")} style={{ cursor: "pointer" }}> + Zeit {sortConfig?.key === "time" && (sortConfig.direction === "asc" ? "↑" : "↓")} + sortData("weekday")} style={{ cursor: "pointer" }}> + Wochentag {sortConfig?.key === "weekday" && (sortConfig.direction === "asc" ? "↑" : "↓")} + sortData("room")} style={{ cursor: "pointer" }}> + Raum {sortConfig?.key === "room" && (sortConfig.direction === "asc" ? "↑" : "↓")} + sortData("location")} style={{ cursor: "pointer" }}> + Ort {sortConfig?.key === "location" && (sortConfig.direction === "asc" ? "↑" : "↓")} + sortData("subjectIdent")} style={{ cursor: "pointer" }}> + Fachbezeichnung {sortConfig?.key === "subjectIdent" && (sortConfig.direction === "asc" ? "↑" : "↓")} + sortData("examIdent")} style={{ cursor: "pointer" }}> + Prüfungsbezeichnung {sortConfig?.key === "examIdent" && (sortConfig.direction === "asc" ? "↑" : "↓")} + sortData("examStudCount")} style={{ cursor: "pointer" }}> + Anz. Anmeldung {sortConfig?.key === "examStudCount" && (sortConfig.direction === "asc" ? "↑" : "↓")} + sortData("supervisor")} style={{ cursor: "pointer" }}> + Betreuer {sortConfig?.key === "supervisor" && (sortConfig.direction === "asc" ? "↑" : "↓")} + MartNr
+
+
+ Loading... +
+

Loading data...

+
+
+
{error}
+
{item.date}{item.time}{item.weekday}{item.room} + + + + {item.subjectIdent}{item.examIdent}{item.examStudCount}{item.supervisor}{item.studMartNr}
No data available
+ +
+
+ + + +
+ + ); +} + + +export default PruefPlanTable \ No newline at end of file diff --git a/Frontend/src/components/SettingsCard.jsx b/Frontend/src/components/SettingsCard.jsx new file mode 100644 index 0000000..cde78eb --- /dev/null +++ b/Frontend/src/components/SettingsCard.jsx @@ -0,0 +1,128 @@ +import { Alert } from 'bootstrap'; +import { useState, useEffect, useCallback } from 'react'; +import "../App.css" + + + +const SettingsCard = ({ isVisible, setColumnVisibility }) => { + + const handleCheckboxField = useCallback((e) => { + switch (e.target.id) { + // case "date": + // setColumnVisability(prev => ({ ...prev, date: e.target.checked })) + // break; + // case "time": + // setColumnVisability(prev => ({ ...prev, time: e.target.checked })) + // break; + case "weekday": + setColumnVisibility(prev => ({ ...prev, weekday: e.target.checked })) + break; + // case "room": + // setColumnVisability(prev => ({ ...prev, room: e.target.checked })) + // break; + case "location": + setColumnVisibility(prev => ({ ...prev, location: e.target.checked })) + break; + case "subjectIdent": + setColumnVisibility(prev => ({ ...prev, subjectIdent: e.target.checked })) + break; + // case "examIdent": + // setColumnVisability(prev => ({ ...prev, examIdent: e.target.checked })) + // break; + case "examStudCount": + setColumnVisibility(prev => ({ ...prev, examStudCount: e.target.checked })) + break; + case "supervisor": + setColumnVisibility(prev => ({ ...prev, supervisor: e.target.checked })) + break; + + default: + break; + } + }) + + + return ( + <> +
+ +
+
+
Einstellungen
+
+
Optionale Tabellenspalten - Sichtbarkeit
+ + + + + + + + + + + + + + + + + +
+
+
+ + Wochentag +
+
+
+
+
+ + Betreuer +
+
+
+
+
+ + Ort +
+
+
+
+
+ + Fachbezeichnung +
+
+
+
+
+ + Anz. Anmeldung +
+
+
+
+
+ + Prüfungsbezeichnung +
+
+
+ + +
+ + +
+ + +
+
+ + ) +} + +export default SettingsCard \ No newline at end of file diff --git a/Frontend/src/index.css b/Frontend/src/index.css new file mode 100644 index 0000000..4dc7982 --- /dev/null +++ b/Frontend/src/index.css @@ -0,0 +1,78 @@ +/* :root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} */ + + +/* Variables */ +:root { + --color-ohm-red: #c72426; + --color-ohm-dark-blue: #16283d; + --color-ohm-light-purple: rgb(223, 217, 230); + --color-light-grey: #f0f0f0; + --navbar-links-gap: 15px; +} diff --git a/Frontend/src/layouts/MainWrapper.jsx b/Frontend/src/layouts/MainWrapper.jsx new file mode 100644 index 0000000..5b631b2 --- /dev/null +++ b/Frontend/src/layouts/MainWrapper.jsx @@ -0,0 +1,25 @@ +import { useEffect, useState } from "react"; +import { setUser } from "../utils/auth"; + + +const MainWrapper = ({children}) => { + const [loading, setLoading] = useState(true) + + useEffect(() => { + const handler = async () =>{ + setLoading(true) + + await setUser() + + setLoading(false) + } + + handler() //Directly call the handler wehn the Func is initialized + }, []) //Dependancy Array: [] -> Only execute once on mounting + + + // Return html conditionaly -> depending on setUser() + return <>{loading ? null : children} +} + +export default MainWrapper \ No newline at end of file diff --git a/Frontend/src/layouts/PrivateRoute.jsx b/Frontend/src/layouts/PrivateRoute.jsx new file mode 100644 index 0000000..51a75a4 --- /dev/null +++ b/Frontend/src/layouts/PrivateRoute.jsx @@ -0,0 +1,14 @@ +import { useEffect } from "react"; +import { Navigate } from "react-router-dom"; +import { useAuthStore } from "../store/auth"; + + +const PrivateRoute = ({ children }) => { + const loggedIn = useAuthStore((state) => state.isLoggedIn)() //Using a Hook on the state -> tiggers a rerender when the att has changed + + // Return the content of the PrivateRoute or navigate back to the login page + return loggedIn ? <>{children} : +} + +export default PrivateRoute + diff --git a/Frontend/src/main.jsx b/Frontend/src/main.jsx new file mode 100644 index 0000000..b9a1a6d --- /dev/null +++ b/Frontend/src/main.jsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/Frontend/src/store/auth.js b/Frontend/src/store/auth.js new file mode 100644 index 0000000..63140b0 --- /dev/null +++ b/Frontend/src/store/auth.js @@ -0,0 +1,42 @@ +// Hier wird die Logic abgebildet die dafür verantwortlich ist den Login-Status eines Users zu managen + +import {create} from "zustand" +import {mountStoreDevtool} from "simple-zustand-devtools" + + +const useAuthStore = create((set, get) => ({ + allUserData: null, //Default State for all User is null + loading: false, //Variable that keeps track of the user state while the login proces + loginState: false, + + + // Func to get the userdata from the allUserData + user: () => ({ + user_name: get().allUserData?.username|| null, + // user_password: get().allUserData?.password || null, + }), + + // Func to set the allUserData + setUser: (user) => set({ + allUserData: user, + }), + + setLoginState: (isLogin) =>set({ + loginState: isLogin, + }), + + // Func to set the loading status + setLoading: (loading) => ({loading}), + + // Func to keep track of the login state -> if allUserData is null the user is not loged in + isLoggedIn: () => get().loginState, + +})); + +// Extended debug functionality for this Func when in Dev mode +if (import.meta.env.DEV){ + mountStoreDevtool("AuthStore", useAuthStore); +} + + +export {useAuthStore}; \ No newline at end of file diff --git a/Frontend/src/utils/auth.js b/Frontend/src/utils/auth.js new file mode 100644 index 0000000..a78b64f --- /dev/null +++ b/Frontend/src/utils/auth.js @@ -0,0 +1,125 @@ +import { useAuthStore } from "../store/auth" +import apiInstance from "./axios" +import jwt_decode from "jwt-decode" +import Cookie from "js-cookie" +import Swal from "sweetalert2" + + + +// Func to login a user +export const login = async (username, password) => { + try { + const {data, status} = await apiInstance.post('api/user/token', { + username, + password, + }) + + + if(status == 200){ + setAuthUser(data.access, data.refresh) + } + + return {data, error: null} + + } catch (error) { + console.log(error) + return {data: null, error: error.response.data?.detail || "Benutzername oder Kennwort falsch."} + } +} + +// Func to logout a user +export const logout = async() =>{ + + try { + const {data, status} = await apiInstance.post('api/user/logoutUser', { + }) + + + if(status == 200){ + + // Clearing infromations about the user from the browser + Cookie.remove("access_token") + Cookie.remove("refresh_token") + useAuthStore.getState().setUser(null) // Set current user to null -> mark as logout + useAuthStore.getState().setLoginState(false) + alert("You have been logged out") + } + + return {data, error: null} + + } catch (error) { + console.log(error) + return {data: null, error: error.response.data?.detail || "Benutzername oder Kennwort falsch."} + } + + + +} + +// Func to set an AuthUser with Cookie +export const setUser = async () => { + const access_token = Cookie.get("access_token") + const refresh_token = Cookie.get("refresh_token") + + if (!access_token || !refresh_token){ + console.log("no acces and refresh token available") + return + } + + if(isAccessTokenExpired(access_token)){ + // Generate a new Token with access an refresh from the current refresh token + const response = getRefreshedToken(refresh_token) + setAuthUser(response.access, response.refresh) + }else{ + setAuthUser(access_token, refresh_token) + } +} + +// Func to set Cookie data and update the AuthStore +export const setAuthUser = (access_token, refresh_token) => { + // Set Cookie data + Cookie.set("access_token", access_token, { + expires: 1, + secure:true, + }) + Cookie.set("refresh_token", refresh_token, { + expires: 3, + secure:true, + }) + + // Get user informations from token + const user = jwt_decode(access_token) ?? null + + // Update AuthStore + if (user) { + console.log("user gets updated",user) + useAuthStore.getState().setUser(user) + useAuthStore.getState().setLoginState(true) + } + useAuthStore.getState().setLoading(false) + +} + +// Func to get a refreshed token from Backend +export const getRefreshedToken = async () => { + // Get refresh token stored in the Cookie + const refresh_token = Cookie.get("refresh_token") + + // Call REST API to generate a new token from refresh token + const response = await apiInstance.post("api/user/token/refresh/",{ + refresh: refresh_token, + }) + + return response.data +} + +// Func to ceck if a acces token is expired +export const isAccessTokenExpired = (access_token) => { + try { + const decodedToken = jwt_decode(access_token) + return decodedToken.exp < Date.now() / 1000 + } catch (error) { + console.log(error) + return true + } +} \ No newline at end of file diff --git a/Frontend/src/utils/axios.js b/Frontend/src/utils/axios.js new file mode 100644 index 0000000..3e131b1 --- /dev/null +++ b/Frontend/src/utils/axios.js @@ -0,0 +1,15 @@ +import axios from "axios" +import { API_BASE_URL } from "./constants"; + +// Func to specify the API default behaviour +const apiInstance = axios.create({ + baseURL: API_BASE_URL, + timeout: 100000, + headers:{ + "Content-Type": "application/json", + Accept: "application/json" + } + +}); + +export default apiInstance \ No newline at end of file diff --git a/Frontend/src/utils/constants.js b/Frontend/src/utils/constants.js new file mode 100644 index 0000000..8549996 --- /dev/null +++ b/Frontend/src/utils/constants.js @@ -0,0 +1 @@ +export const API_BASE_URL = "http://127.0.0.1:8000" \ No newline at end of file diff --git a/Frontend/src/utils/useAxios.js b/Frontend/src/utils/useAxios.js new file mode 100644 index 0000000..b2f97ca --- /dev/null +++ b/Frontend/src/utils/useAxios.js @@ -0,0 +1,36 @@ +import axios from "axios" +import {getRefreshedToken, isAccessTokenExpired, setAuthUser} from "./auth" +import {API_BASE_URL} from "./constants" +import Cookies from "js-cookie" + + +// Func to handle API calles +const useAxios = () =>{ + const accessToken = Cookies.get("access_token") + const refreshToken = Cookies.get("refresh_token") + + const axiosInstance = axios.create({ + baseURL: API_BASE_URL, + headers:{ + Authorization:"Bearer ${accessToken}" + } + }) + + // Setup a interceptor to run befor every API call using Axios + // Func to check if the token from a request is expired bevor letting it through the backend + // If a token is expired this func handles the refresh automatically + axiosInstance.interceptors.request.use(async (req) => { + if(!isAccessTokenExpired(accessToken)){ + return req + } + + const response = await getRefreshedToken(refreshToken) + setAuthUser(response.access, response.refresh) + req.headers.Authorization = "Bearer ${response.data?.access}" + return req + }) + + return axiosInstance +} + +export default useAxios \ No newline at end of file diff --git a/Frontend/src/views/Homepage.jsx b/Frontend/src/views/Homepage.jsx new file mode 100644 index 0000000..e1078f1 --- /dev/null +++ b/Frontend/src/views/Homepage.jsx @@ -0,0 +1,40 @@ +import React from 'react' + +import Navbar from '../components/Navbar' +import LoginForm from '../components/LoginForm' +import EventTable from '../components/EventTable' + +function Homepage() { + const date = new Date().getFullYear(); + + + return ( +
+ + + + {/* Create a Bootstrap fluid Container for responsive design */} +
+ + {/* Adressing row by row with each new div */} +
+ +
+

+ Prüfungsplan Ansicht {date} +

+
+ +
+ +
+ +
+ +
+
+ ) + +} + +export default Homepage \ No newline at end of file diff --git a/Frontend/src/views/Mainpage.jsx b/Frontend/src/views/Mainpage.jsx new file mode 100644 index 0000000..3c7bc82 --- /dev/null +++ b/Frontend/src/views/Mainpage.jsx @@ -0,0 +1,107 @@ +import React, { useEffect, useState } from 'react' + +import Navbar from '../components/Navbar' +import PruefPlanTable from '../components/PruefplanTable' +import LoginForm from '../components/LoginForm' +import EventTable from '../components/EventTable' +import PrivateRoute from '../layouts/PrivateRoute' +import MartNrForm from '../components/MartNrForm' +import SettingsCard from '../components/SettingsCard' +import LogbookCard from '../components/LogbookCard' + + + +function Mainpage() { + + const [martNr, setMartNr] = useState("") + const [settingsIsVisible, setSettingsIsVisible] = useState(false) + const [logbookIsVisible, setLogbookIsVisible] = useState(false) + + const [columnVisibility, setColumnVisibility] = useState({ + date: true, //not optional + time: true, //not optional + weekday: false, //default false + room: true, //not optional + location: true, //default true + subjectIdent: true, //default true + examIdent: false, //default false + supervisor: false, //default false + examStudCount: false, //default false + }) + + const handleMartNrSubmit = (value) => { + setMartNr(value) + } + + const handleLogbookVisibility = (value) => { + setLogbookIsVisible(value) + setSettingsIsVisible(!value) + } + + const handleSettingsVisibility = (value) => { + setSettingsIsVisible(value) + setLogbookIsVisible(!value) + } + + const handleBackClick = () => { + setMartNr("") + } + + + return ( + + +
+ + + + + + + + {/* Create a Bootstrap fluid Container for responsive design */} +
+ + {/* Adressing row by row with each new div */} +
+ +
+

+ {martNr === "" ? + "Prüfungsplan Ansicht - Alle Prüfungen" + : + `Prüfungsplan Ansicht - Alle Prüfungen von ${martNr}` + } +

+
+ +
+ { + martNr === "" ? ( + <> + + + ) : ( + <> + + + ) + + } +
+ +
+ + + +
+
+ +
+ ) + +} + +export default Mainpage \ No newline at end of file diff --git a/Frontend/vite.config.js b/Frontend/vite.config.js new file mode 100644 index 0000000..8b0f57b --- /dev/null +++ b/Frontend/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/Frontend/yarn.lock b/Frontend/yarn.lock new file mode 100644 index 0000000..932eb60 --- /dev/null +++ b/Frontend/yarn.lock @@ -0,0 +1,2822 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== + +"@babel/core@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.26.0", "@babel/generator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== + dependencies: + "@babel/types" "^7.26.3" + +"@babel/plugin-transform-react-jsx-self@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858" + integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-jsx-source@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503" + integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/runtime@^7.24.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse@^7.25.9": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@ckeditor/ckeditor5-adapter-ckfinder@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-40.2.0.tgz#d9d222118bef3c9d30f2856be1fb0665ecc6d8eb" + integrity sha512-YKdydg4DzaMk91saOL55KBNQE3St2NEj1E9hlk9CzHKQaHc79dYzHDNBolSE7ZmzkNJ4ToVbY7kRW5CDGfG5Rg== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-autoformat@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-40.2.0.tgz#ee858ccb2bdfa975d13f1ecb013be9c06cbd0a5f" + integrity sha512-F3w5k7ti5l6V8U07eSQ3gup3ivltRZQXdtvstBXMmTzDb2ceazNcUDLb6TKSHp5y30ETN0dRGgbhx9xiDL0TXg== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-basic-styles@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-40.2.0.tgz#06e618a7c1e8dd3cd67f6249c5e27335dfa2f2c6" + integrity sha512-P7jYddLnRpaR4zVCqDa8InsZ6YNRHdF0RrX6+Uz81+A1IfyfmSd+5IaiLxxdnFWQ4JlEhJutjy9vMwSmOhZocQ== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-block-quote@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-40.2.0.tgz#9d2fa194376146d749e089c5661e5ac4965b05de" + integrity sha512-t03Yp+MeAyQhwdGZqUlkJEx25VSiigpzkIGGOhccSaTIIZ9XcWDkrTevDhwA4Pq4Q9IRQ8Loj3KCVSBuAqkBgw== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-build-classic@^40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-40.2.0.tgz#3f8da1fa4b6ba6bf3c5f1ae9b207e4debdffae03" + integrity sha512-b9zt1kU0S2Azco8mXraxj56pctHRs9y/XfdVrpFzxiRbbzyBZ42WgX1ThJNTqH6WkXCxDPYSbqPhNIvPHpuEyg== + dependencies: + "@ckeditor/ckeditor5-adapter-ckfinder" "40.2.0" + "@ckeditor/ckeditor5-autoformat" "40.2.0" + "@ckeditor/ckeditor5-basic-styles" "40.2.0" + "@ckeditor/ckeditor5-block-quote" "40.2.0" + "@ckeditor/ckeditor5-ckbox" "40.2.0" + "@ckeditor/ckeditor5-ckfinder" "40.2.0" + "@ckeditor/ckeditor5-cloud-services" "40.2.0" + "@ckeditor/ckeditor5-easy-image" "40.2.0" + "@ckeditor/ckeditor5-editor-classic" "40.2.0" + "@ckeditor/ckeditor5-essentials" "40.2.0" + "@ckeditor/ckeditor5-heading" "40.2.0" + "@ckeditor/ckeditor5-image" "40.2.0" + "@ckeditor/ckeditor5-indent" "40.2.0" + "@ckeditor/ckeditor5-link" "40.2.0" + "@ckeditor/ckeditor5-list" "40.2.0" + "@ckeditor/ckeditor5-media-embed" "40.2.0" + "@ckeditor/ckeditor5-paragraph" "40.2.0" + "@ckeditor/ckeditor5-paste-from-office" "40.2.0" + "@ckeditor/ckeditor5-table" "40.2.0" + "@ckeditor/ckeditor5-typing" "40.2.0" + +"@ckeditor/ckeditor5-ckbox@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-40.2.0.tgz#7cf377f67c7e360431e95ab90face4423592e78d" + integrity sha512-w/A3RA7qpR7Scl4hgUTt8j+oV7oD9IFPNGTpp0xoyfWEV8Ymm2NrMAvV0PAJiavYS3+FT4GO4RBOM6BvLHuV3w== + dependencies: + blurhash "2.0.5" + ckeditor5 "40.2.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-ckfinder@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-40.2.0.tgz#eea50306cc1256f9912f850cbd02d92c20417587" + integrity sha512-kiW5TZOLHYd6hhWeDIrep8FXLo0q14b0e0Jit0XSi3z4PQfdDSRk9UuMJPkkf4EdF3PUSdMJ9bccJG76DYXzFQ== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-clipboard@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-40.2.0.tgz#74daa4c9d1ae664338e9d14da6052febc3b933c4" + integrity sha512-8/xPH9/i86ukcEiHdmTgNuPVJeYTrivbx5ZYqycPO4Eem7VM99gIbOe7pIYpuV+klr9ymVxIHbGyTJDJ3oUO8A== + dependencies: + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-engine" "40.2.0" + "@ckeditor/ckeditor5-ui" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + "@ckeditor/ckeditor5-widget" "40.2.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-cloud-services@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-40.2.0.tgz#7c7fc4d2ba6a6b8bb85111e2626dd627a8ca6089" + integrity sha512-xrPQjFGGy1ZfXyKIMw0uzn7OIriSv13YMw0M2ZTh+V1jRN1HW9KzzNb2DlQc+6wQfRk0bq69XGLp3M296/cVTQ== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-core@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-core/-/ckeditor5-core-40.2.0.tgz#fa666d863d03b003ac8667482120f9616b07ce42" + integrity sha512-0fqIaN+ZhkXXA3mpBN+alycBzPMc8ruO8VrP0OnvCjowqZVS2HXC2AaXNBdxc75xGI3ScXIor7FsgFHxVJIYYQ== + dependencies: + "@ckeditor/ckeditor5-engine" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-easy-image@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-40.2.0.tgz#7aff271d26be5541dd8aa1e0d4a7a7a9871da8fc" + integrity sha512-bE9YHGYEY1ql5mIqZSI2fkoBA4th28M0GDaJutwJYKM3t+Bost3Zh1UfmYKE2kvYgmeLY1L3hjQpN9w7NYyLpw== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-editor-classic@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-40.2.0.tgz#c1bad26afe542b501cc21371f14d30bd1a83f6f2" + integrity sha512-dftfDBxANOgqgQZ4SB3YTsEV/XX1u0g9jopbOBwqIABnVVa8zoGcktgFdGnLUFk51sL65baSx2z8Z1NNYdZcFQ== + dependencies: + ckeditor5 "40.2.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-engine@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-40.2.0.tgz#0d982dfbc6e13855f1f6b04204d9a5c4b5079f89" + integrity sha512-sgboUX8Ps+LcEgywyT3BeK1nzLHjNVIiZU1qvRxR3ixzIw4w2xRNXCGfESWLW5Y5rv9+ypUCrX61oLnZU64PQQ== + dependencies: + "@ckeditor/ckeditor5-utils" "40.2.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-enter@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-40.2.0.tgz#6f2dbca2aeb314a0c1cdb6bbe75f924941fb9c31" + integrity sha512-GjTRaKNX8QEDJ3YYKG3GfPZfGHrcigGBxbo+1WDT7NaOsR2DA/CIZfHlAPfgJDAMV17bhWsT3gy3+oQZsExtnQ== + dependencies: + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-engine" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + +"@ckeditor/ckeditor5-essentials@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-40.2.0.tgz#f0c14a57a1c256391b713401c6f817de68029e45" + integrity sha512-7iUUy0Uwiei4yLrn145SOcyzriMeVFVc5ontQkxQE5b9alFdAc/6ZoDPZqwD7V0zi5RQ/2YsoVMRLFa4hbPfNA== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-heading@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-40.2.0.tgz#072989200e8b35840b86fbe17d7962555749f997" + integrity sha512-uDT1sttMy+KrKi90jnqEI43886o1wfKrROWqaMbmKOerTbIi58GNH9LvX04sf1RyHV3+3566RRmB248fsLkYjA== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-image@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-image/-/ckeditor5-image-40.2.0.tgz#790b23af7d2e86faee848df273eaab735a8a9240" + integrity sha512-0Dunw1o5k2+5Q5XiWLDG1r8k9awosfIFuDZwqKJGWtDaNE4QQbJ9+iJSwiiRw2QjcGr7D3JdH7xwJZFra7kYmA== + dependencies: + "@ckeditor/ckeditor5-ui" "40.2.0" + ckeditor5 "40.2.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-indent@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-40.2.0.tgz#a66a1740badd34843a966f51a21316821fe80a5f" + integrity sha512-gSlRGoyAslB2OpqghimIY6Oiflf3Z2/MdLBzvFipU5N4X66cL29HuWZc/bOkcFzWwNeDK5LgzfLdvXNzkdv5Xw== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-link@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-link/-/ckeditor5-link-40.2.0.tgz#81068e860bc00f5d9d94b6df344136a872d6481c" + integrity sha512-/r4Ti9USdrURBX+qutvyDGOb75sNuSgtXdI8xK503EVfx5yBIi6qsYIYWoFvnGJKkLYkVo+940ilduhwzq0M7g== + dependencies: + "@ckeditor/ckeditor5-ui" "40.2.0" + ckeditor5 "40.2.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-list@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-list/-/ckeditor5-list-40.2.0.tgz#8d8d32c283b8fefe6f92e9ae55a370aa6b12d484" + integrity sha512-lsQWSLSFRHRQ2AxA6vgTib9YELjF2J5jpR6H4RDW1gM//dL3FjvLxKPPN/V7rMcp15rrpSiOya+qB99l24DEpQ== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-media-embed@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-40.2.0.tgz#b22fd221801cfe606a8f4706903b431b87d1dd1a" + integrity sha512-ORY7VebL7UTuBG/4++UxzqEKjnlZZKAFqUrIom7xXpQNfo6oJFtZLnKYwESZ6iNk7NBOAeiHEecP2tKWyFQd1g== + dependencies: + "@ckeditor/ckeditor5-ui" "40.2.0" + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-paragraph@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-40.2.0.tgz#a152449874ea1597fd64174744f63974ef348aa7" + integrity sha512-NotxWP1cKvbJSY1UwdTe/Oy1NnAj9Etsi4Z7XA908EvCsNSnFtzdMhYzLhFZJ18avrQFDa7PpSKSyN3M64CbSA== + dependencies: + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-ui" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + +"@ckeditor/ckeditor5-paste-from-office@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-40.2.0.tgz#2f98027c150622da7634bd76bc4b62604eb12012" + integrity sha512-kdk7uJlSa9mvyuNAwmIfV6Kc1tfWI6DbCs19jyseA/F0vySKibb0DsBVSZ7xa5ihcjphfJvwpypWYL0BYdYKLQ== + dependencies: + ckeditor5 "40.2.0" + +"@ckeditor/ckeditor5-react@^6.2.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-react/-/ckeditor5-react-6.3.0.tgz#dd2c0bd4b3c74e54284ac670de24bd41fb8322ad" + integrity sha512-yfVc8L+o1U63qljyOJVSV+O+2C2+hOjNAf7Qabi8AF4gvsPib82efVDlmvnNJB4Ka11owysQ5MAHpP8I0c7lIA== + dependencies: + prop-types "^15.7.2" + +"@ckeditor/ckeditor5-select-all@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-40.2.0.tgz#c1b68ac4225306ea9250599abf284574e10a1421" + integrity sha512-yaYCqhdMcoEH3BsilhweNdbOfuO/cexQ1r1/mYoBoW4CypIuAeq8J/3qLpvFaThmCRPzJBn1J7v2Yjs/0UnamA== + dependencies: + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-ui" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + +"@ckeditor/ckeditor5-table@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-table/-/ckeditor5-table-40.2.0.tgz#e2a77495a6c6c5c7fdd3194e452a3b04446e0f5d" + integrity sha512-yODne7az/aJ9lsuI7w476pgGV2QBoH2tOKp3JFh/e2DdHC20637LCVd0cx8sUe3zk61X/eYPY+wOiRJx/mIUqg== + dependencies: + ckeditor5 "40.2.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-typing@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-40.2.0.tgz#fd2af10379f7e0bfed17f477bd246deca2161966" + integrity sha512-2E7LkmC4RHdenMUwow0EZDKxlbX00c5UHysUVT51EBGrXiJcN++0cqxQaeJzQ262oTDpk94qE5IZdGXt3ntzrw== + dependencies: + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-engine" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-ui@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-40.2.0.tgz#cccb8d7d7b70171f79336914ea55aeebe733d85c" + integrity sha512-K8oC9zrJokZD5Nl4uQjJMo8Couds0eHmfNI/go6iU4A4OAdDzph+W50QnyMed4etKnMdhvUSbnuZnPtQjnsvFA== + dependencies: + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + color-convert "2.0.1" + color-parse "1.4.2" + lodash-es "4.17.21" + vanilla-colorful "0.7.2" + +"@ckeditor/ckeditor5-undo@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-40.2.0.tgz#66c181ecea6783b0f0d67b7f8d6766b5d5389877" + integrity sha512-k2VZS5x4SJtYk3zhdwHYg+D00DgD0iWR0H4qQgcWmQMFRipYvXJRixP3hSLZGJciQanPFeYcjZgxNQ+rU1s8ug== + dependencies: + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-engine" "40.2.0" + "@ckeditor/ckeditor5-ui" "40.2.0" + +"@ckeditor/ckeditor5-upload@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-40.2.0.tgz#8d67cf93bc78bcbb3686e6757ae8ece2127d7a0d" + integrity sha512-AdJSKvWEQbSSyA/DfxbCHRhFN6S4ew4kuYETO57e6AS3aOuYGLBRdu9Mub7IAQcOyy1LL6ktr9u5WEOoWS2h0w== + dependencies: + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-ui" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + +"@ckeditor/ckeditor5-utils@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-40.2.0.tgz#2c603d1f96869639e5b79ef29f459bd4cd46bbe0" + integrity sha512-f+kTJBwwk7Y/LXm8pEPxBTXVlJwQrH7Levzye9zxEDB0Jtj7+brGr87o666fPmL/ATQc5M+VPhbvnk2sOv7WKg== + dependencies: + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-watchdog@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-40.2.0.tgz#f5c72f0a3feb775be22bbaf595af3edbe8576f5c" + integrity sha512-ets7o2dUR7l23G9o/RAbu+gJzUkc2Ul269E3TEhZnbQXFjshvEGK2kzuay7I+/waL3ADuYe4zuoBqsqdPoAhfg== + dependencies: + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-widget@40.2.0": + version "40.2.0" + resolved "https://registry.yarnpkg.com/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-40.2.0.tgz#fb54ff8fd4fc31393d492c331f305afdcba338ee" + integrity sha512-okeUSwbnu6TUKvwBOl0YdED6Me0/vvs1ybfKZPNEJNwGl989iG0LQO4oYUye8BTCZvzCZ2cBTb1Cvnwr8KRcbg== + dependencies: + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-engine" "40.2.0" + "@ckeditor/ckeditor5-enter" "40.2.0" + "@ckeditor/ckeditor5-typing" "40.2.0" + "@ckeditor/ckeditor5-ui" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + lodash-es "4.17.21" + +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.19.0": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" + integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== + dependencies: + "@eslint/object-schema" "^2.1.5" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/core@^0.9.0": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.9.1.tgz#31763847308ef6b7084a4505573ac9402c51f9d1" + integrity sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" + integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.17.0": + version "9.17.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.17.0.tgz#1523e586791f80376a6f8398a3964455ecc651ec" + integrity sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w== + +"@eslint/object-schema@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" + integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== + +"@eslint/plugin-kit@^0.2.3": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz#2b78e7bb3755784bb13faa8932a1d994d6537792" + integrity sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg== + dependencies: + levn "^0.4.1" + +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" + integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@kurkle/color@^0.3.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@kurkle/color/-/color-0.3.4.tgz#4d4ff677e1609214fc71c580125ddddd86abcabf" + integrity sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w== + +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@react-aria/ssr@^3.5.0": + version "3.9.7" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.7.tgz#d89d129f7bbc5148657e6c952ac31c9353183770" + integrity sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg== + dependencies: + "@swc/helpers" "^0.5.0" + +"@remix-run/router@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.5.0.tgz#57618e57942a5f0131374a9fdb0167e25a117fdc" + integrity sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg== + +"@restart/hooks@^0.4.9": + version "0.4.16" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.16.tgz#95ae8ac1cc7e2bd4fed5e39800ff85604c6d59fb" + integrity sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w== + dependencies: + dequal "^2.0.3" + +"@restart/hooks@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.5.0.tgz#a594af7c3b64f5e65a7aca011551b0cdd93ec14e" + integrity sha512-wS+h6IusJCPjTkmOOrRZxIPICD/mtFA3PRZviutoM23/b7akyDGfZF/WS+nIFk27u7JDhPE2+0GBdZxjSqHZkg== + dependencies: + dequal "^2.0.3" + +"@restart/ui@^1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.9.2.tgz#dad8f084e6a56f87f9799dbc248af04168ffc03b" + integrity sha512-MWWqJqSyqUWWPBOOiRQrX57CBc/9CoYONg7sE+uag72GCAuYrHGU5c49vU5s4BUSBgiKNY6rL7TULqGDrouUaA== + dependencies: + "@babel/runtime" "^7.26.0" + "@popperjs/core" "^2.11.8" + "@react-aria/ssr" "^3.5.0" + "@restart/hooks" "^0.5.0" + "@types/warning" "^3.0.3" + dequal "^2.0.3" + dom-helpers "^5.2.0" + uncontrollable "^8.0.4" + warning "^4.0.3" + +"@swc/helpers@^0.5.0": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== + dependencies: + tslib "^2.8.0" + +"@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + +"@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/prop-types@*", "@types/prop-types@^15.7.12": + version "15.7.14" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" + integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== + +"@types/react-dom@^18.2.7": + version "18.3.5" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.5.tgz#45f9f87398c5dcea085b715c58ddcf1faf65f716" + integrity sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q== + +"@types/react-transition-group@^4.4.6": + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== + +"@types/react@>=16.9.11": + version "19.0.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.2.tgz#9363e6b3ef898c471cb182dd269decc4afc1b4f6" + integrity sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg== + dependencies: + csstype "^3.0.2" + +"@types/react@^18.2.15": + version "18.3.18" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.18.tgz#9b382c4cd32e13e463f97df07c2ee3bbcd26904b" + integrity sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/warning@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.3.tgz#d1884c8cc4a426d1ac117ca2611bf333834c6798" + integrity sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q== + +"@vitejs/plugin-react@^4.0.3": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz#c64be10b54c4640135a5b28a2432330e88ad7c20" + integrity sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug== + dependencies: + "@babel/core" "^7.26.0" + "@babel/plugin-transform-react-jsx-self" "^7.25.9" + "@babel/plugin-transform-react-jsx-source" "^7.25.9" + "@types/babel__core" "^7.20.5" + react-refresh "^0.14.2" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.14.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-includes@^3.1.6, array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axios@^1.6.5: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +blurhash@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/blurhash/-/blurhash-2.0.5.tgz#efde729fc14a2f03571a6aa91b49cba80d1abe4b" + integrity sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w== + +bootstrap@^5.3.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.3.tgz#de35e1a765c897ac940021900fcbb831602bac38" + integrity sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browserslist@^4.24.0: + version "4.24.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2" + integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== + dependencies: + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001688: + version "1.0.30001690" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8" + integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chart.js@^4.4.7: + version "4.4.7" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.4.7.tgz#7a01ee0b4dac3c03f2ab0589af888db296d896fa" + integrity sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw== + dependencies: + "@kurkle/color" "^0.3.0" + +ckeditor5@40.2.0: + version "40.2.0" + resolved "https://registry.yarnpkg.com/ckeditor5/-/ckeditor5-40.2.0.tgz#9dfc6fbdbbff1ce8c4b9498a5f204460feea5e46" + integrity sha512-JaFuY/6DX1wbA6yRB2xQVMr+9W1C3HvSX4AT10ccoKBKe9OctIatekDt2ztV+cMaVHLF1wocskS/Ql9XFRy2Eg== + dependencies: + "@ckeditor/ckeditor5-clipboard" "40.2.0" + "@ckeditor/ckeditor5-core" "40.2.0" + "@ckeditor/ckeditor5-engine" "40.2.0" + "@ckeditor/ckeditor5-enter" "40.2.0" + "@ckeditor/ckeditor5-paragraph" "40.2.0" + "@ckeditor/ckeditor5-select-all" "40.2.0" + "@ckeditor/ckeditor5-typing" "40.2.0" + "@ckeditor/ckeditor5-ui" "40.2.0" + "@ckeditor/ckeditor5-undo" "40.2.0" + "@ckeditor/ckeditor5-upload" "40.2.0" + "@ckeditor/ckeditor5-utils" "40.2.0" + "@ckeditor/ckeditor5-watchdog" "40.2.0" + "@ckeditor/ckeditor5-widget" "40.2.0" + +classnames@^2.3.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== + +color-convert@2.0.1, color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-parse@1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/color-parse/-/color-parse-1.4.2.tgz#78651f5d34df1a57f997643d86f7f87268ad4eb5" + integrity sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA== + dependencies: + color-name "^1.0.0" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +dayjs@^1.11.10: + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + +debug@^4.1.0, debug@^4.3.1, debug@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.0.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +electron-to-chromium@^1.5.73: + version "1.5.76" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz#db20295c5061b68f07c8ea4dfcbd701485d94a3d" + integrity sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ== + +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6: + version "1.23.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.7.tgz#36e3da46fdb0d2ae3b9df4235e3a3167c1605b36" + integrity sha512-OygGC8kIcDhXX+6yAZRGLqwi2CmEXCbLQixeGUgYeR+Qwlppqmo7DIDr8XibtEBZp+fJcoYpoatp5qwLMEdcqQ== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.6" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.7" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-regex-test "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.6" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.4" + safe-array-concat "^1.1.3" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +esbuild@^0.18.10: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== + optionalDependencies: + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" + +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-plugin-react-hooks@^4.6.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== + +eslint-plugin-react-refresh@^0.4.3: + version "0.4.16" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz#149dbc9279bd16942409f1c1d2f0dce3299430ef" + integrity sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ== + +eslint-plugin-react@^7.32.2: + version "7.37.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz#567549e9251533975c4ea9706f986c3a64832031" + integrity sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" + doctrine "^2.1.0" + es-iterator-helpers "^1.2.1" + estraverse "^5.3.0" + hasown "^2.0.2" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.1" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" + +eslint-scope@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" + integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@^9.0.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.17.0.tgz#faa1facb5dd042172fdc520106984b5c2421bb0c" + integrity sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.0" + "@eslint/core" "^0.9.0" + "@eslint/eslintrc" "^3.2.0" + "@eslint/js" "9.17.0" + "@eslint/plugin-kit" "^0.2.3" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.1" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.2.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.0" + +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.6.tgz#43dd3dd0e7b49b82b2dfcad10dc824bf7fc265d5" + integrity sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA== + dependencies: + call-bind-apply-helpers "^1.0.1" + dunder-proto "^1.0.0" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + function-bind "^1.1.2" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.0.0" + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-boolean-object@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" + integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.0.tgz#47e3472ae95a63fa9cf25660bcf0c181c39770ef" + integrity sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q== + dependencies: + call-bound "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iterator.prototype@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.4.tgz#4ae6cf98b97fdc717b7e159d79dc25f8fc9482f1" + integrity sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA== + dependencies: + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + reflect.getprototypeof "^1.0.8" + set-function-name "^2.0.2" + +js-cookie@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" + integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +jwt-decode@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" + integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== + +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +load-script@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" + integrity sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +math-intrinsics@^1.0.0, math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +memoize-one@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +moment@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.7: + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.entries@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.values@^1.1.6, object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postcss@^8.4.27: + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@^3.0.3: + version "3.4.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" + integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== + +prop-types-extra@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" + integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== + dependencies: + react-is "^16.3.2" + warning "^4.0.0" + +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +react-bootstrap@^2.10.0: + version "2.10.7" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.10.7.tgz#63954e8faa6f0d28d9c755e5f8fbd27b5b09764a" + integrity sha512-w6mWb3uytB5A18S2oTZpYghcOUK30neMBBvZ/bEfA+WIF2dF4OGqjzoFVMpVXBjtyf92gkmRToHlddiMAVhQqQ== + dependencies: + "@babel/runtime" "^7.24.7" + "@restart/hooks" "^0.4.9" + "@restart/ui" "^1.9.2" + "@types/prop-types" "^15.7.12" + "@types/react-transition-group" "^4.4.6" + classnames "^2.3.2" + dom-helpers "^5.2.1" + invariant "^2.2.4" + prop-types "^15.8.1" + prop-types-extra "^1.1.0" + react-transition-group "^4.4.5" + uncontrollable "^7.2.1" + warning "^4.0.3" + +react-chartjs-2@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz#43c1e3549071c00a1a083ecbd26c1ad34d385f5d" + integrity sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA== + +react-dom@^18.2.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.2" + +react-fast-compare@^3.0.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== + +react-hook-form@^7.48.2: + version "7.54.2" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211" + integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg== + +react-icons@^5.0.1: + version "5.4.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.4.0.tgz#443000f6e5123ee1b21ea8c0a716f6e7797f7416" + integrity sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ== + +react-is@^16.13.1, react-is@^16.3.2: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-photo-album@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/react-photo-album/-/react-photo-album-2.4.1.tgz#9754b22501a157c3c1774260bd3da8a38d88cf4b" + integrity sha512-dzqP5QbYAugA0uZTl3qsVldckzDXYDkDOvA8CpACl51hSEfhJmCfwhbnI4WBHnETQHv48nnNQ1jhrulst8njLA== + +react-player@^2.14.1: + version "2.16.0" + resolved "https://registry.yarnpkg.com/react-player/-/react-player-2.16.0.tgz#89070700b03f5a5ded9f0b3165d4717390796481" + integrity sha512-mAIPHfioD7yxO0GNYVFD1303QFtI3lyyQZLY229UEAp/a10cSW+hPcakg0Keq8uWJxT2OiT/4Gt+Lc9bD6bJmQ== + dependencies: + deepmerge "^4.0.0" + load-script "^1.0.0" + memoize-one "^5.1.1" + prop-types "^15.7.2" + react-fast-compare "^3.0.1" + +react-rater@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/react-rater/-/react-rater-6.0.5.tgz#e0746071ac0a7a28fc61d7508e795b9469792dc3" + integrity sha512-ke4gyTNQCKSVYt0YHe3yN6IktSKbXNeAueLhfWFVc/nZ+O1N8up6qb/pzoyzfnFjoYeH66dmMgs10ZkuVQLKQQ== + +react-refresh@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== + +react-router-dom@6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.10.0.tgz#090ddc5c84dc41b583ce08468c4007c84245f61f" + integrity sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg== + dependencies: + "@remix-run/router" "1.5.0" + react-router "6.10.0" + +react-router@6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.10.0.tgz#230f824fde9dd0270781b5cb497912de32c0a971" + integrity sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ== + dependencies: + "@remix-run/router" "1.5.0" + +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +react@^18.2.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== + dependencies: + loose-envify "^1.1.0" + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.8, reflect.getprototypeof@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz#c905f3386008de95a62315f3ea8630404be19e2f" + integrity sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + dunder-proto "^1.0.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + which-builtin-type "^1.2.1" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp.prototype.flags@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rollup@^3.27.1: + version "3.29.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.5.tgz#8a2e477a758b520fb78daf04bca4c522c1da8a54" + integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w== + optionalDependencies: + fsevents "~2.3.2" + +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +simple-zustand-devtools@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/simple-zustand-devtools/-/simple-zustand-devtools-1.1.0.tgz#bb080b30c9930d2997f33881f63d47405226fd7f" + integrity sha512-Axfcfr9L3YL3kto7aschCQLY2VUlXXMnIVtaTe9Y0qWbNmPsX/y7KsNprmxBZoB0pww5ZGs1u/ohcrvQ3tE6jA== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +sweetalert2@^11.7.32: + version "11.15.3" + resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.15.3.tgz#6322a7c5fa2e835d5a3570c83e55071e357cd4a7" + integrity sha512-+0imNg+XYL8tKgx8hM0xoiXX3KfgxHDmiDc8nTJFO89fQEEhJlkecSdyYOZ3IhVMcUmoNte4fTIwWiugwkPU6w== + +tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +uncontrollable@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" + integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== + dependencies: + "@babel/runtime" "^7.6.3" + "@types/react" ">=16.9.11" + invariant "^2.2.4" + react-lifecycles-compat "^3.0.4" + +uncontrollable@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" + integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== + +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-sync-external-store@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" + integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== + +vanilla-colorful@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/vanilla-colorful/-/vanilla-colorful-0.7.2.tgz#3fb1f4b9f15b797e20fd1ce8e0364f33b073f4a2" + integrity sha512-z2YZusTFC6KnLERx1cgoIRX2CjPRP0W75N+3CC6gbvdX5Ch47rZkEMGO2Xnf+IEmi3RiFLxS18gayMA27iU7Kg== + +vite@^4.4.5: + version "4.5.5" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.5.tgz#639b9feca5c0a3bfe3c60cb630ef28bf219d742e" + integrity sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ== + dependencies: + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" + optionalDependencies: + fsevents "~2.3.2" + +warning@^4.0.0, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.18" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" + integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + for-each "^0.3.3" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yet-another-react-lightbox@^3.14.0: + version "3.21.7" + resolved "https://registry.yarnpkg.com/yet-another-react-lightbox/-/yet-another-react-lightbox-3.21.7.tgz#02c625c65ecf2d415304b027291bbd5a5b3f4ba9" + integrity sha512-dcdokNuCIl92f0Vl+uzeKULnQhztIGpoZFUMvtVNUPmtwsQWpqWufeieDPeg9JtFyVCcbj4vYw3V00DS0QNoWA== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zustand@^4.4.4: + version "4.5.5" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.5.tgz#f8c713041543715ec81a2adda0610e1dc82d4ad1" + integrity sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q== + dependencies: + use-sync-external-store "1.2.2"