From bd3a3d42cef59d4d08d8ff08f8cc9cf92d7c9f50 Mon Sep 17 00:00:00 2001 From: Rizqika Date: Mon, 11 Nov 2024 10:03:20 +0700 Subject: [PATCH] init commit --- .env | 2 + index.html | 687 + package-lock.json | 736 +- package.json | 17 +- src/App.css | 38 - src/App.js | 105 +- src/App.test.js | 8 - src/assets/css/app.css | 11289 ++++++++++++++++ src/assets/icon/index.js | 9 + src/assets/icon/ocr.png | Bin 0 -> 513 bytes src/assets/icon/sms-otp.png | Bin 0 -> 899 bytes src/assets/icon/sms.png | Bin 0 -> 403 bytes src/assets/images/Dummy-Ktp.png | Bin 0 -> 108061 bytes src/assets/images/Logo.png | Bin 0 -> 7890 bytes src/assets/images/Profile.jpeg | Bin 0 -> 6862 bytes src/assets/images/dashboard-img.png | Bin 0 -> 14739 bytes src/assets/images/index.js | 11 + src/assets/js/externalScript.js | 70 + src/assets/js/scripts.js | 28 + src/components/Footer.jsx | 19 + src/components/Main.jsx | 16 + src/components/Navbar.jsx | 165 + src/components/Sidebar/DeepMenu.jsx | 50 + src/components/Sidebar/DeeperMenu.jsx | 15 + src/components/Sidebar/Menu.jsx | 70 + src/components/Sidebar/Profile.jsx | 37 + src/components/Sidebar/SearchBar.jsx | 50 + src/components/Sidebar/Sidebar.jsx | 25 + src/components/Sidebar/SubMenu.jsx | 41 + src/components/Sidebar/dataMenu.js | 263 + src/components/index.js | 11 + src/index.css | 13 - src/index.js | 22 +- src/logo.svg | 1 - src/reportWebVitals.js | 13 - .../FaceRecognition/Section/Compare.jsx | 720 + .../FaceRecognition/Section/Enroll.jsx | 841 ++ .../FaceRecognition/Section/Liveness.jsx | 11 + .../FaceRecognition/Section/Search.jsx | 662 + .../FaceRecognition/Section/Verify.jsx | 724 + .../FaceRecognition/Section/index.js | 13 + .../Biometric/FaceRecognition/Summary.jsx | 11 + .../Biometric/FaceRecognition/Transaction.jsx | 11 + .../Biometric/FaceRecognition/Verify.jsx | 123 + .../Biometric/FaceRecognition/index.js | 9 + src/screens/Biometric/OcrKtp/Verify.jsx | 511 + src/screens/Biometric/OcrKtp/index.js | 5 + .../Home/Applications/Applications.jsx | 246 + src/screens/Home/Applications/CreateApps.jsx | 220 + src/screens/Home/Dashboard/Dashboard.jsx | 200 + .../Home/GettingStarted/GettingStarted.jsx | 137 + src/screens/Home/index.js | 11 + src/setupTests.js | 5 - 53 files changed, 18089 insertions(+), 182 deletions(-) create mode 100644 .env create mode 100644 index.html delete mode 100644 src/App.css delete mode 100644 src/App.test.js create mode 100644 src/assets/css/app.css create mode 100644 src/assets/icon/index.js create mode 100644 src/assets/icon/ocr.png create mode 100644 src/assets/icon/sms-otp.png create mode 100644 src/assets/icon/sms.png create mode 100644 src/assets/images/Dummy-Ktp.png create mode 100644 src/assets/images/Logo.png create mode 100644 src/assets/images/Profile.jpeg create mode 100644 src/assets/images/dashboard-img.png create mode 100644 src/assets/images/index.js create mode 100644 src/assets/js/externalScript.js create mode 100644 src/assets/js/scripts.js create mode 100644 src/components/Footer.jsx create mode 100644 src/components/Main.jsx create mode 100644 src/components/Navbar.jsx create mode 100644 src/components/Sidebar/DeepMenu.jsx create mode 100644 src/components/Sidebar/DeeperMenu.jsx create mode 100644 src/components/Sidebar/Menu.jsx create mode 100644 src/components/Sidebar/Profile.jsx create mode 100644 src/components/Sidebar/SearchBar.jsx create mode 100644 src/components/Sidebar/Sidebar.jsx create mode 100644 src/components/Sidebar/SubMenu.jsx create mode 100644 src/components/Sidebar/dataMenu.js create mode 100644 src/components/index.js delete mode 100644 src/index.css delete mode 100644 src/logo.svg delete mode 100644 src/reportWebVitals.js create mode 100644 src/screens/Biometric/FaceRecognition/Section/Compare.jsx create mode 100644 src/screens/Biometric/FaceRecognition/Section/Enroll.jsx create mode 100644 src/screens/Biometric/FaceRecognition/Section/Liveness.jsx create mode 100644 src/screens/Biometric/FaceRecognition/Section/Search.jsx create mode 100644 src/screens/Biometric/FaceRecognition/Section/Verify.jsx create mode 100644 src/screens/Biometric/FaceRecognition/Section/index.js create mode 100644 src/screens/Biometric/FaceRecognition/Summary.jsx create mode 100644 src/screens/Biometric/FaceRecognition/Transaction.jsx create mode 100644 src/screens/Biometric/FaceRecognition/Verify.jsx create mode 100644 src/screens/Biometric/FaceRecognition/index.js create mode 100644 src/screens/Biometric/OcrKtp/Verify.jsx create mode 100644 src/screens/Biometric/OcrKtp/index.js create mode 100644 src/screens/Home/Applications/Applications.jsx create mode 100644 src/screens/Home/Applications/CreateApps.jsx create mode 100644 src/screens/Home/Dashboard/Dashboard.jsx create mode 100644 src/screens/Home/GettingStarted/GettingStarted.jsx create mode 100644 src/screens/Home/index.js delete mode 100644 src/setupTests.js diff --git a/.env b/.env new file mode 100644 index 0000000..5b07576 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +REACT_APP_BASE_URL = https://kapi.absys.ninja/veri +REACT_APP_API_KEY = NGKrycQefQrRvYm3KYwCIQQGnllGKlDd \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..e726adc --- /dev/null +++ b/index.html @@ -0,0 +1,687 @@ + + + + + + + + + Dashboard - SB Admin + + + + + + +
+
+ +
+
+
+
+

Dashboard

+ +
+
+
+
Primary Card
+ +
+
+
+
+
Warning Card
+ +
+
+
+
+
Success Card
+ +
+
+
+
+
Danger Card
+ +
+
+
+
+
+
+
+ + Area Chart Example +
+
+
+
+
+
+
+ + Bar Chart Example +
+
+
+
+
+
+
+ + DataTable Example +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamePositionOfficeAgeStart dateSalary
NamePositionOfficeAgeStart dateSalary
Tiger NixonSystem ArchitectEdinburgh612011/04/25$320,800
Garrett WintersAccountantTokyo632011/07/25$170,750
Ashton CoxJunior Technical AuthorSan Francisco662009/01/12$86,000
Cedric KellySenior Javascript DeveloperEdinburgh222012/03/29$433,060
Airi SatouAccountantTokyo332008/11/28$162,700
Brielle WilliamsonIntegration SpecialistNew York612012/12/02$372,000
Herrod ChandlerSales AssistantSan Francisco592012/08/06$137,500
Rhona DavidsonIntegration SpecialistTokyo552010/10/14$327,900
Colleen HurstJavascript DeveloperSan Francisco392009/09/15$205,500
Sonya FrostSoftware EngineerEdinburgh232008/12/13$103,600
Jena GainesOffice ManagerLondon302008/12/19$90,560
Quinn FlynnSupport LeadEdinburgh222013/03/03$342,000
Charde MarshallRegional DirectorSan Francisco362008/10/16$470,600
Haley KennedySenior Marketing DesignerLondon432012/12/18$313,500
Tatyana FitzpatrickRegional DirectorLondon192010/03/17$385,750
Michael SilvaMarketing DesignerLondon662012/11/27$198,500
Paul ByrdChief Financial Officer (CFO)New York642010/06/09$725,000
Gloria LittleSystems AdministratorNew York592009/04/10$237,500
Bradley GreerSoftware EngineerLondon412012/10/13$132,000
Dai RiosPersonnel LeadEdinburgh352012/09/26$217,500
Jenette CaldwellDevelopment LeadNew York302011/09/03$345,000
Yuri BerryChief Marketing Officer (CMO)New York402009/06/25$675,000
Caesar VancePre-Sales SupportNew York212011/12/12$106,450
Doris WilderSales AssistantSidney232010/09/20$85,600
Angelica RamosChief Executive Officer (CEO)London472009/10/09$1,200,000
Gavin JoyceDeveloperEdinburgh422010/12/22$92,575
Jennifer ChangRegional DirectorSingapore282010/11/14$357,650
Brenden WagnerSoftware EngineerSan Francisco282011/06/07$206,850
Fiona GreenChief Operating Officer (COO)San Francisco482010/03/11$850,000
Shou ItouRegional MarketingTokyo202011/08/14$163,000
Michelle HouseIntegration SpecialistSidney372011/06/02$95,400
Suki BurksDeveloperLondon532009/10/22$114,500
Prescott BartlettTechnical AuthorLondon272011/05/07$145,000
Gavin CortezTeam LeaderSan Francisco222008/10/26$235,500
Martena MccrayPost-Sales supportEdinburgh462011/03/09$324,050
Unity ButlerMarketing DesignerSan Francisco472009/12/09$85,675
Howard HatfieldOffice ManagerSan Francisco512008/12/16$164,500
Hope FuentesSecretarySan Francisco412010/02/12$109,850
Vivian HarrellFinancial ControllerSan Francisco622009/02/14$452,500
Timothy MooneyOffice ManagerLondon372008/12/11$136,200
Jackson BradshawDirectorNew York652008/09/26$645,750
Olivia LiangSupport EngineerSingapore642011/02/03$234,500
Bruno NashSoftware EngineerLondon382011/05/03$163,500
Sakura YamamotoSupport EngineerTokyo372009/08/19$139,575
Thor WaltonDeveloperNew York612013/08/11$98,540
Finn CamachoSupport EngineerSan Francisco472009/07/07$87,500
Serge BaldwinData CoordinatorSingapore642012/04/09$138,575
Zenaida FrankSoftware EngineerNew York632010/01/04$125,250
Zorita SerranoSoftware EngineerSan Francisco562012/06/01$115,000
Jennifer AcostaJunior Javascript DeveloperEdinburgh432013/02/01$75,650
Cara StevensSales AssistantNew York462011/12/06$145,600
Hermione ButlerRegional DirectorLondon472011/03/21$356,250
Lael GreerSystems AdministratorLondon212009/02/27$103,500
Jonas AlexanderDeveloperSan Francisco302010/07/14$86,500
Shad DeckerRegional DirectorEdinburgh512008/11/13$183,000
Michael BruceJavascript DeveloperSingapore292011/06/27$183,000
Donna SniderCustomer SupportNew York272011/01/25$112,000
+
+
+
+
+ +
+
+ + + + + + + + + diff --git a/package-lock.json b/package-lock.json index 3be6e74..4577617 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,13 +8,26 @@ "name": "rekan-ai", "version": "0.1.0", "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.6.0", + "@fortawesome/free-solid-svg-icons": "^6.6.0", + "@fortawesome/react-fontawesome": "^0.2.2", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "ajv": "^8.17.1", + "ajv-keywords": "^5.1.0", + "bootstrap": "^5.3.3", + "font-awesome": "^4.7.0", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-scripts": "5.0.1", + "react-drag-drop-files": "^2.4.0", + "react-router-dom": "^6.28.0", + "react-scripts": "^5.0.1", + "react-select": "^5.8.2", "web-vitals": "^2.1.4" + }, + "devDependencies": { + "cross-env": "^7.0.3" } }, "node_modules/@adobe/css-tools": { @@ -2244,6 +2257,160 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/@emotion/cache": { + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/cache/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", + "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/serialize/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/serialize/node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", + "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", @@ -2291,6 +2458,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2321,6 +2503,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2340,6 +2527,70 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "dependencies": { + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz", + "integrity": "sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz", + "integrity": "sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.6.0.tgz", + "integrity": "sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA==", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz", + "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -2948,6 +3199,14 @@ } } }, + "node_modules/@remix-run/router": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz", + "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -3807,6 +4066,14 @@ "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -3865,6 +4132,11 @@ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" + }, "node_modules/@types/testing-library__jest-dom": { "version": "5.14.9", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", @@ -4368,14 +4640,14 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "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" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -4398,26 +4670,6 @@ } } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, "node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", @@ -4833,6 +5085,21 @@ "webpack": ">=2" } }, + "node_modules/babel-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/babel-loader/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -4841,6 +5108,11 @@ "ajv": "^6.9.1" } }, + "node_modules/babel-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/babel-loader/node_modules/schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", @@ -5131,6 +5403,24 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "node_modules/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5273,6 +5563,14 @@ "node": ">= 6" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -5726,6 +6024,24 @@ "node": ">=10" } }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, "node_modules/cross-spawn": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", @@ -5764,6 +6080,14 @@ "postcss": "^8.4" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, "node_modules/css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -5905,6 +6229,16 @@ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/css-tree": { "version": "1.0.0-alpha.37", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", @@ -6420,6 +6754,15 @@ "utila": "~0.4" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -7267,6 +7610,21 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -7312,6 +7670,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -7658,6 +8021,21 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/file-loader/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -7666,6 +8044,11 @@ "ajv": "^6.9.1" } }, + "node_modules/file-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/file-loader/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -7775,6 +8158,11 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -7824,6 +8212,14 @@ } } }, + "node_modules/font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==", + "engines": { + "node": ">=0.10.3" + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -7896,6 +8292,21 @@ } } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -7933,6 +8344,11 @@ "node": ">=10" } }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", @@ -8382,6 +8798,19 @@ "he": "bin/he" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -10325,9 +10754,9 @@ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -10649,6 +11078,11 @@ "node": ">= 4.0.0" } }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -13020,6 +13454,19 @@ "react": "^18.3.1" } }, + "node_modules/react-drag-drop-files": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/react-drag-drop-files/-/react-drag-drop-files-2.4.0.tgz", + "integrity": "sha512-MGPV3HVVnwXEXq3gQfLtSU3jz5j5jrabvGedokpiSEMoONrDHgYl/NpIOlfsqGQ4zBv1bzzv7qbKURZNOX32PA==", + "dependencies": { + "prop-types": "^15.7.2", + "styled-components": "^6.1.11" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/react-error-overlay": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", @@ -13038,6 +13485,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.0.tgz", + "integrity": "sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==", + "dependencies": { + "@remix-run/router": "1.21.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.0.tgz", + "integrity": "sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==", + "dependencies": { + "@remix-run/router": "1.21.0", + "react-router": "6.28.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -13110,6 +13587,41 @@ } } }, + "node_modules/react-select": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.2.tgz", + "integrity": "sha512-a/LkOckoI62710gGPQSQqUp7A10fGbH/ya3/IR49qaq3XoBvwymgD5mJgtiHxBDsutyEQfdKNycWVh8Cg8UCjw==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -13658,26 +14170,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -13877,6 +14369,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -14440,6 +14937,65 @@ "webpack": "^5.0.0" } }, + "node_modules/styled-components": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz", + "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==", + "dependencies": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/styled-components/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", @@ -14455,6 +15011,11 @@ "postcss": "^8.2.15" } }, + "node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", @@ -14858,6 +15419,21 @@ } } }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -14866,6 +15442,11 @@ "ajv": "^6.9.1" } }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -15322,6 +15903,19 @@ "requires-port": "^1.0.0" } }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -15637,6 +16231,21 @@ "node": ">=10.13.0" } }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/webpack/node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -15665,6 +16274,11 @@ "node": ">=4.0" } }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -15906,21 +16520,6 @@ "node": ">=10.0.0" } }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/workbox-build/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -15935,11 +16534,6 @@ "node": ">=10" } }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, "node_modules/workbox-build/node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", diff --git a/package.json b/package.json index 2ae2d2e..7cc0f84 100644 --- a/package.json +++ b/package.json @@ -3,16 +3,26 @@ "version": "0.1.0", "private": true, "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.6.0", + "@fortawesome/free-solid-svg-icons": "^6.6.0", + "@fortawesome/react-fontawesome": "^0.2.2", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "ajv": "^8.17.1", + "ajv-keywords": "^5.1.0", + "bootstrap": "^5.3.3", + "font-awesome": "^4.7.0", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-scripts": "5.0.1", + "react-drag-drop-files": "^2.4.0", + "react-router-dom": "^6.28.0", + "react-scripts": "^5.0.1", + "react-select": "^5.8.2", "web-vitals": "^2.1.4" }, "scripts": { - "start": "react-scripts start", + "start": "cross-env PORT=3001 react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" @@ -34,5 +44,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "cross-env": "^7.0.3" } } diff --git a/src/App.css b/src/App.css deleted file mode 100644 index 74b5e05..0000000 --- a/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/src/App.js b/src/App.js index 3784575..5cb6b0d 100644 --- a/src/App.js +++ b/src/App.js @@ -1,25 +1,90 @@ -import logo from './logo.svg'; -import './App.css'; +import React from 'react'; +import { + Navbar, + Sidebar, + Main, + Footer +} from './components'; +import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom'; +import { + GettingStarted, + Dashboard, + Applications, + CreateApps +} from './screens/Home'; +import { + FaceVerify, + FaceSummary, + FaceTransaction +} from './screens/Biometric/FaceRecognition'; -function App() { +import { + Enroll, + VerifySection, + Liveness, + Compare, + Search +} from './screens/Biometric/FaceRecognition/Section'; + +import { + VerifyKtp +} from './screens/Biometric/OcrKtp'; + +// Import all other components following the dataMenu structure... + +const App = () => { return ( -
-
- logo -

- Edit src/App.js and save to reload. -

- - Learn React - -
-
+ + + +
+ +
+ + {/* Main Dashboard */} + } /> + } /> + } /> + } /> + } /> + + {/* Biometric - Face Recognition (Verify) */} + }> + {/* Anak rute */} + } /> + } /> + } /> + } /> + } /> + + {/* Default route */} + } /> + + {/* Add routes for the verify section */} + } /> + } /> + } /> + } /> + } /> + + {/* Biometric - Face Recognition (Summary) */} + } /> + } /> + + {/* Biometric - KTP */} + } /> + + {/* } /> */} + {/* Continue for each link */} + + + +
+
+
+ +
); -} +}; export default App; diff --git a/src/App.test.js b/src/App.test.js deleted file mode 100644 index 1f03afe..0000000 --- a/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/src/assets/css/app.css b/src/assets/css/app.css new file mode 100644 index 0000000..92c6aa8 --- /dev/null +++ b/src/assets/css/app.css @@ -0,0 +1,11289 @@ +@charset "UTF-8"; +/*! +* Start Bootstrap - SB Admin v7.0.7 (https://startbootstrap.com/template/sb-admin) +* Copyright 2013-2023 Start Bootstrap +* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-sb-admin/blob/master/LICENSE) +*/ +/*! + * Bootstrap v5.2.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-2xl: 2rem; + --bs-border-radius-pill: 50rem; + --bs-link-color: #0d6efd; + --bs-link-hover-color: #0a58ca; + --bs-code-color: #d63384; + --bs-highlight-bg: #fff3cd; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; + } +} + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: 1px solid; + opacity: 0.25; +} + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; + } +} + +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; + } +} + +h3, .h3 { + font-size: calc(1.3rem + 0.6vw); +} +@media (min-width: 1200px) { + h3, .h3 { + font-size: 1.75rem; + } +} + +h4, .h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + h4, .h4 { + font-size: 1.5rem; + } +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul { + padding-left: 2rem; +} + +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: 0.5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small, .small { + font-size: 0.875em; +} + +mark, .mark { + padding: 0.1875em; + background-color: var(--bs-highlight-bg); +} + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: var(--bs-link-color); + text-decoration: underline; +} +a:hover { + color: var(--bs-link-hover-color); +} + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; +} +a > code { + color: inherit; +} + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; +} +kbd kbd { + padding: 0; + font-size: 1em; +} + +figure { + margin: 0 0 1rem; +} + +img, +svg { + vertical-align: middle; +} + +table { + caption-side: bottom; + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +label { + display: inline-block; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +select { + text-transform: none; +} + +[role=button] { + cursor: pointer; +} + +select { + word-wrap: normal; +} +select:disabled { + opacity: 1; +} + +[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} + +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} +button:not(:disabled), +[type=button]:not(:disabled), +[type=reset]:not(:disabled), +[type=submit]:not(:disabled) { + cursor: pointer; +} + +::-moz-focus-inner { + padding: 0; + border-style: none; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} +@media (min-width: 1200px) { + legend { + font-size: 1.5rem; + } +} +legend + * { + clear: left; +} + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; +} + +::-webkit-inner-spin-button { + height: auto; +} + +[type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-color-swatch-wrapper { + padding: 0; +} + +::file-selector-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +iframe { + border: 0; +} + +summary { + display: list-item; + cursor: pointer; +} + +progress { + vertical-align: baseline; +} + +[hidden] { + display: none !important; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-1 { + font-size: 5rem; + } +} + +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; + } +} + +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-3 { + font-size: 4rem; + } +} + +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; + } +} + +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-5 { + font-size: 3rem; + } +} + +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; + } +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} +.blockquote > :last-child { + margin-bottom: 0; +} + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} +.blockquote-footer::before { + content: "— "; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid var(--bs-border-color); + border-radius: 0.375rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 0.875em; + color: #6c757d; +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} +.row > * { + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333333%; +} + +.offset-2 { + margin-left: 16.66666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333333%; +} + +.offset-5 { + margin-left: 41.66666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333333%; +} + +.offset-8 { + margin-left: 66.66666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333333%; +} + +.offset-11 { + margin-left: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.33333333%; + } + .offset-sm-2 { + margin-left: 16.66666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.33333333%; + } + .offset-sm-5 { + margin-left: 41.66666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.33333333%; + } + .offset-sm-8 { + margin-left: 66.66666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.33333333%; + } + .offset-sm-11 { + margin-left: 91.66666667%; + } + .g-sm-0, + .gx-sm-0 { + --bs-gutter-x: 0; + } + .g-sm-0, + .gy-sm-0 { + --bs-gutter-y: 0; + } + .g-sm-1, + .gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + .g-sm-1, + .gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + .g-sm-2, + .gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + .g-sm-2, + .gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + .g-sm-3, + .gx-sm-3 { + --bs-gutter-x: 1rem; + } + .g-sm-3, + .gy-sm-3 { + --bs-gutter-y: 1rem; + } + .g-sm-4, + .gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + .g-sm-4, + .gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + .g-sm-5, + .gx-sm-5 { + --bs-gutter-x: 3rem; + } + .g-sm-5, + .gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.33333333%; + } + .offset-md-2 { + margin-left: 16.66666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.33333333%; + } + .offset-md-5 { + margin-left: 41.66666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.33333333%; + } + .offset-md-8 { + margin-left: 66.66666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.33333333%; + } + .offset-md-11 { + margin-left: 91.66666667%; + } + .g-md-0, + .gx-md-0 { + --bs-gutter-x: 0; + } + .g-md-0, + .gy-md-0 { + --bs-gutter-y: 0; + } + .g-md-1, + .gx-md-1 { + --bs-gutter-x: 0.25rem; + } + .g-md-1, + .gy-md-1 { + --bs-gutter-y: 0.25rem; + } + .g-md-2, + .gx-md-2 { + --bs-gutter-x: 0.5rem; + } + .g-md-2, + .gy-md-2 { + --bs-gutter-y: 0.5rem; + } + .g-md-3, + .gx-md-3 { + --bs-gutter-x: 1rem; + } + .g-md-3, + .gy-md-3 { + --bs-gutter-y: 1rem; + } + .g-md-4, + .gx-md-4 { + --bs-gutter-x: 1.5rem; + } + .g-md-4, + .gy-md-4 { + --bs-gutter-y: 1.5rem; + } + .g-md-5, + .gx-md-5 { + --bs-gutter-x: 3rem; + } + .g-md-5, + .gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.33333333%; + } + .offset-lg-2 { + margin-left: 16.66666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.33333333%; + } + .offset-lg-5 { + margin-left: 41.66666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.33333333%; + } + .offset-lg-8 { + margin-left: 66.66666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.33333333%; + } + .offset-lg-11 { + margin-left: 91.66666667%; + } + .g-lg-0, + .gx-lg-0 { + --bs-gutter-x: 0; + } + .g-lg-0, + .gy-lg-0 { + --bs-gutter-y: 0; + } + .g-lg-1, + .gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + .g-lg-1, + .gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + .g-lg-2, + .gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + .g-lg-2, + .gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + .g-lg-3, + .gx-lg-3 { + --bs-gutter-x: 1rem; + } + .g-lg-3, + .gy-lg-3 { + --bs-gutter-y: 1rem; + } + .g-lg-4, + .gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + .g-lg-4, + .gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + .g-lg-5, + .gx-lg-5 { + --bs-gutter-x: 3rem; + } + .g-lg-5, + .gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.33333333%; + } + .offset-xl-2 { + margin-left: 16.66666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.33333333%; + } + .offset-xl-5 { + margin-left: 41.66666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.33333333%; + } + .offset-xl-8 { + margin-left: 66.66666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.33333333%; + } + .offset-xl-11 { + margin-left: 91.66666667%; + } + .g-xl-0, + .gx-xl-0 { + --bs-gutter-x: 0; + } + .g-xl-0, + .gy-xl-0 { + --bs-gutter-y: 0; + } + .g-xl-1, + .gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xl-1, + .gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xl-2, + .gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xl-2, + .gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xl-3, + .gx-xl-3 { + --bs-gutter-x: 1rem; + } + .g-xl-3, + .gy-xl-3 { + --bs-gutter-y: 1rem; + } + .g-xl-4, + .gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xl-4, + .gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xl-5, + .gx-xl-5 { + --bs-gutter-x: 3rem; + } + .g-xl-5, + .gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xxl-0 { + margin-left: 0; + } + .offset-xxl-1 { + margin-left: 8.33333333%; + } + .offset-xxl-2 { + margin-left: 16.66666667%; + } + .offset-xxl-3 { + margin-left: 25%; + } + .offset-xxl-4 { + margin-left: 33.33333333%; + } + .offset-xxl-5 { + margin-left: 41.66666667%; + } + .offset-xxl-6 { + margin-left: 50%; + } + .offset-xxl-7 { + margin-left: 58.33333333%; + } + .offset-xxl-8 { + margin-left: 66.66666667%; + } + .offset-xxl-9 { + margin-left: 75%; + } + .offset-xxl-10 { + margin-left: 83.33333333%; + } + .offset-xxl-11 { + margin-left: 91.66666667%; + } + .g-xxl-0, + .gx-xxl-0 { + --bs-gutter-x: 0; + } + .g-xxl-0, + .gy-xxl-0 { + --bs-gutter-y: 0; + } + .g-xxl-1, + .gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xxl-1, + .gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xxl-2, + .gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xxl-2, + .gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xxl-3, + .gx-xxl-3 { + --bs-gutter-x: 1rem; + } + .g-xxl-3, + .gy-xxl-3 { + --bs-gutter-y: 1rem; + } + .g-xxl-4, + .gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xxl-4, + .gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xxl-5, + .gx-xxl-5 { + --bs-gutter-x: 3rem; + } + .g-xxl-5, + .gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.table, .datatable-table { + --bs-table-color: var(--bs-body-color); + --bs-table-bg: transparent; + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-body-color); + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: var(--bs-body-color); + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: var(--bs-body-color); + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: var(--bs-table-color); + vertical-align: top; + border-color: var(--bs-table-border-color); +} +.table > :not(caption) > * > *, .datatable-table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} +.table > tbody, .datatable-table > tbody { + vertical-align: inherit; +} +.table > thead, .datatable-table > thead { + vertical-align: bottom; +} + +.table-group-divider { + border-top: 2px solid currentcolor; +} + +.caption-top { + caption-side: top; +} + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.table-bordered > :not(caption) > *, .datatable-table > :not(caption) > * { + border-width: 1px 0; +} +.table-bordered > :not(caption) > * > *, .datatable-table > :not(caption) > * > * { + border-width: 0 1px; +} + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} +.table-borderless > :not(:first-child) { + border-top-width: 0; +} + +.table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} + +.table-hover > tbody > tr:hover > *, .datatable-table > tbody > tr:hover > * { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} + +.table-primary { + --bs-table-color: #000; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #bacbe6; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-secondary { + --bs-table-color: #000; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #cbccce; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-success { + --bs-table-color: #000; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #bcd0c7; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-info { + --bs-table-color: #000; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #badce3; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-warning { + --bs-table-color: #000; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #e6dbb9; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-danger { + --bs-table-color: #000; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #dfc2c4; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-light { + --bs-table-color: #000; + --bs-table-bg: #f8f9fa; + --bs-table-border-color: #dfe0e1; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-dark { + --bs-table-color: #fff; + --bs-table-bg: #212529; + --bs-table-border-color: #373b3e; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-responsive, .datatable-wrapper .datatable-container { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +.form-label { + margin-bottom: 0.5rem; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; +} + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: #6c757d; +} + +.form-control, .datatable-input { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control, .datatable-input { + transition: none; + } +} +.form-control[type=file], [type=file].datatable-input { + overflow: hidden; +} +.form-control[type=file]:not(:disabled):not([readonly]), [type=file].datatable-input:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control:focus, .datatable-input:focus { + color: #212529; + background-color: #fff; + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-control::-webkit-date-and-time-value, .datatable-input::-webkit-date-and-time-value { + height: 1.5em; +} +.form-control::-moz-placeholder, .datatable-input::-moz-placeholder { + color: #6c757d; + opacity: 1; +} +.form-control::placeholder, .datatable-input::placeholder { + color: #6c757d; + opacity: 1; +} +.form-control:disabled, .datatable-input:disabled { + background-color: #e9ecef; + opacity: 1; +} +.form-control::file-selector-button, .datatable-input::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: #212529; + background-color: #e9ecef; + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: 1px; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::file-selector-button, .datatable-input::file-selector-button { + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::file-selector-button, .datatable-input:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: #dde0e3; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} +.form-control-plaintext:focus { + outline: 0; +} +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} +.form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} +.form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +textarea.form-control, textarea.datatable-input { + min-height: calc(1.5em + 0.75rem + 2px); +} +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + 2px); +} +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + 2px); +} + +.form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem; +} +.form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: 0.375rem; +} +.form-control-color::-webkit-color-swatch { + border-radius: 0.375rem; +} +.form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); +} +.form-control-color.form-control-lg { + height: calc(1.5em + 1rem + 2px); +} + +.form-select, .datatable-selector { + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: 1px solid #ced4da; + border-radius: 0.375rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-select, .datatable-selector { + transition: none; + } +} +.form-select:focus, .datatable-selector:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-select[multiple], [multiple].datatable-selector, .form-select[size]:not([size="1"]), [size].datatable-selector:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} +.form-select:disabled, .datatable-selector:disabled { + background-color: #e9ecef; +} +.form-select:-moz-focusring, .datatable-selector:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #212529; +} + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} +.form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; +} +.form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; +} + +.form-check-input { + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + background-color: #fff; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: 1px solid rgba(0, 0, 0, 0.25); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; +} +.form-check-input[type=checkbox] { + border-radius: 0.25em; +} +.form-check-input[type=radio] { + border-radius: 50%; +} +.form-check-input:active { + filter: brightness(90%); +} +.form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} +.form-check-input:checked[type=checkbox] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} +.form-check-input:checked[type=radio] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} +.form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} +.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; +} + +.form-switch { + padding-left: 2.5em; +} +.form-switch .form-check-input { + width: 2em; + margin-left: -2.5em; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; + } +} +.form-switch .form-check-input:focus { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} +.form-switch .form-check-input:checked { + background-position: right center; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; +} +.form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; +} + +.form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.btn-check[disabled] + .btn, .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} +.form-range:focus { + outline: 0; +} +.form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range::-moz-focus-outer { + border: 0; +} +.form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} +.form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} +.form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} +.form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} +.form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.form-range:disabled { + pointer-events: none; +} +.form-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} +.form-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.form-floating { + position: relative; +} +.form-floating > .form-control, .form-floating > .datatable-input, +.form-floating > .form-control-plaintext, +.form-floating > .form-select, +.form-floating > .datatable-selector { + height: calc(3.5rem + 2px); + line-height: 1.25; +} +.form-floating > label { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: 1px solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; + } +} +.form-floating > .form-control, .form-floating > .datatable-input, +.form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; +} +.form-floating > .form-control::-moz-placeholder, .form-floating > .datatable-input::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder { + color: transparent; +} +.form-floating > .form-control::placeholder, .form-floating > .datatable-input::placeholder, +.form-floating > .form-control-plaintext::placeholder { + color: transparent; +} +.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .datatable-input:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:focus, .form-floating > .datatable-input:focus, .form-floating > .form-control:not(:placeholder-shown), .form-floating > .datatable-input:not(:placeholder-shown), +.form-floating > .form-control-plaintext:focus, +.form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:-webkit-autofill, .form-floating > .datatable-input:-webkit-autofill, +.form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-select, .form-floating > .datatable-selector { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label, .form-floating > .datatable-input:not(:-moz-placeholder-shown) ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:focus ~ label, .form-floating > .datatable-input:focus ~ label, +.form-floating > .form-control:not(:placeholder-shown) ~ label, +.form-floating > .datatable-input:not(:placeholder-shown) ~ label, +.form-floating > .form-control-plaintext ~ label, +.form-floating > .form-select ~ label, +.form-floating > .datatable-selector ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:-webkit-autofill ~ label, .form-floating > .datatable-input:-webkit-autofill ~ label { + opacity: 0.65; + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control-plaintext ~ label { + border-width: 1px 0; +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} +.input-group > .form-control, .input-group > .datatable-input, +.input-group > .form-select, +.input-group > .datatable-selector, +.input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} +.input-group > .form-control:focus, .input-group > .datatable-input:focus, +.input-group > .form-select:focus, +.input-group > .datatable-selector:focus, +.input-group > .form-floating:focus-within { + z-index: 5; +} +.input-group .btn { + position: relative; + z-index: 2; +} +.input-group .btn:focus { + z-index: 5; +} + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.375rem; +} + +.input-group-lg > .form-control, .input-group-lg > .datatable-input, +.input-group-lg > .form-select, +.input-group-lg > .datatable-selector, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: 0.5rem; +} + +.input-group-sm > .form-control, .input-group-sm > .datatable-input, +.input-group-sm > .form-select, +.input-group-sm > .datatable-selector, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.25rem; +} + +.input-group-lg > .form-select, .input-group-lg > .datatable-selector, +.input-group-sm > .form-select, +.input-group-sm > .datatable-selector { + padding-right: 3rem; +} + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .datatable-input, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .datatable-selector { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), +.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, +.input-group.has-validation > .form-floating:nth-last-child(n+3) > .datatable-input, +.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select, +.input-group.has-validation > .form-floating:nth-last-child(n+3) > .datatable-selector { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group > .form-floating:not(:first-child) > .form-control, .input-group > .form-floating:not(:first-child) > .datatable-input, +.input-group > .form-floating:not(:first-child) > .form-select, +.input-group > .form-floating:not(:first-child) > .datatable-selector { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #198754; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(25, 135, 84, 0.9); + border-radius: 0.375rem; +} + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control:valid, .was-validated .datatable-input:valid, .form-control.is-valid, .is-valid.datatable-input { + border-color: #198754; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:valid:focus, .was-validated .datatable-input:valid:focus, .form-control.is-valid:focus, .is-valid.datatable-input:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated textarea.form-control:valid, .was-validated textarea.datatable-input:valid, textarea.form-control.is-valid, textarea.is-valid.datatable-input { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:valid, .was-validated .datatable-selector:valid, .form-select.is-valid, .is-valid.datatable-selector { + border-color: #198754; +} +.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .datatable-selector:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .was-validated .datatable-selector:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .is-valid.datatable-selector:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"], .is-valid.datatable-selector:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:valid:focus, .was-validated .datatable-selector:valid:focus, .form-select.is-valid:focus, .is-valid.datatable-selector:focus { + border-color: #198754; + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} + +.was-validated .form-control-color:valid, .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: #198754; +} +.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: #198754; +} +.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); +} +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #198754; +} + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group > .form-control:not(:focus):valid, .was-validated .input-group > .datatable-input:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid, .input-group > .datatable-input:not(:focus).is-valid, +.was-validated .input-group > .form-select:not(:focus):valid, +.was-validated .input-group > .datatable-selector:not(:focus):valid, +.input-group > .form-select:not(:focus).is-valid, +.input-group > .datatable-selector:not(:focus).is-valid, +.was-validated .input-group > .form-floating:not(:focus-within):valid, +.input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.375rem; +} + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control:invalid, .was-validated .datatable-input:invalid, .form-control.is-invalid, .is-invalid.datatable-input { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:invalid:focus, .was-validated .datatable-input:invalid:focus, .form-control.is-invalid:focus, .is-invalid.datatable-input:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated textarea.form-control:invalid, .was-validated textarea.datatable-input:invalid, textarea.form-control.is-invalid, textarea.is-invalid.datatable-input { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:invalid, .was-validated .datatable-selector:invalid, .form-select.is-invalid, .is-invalid.datatable-selector { + border-color: #dc3545; +} +.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .datatable-selector:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .was-validated .datatable-selector:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .is-invalid.datatable-selector:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"], .is-invalid.datatable-selector:not([multiple])[size="1"] { + padding-right: 4.125rem; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:invalid:focus, .was-validated .datatable-selector:invalid:focus, .form-select.is-invalid:focus, .is-invalid.datatable-selector:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-control-color:invalid, .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: #dc3545; +} +.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: #dc3545; +} +.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); +} +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group > .form-control:not(:focus):invalid, .was-validated .input-group > .datatable-input:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid, .input-group > .datatable-input:not(:focus).is-invalid, +.was-validated .input-group > .form-select:not(:focus):invalid, +.was-validated .input-group > .datatable-selector:not(:focus):invalid, +.input-group > .form-select:not(:focus).is-invalid, +.input-group > .datatable-selector:not(:focus).is-invalid, +.was-validated .input-group > .form-floating:not(:focus-within):invalid, +.input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; +} + +.btn { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-family: ; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: #212529; + --bs-btn-bg: transparent; + --bs-btn-border-width: 1px; + --bs-btn-border-color: transparent; + --bs-btn-border-radius: 0.375rem; + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} +.btn:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); +} +.btn-check + .btn:hover { + color: var(--bs-btn-color); + background-color: var(--bs-btn-bg); + border-color: var(--bs-btn-border-color); +} +.btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); +} +.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn:disabled, .btn.disabled, fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); +} + +.btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; +} + +.btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; +} + +.btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; +} + +.btn-info { + --bs-btn-color: #000; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 11, 172, 204; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; +} + +.btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 217, 164, 6; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; +} + +.btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; +} + +.btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3d4d5; + --bs-btn-hover-border-color: #c6c7c8; + --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c6c7c8; + --bs-btn-active-border-color: #babbbc; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #f8f9fa; + --bs-btn-disabled-border-color: #f8f9fa; +} + +.btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #424649; + --bs-btn-hover-border-color: #373b3e; + --bs-btn-focus-shadow-rgb: 66, 70, 73; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4d5154; + --bs-btn-active-border-color: #373b3e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #212529; + --bs-btn-disabled-border-color: #212529; +} + +.btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; +} + +.btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; +} + +.btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; +} + +.btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; +} + +.btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; +} + +.btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; +} + +.btn-outline-light { + --bs-btn-color: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f8f9fa; + --bs-btn-hover-border-color: #f8f9fa; + --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f8f9fa; + --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #f8f9fa; + --bs-gradient: none; +} + +.btn-outline-dark { + --bs-btn-color: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #212529; + --bs-btn-hover-border-color: #212529; + --bs-btn-focus-shadow-rgb: 33, 37, 41; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #212529; + --bs-btn-active-border-color: #212529; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #212529; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #212529; + --bs-gradient: none; +} + +.btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: none; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; +} +.btn-link:focus-visible { + color: var(--bs-btn-color); +} +.btn-link:hover { + color: var(--bs-btn-hover-color); +} + +.btn-lg, .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: 0.5rem; +} + +.btn-sm, .btn-group-sm > .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: 0.25rem; +} + +.fade { + transition: opacity 0.15s linear; +} +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} +.collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; + } +} + +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: #212529; + --bs-dropdown-bg: #fff; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: 0.375rem; + --bs-dropdown-border-width: 1px; + --bs-dropdown-inner-border-radius: calc(0.375rem - 1px); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-dropdown-link-color: #212529; + --bs-dropdown-link-hover-color: #1e2125; + --bs-dropdown-link-hover-bg: #e9ecef; + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); +} +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); +} + +.dropdown-menu-start { + --bs-position: start; +} +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.dropdown-menu-end { + --bs-position: end; +} +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); +} +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); +} +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); +} +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} +.dropstart .dropdown-toggle::after { + display: none; +} +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; +} + +.dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} +.dropdown-item:hover, .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); +} +.dropdown-item.active, .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); +} +.dropdown-item.disabled, .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); +} + +.dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-box-shadow: ; + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.btn-toolbar .input-group { + width: auto; +} + +.btn-group { + border-radius: 0.375rem; +} +.btn-group > :not(.btn-check:first-child) + .btn, +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn.dropdown-toggle-split:first-child, +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:nth-child(n+3), +.btn-group > :not(.btn-check) + .btn, +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn ~ .btn, +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; + } +} +.nav-link:hover, .nav-link:focus { + color: var(--bs-nav-link-hover-color); +} +.nav-link.disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; +} + +.nav-tabs { + --bs-nav-tabs-border-width: 1px; + --bs-nav-tabs-border-color: #dee2e6; + --bs-nav-tabs-border-radius: 0.375rem; + --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6; + --bs-nav-tabs-link-active-color: #495057; + --bs-nav-tabs-link-active-bg: #fff; + --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff; + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); +} +.nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + background: none; + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); +} +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); +} +.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); +} +.nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills { + --bs-nav-pills-border-radius: 0.375rem; + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; +} +.nav-pills .nav-link { + background: none; + border: 0; + border-radius: var(--bs-nav-pills-border-radius); +} +.nav-pills .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + background-color: transparent; + border-color: transparent; +} +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} + +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} + +.navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(0, 0, 0, 0.55); + --bs-navbar-hover-color: rgba(0, 0, 0, 0.7); + --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3); + --bs-navbar-active-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(0, 0, 0, 0.9); + --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1); + --bs-navbar-toggler-border-radius: 0.375rem; + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); +} +.navbar > .container, +.navbar > .container-fluid, +.navbar > .container-sm, +.navbar > .container-md, +.navbar > .container-lg, +.navbar > .container-xl, +.navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} +.navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; +} +.navbar-brand:hover, .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); +} + +.navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.navbar-nav .show > .nav-link, +.navbar-nav .nav-link.active { + color: var(--bs-navbar-active-color); +} +.navbar-nav .dropdown-menu { + position: static; +} + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); +} +.navbar-text a, +.navbar-text a:hover, +.navbar-text a:focus { + color: var(--bs-navbar-active-color); +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); +} +@media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; + } +} +.navbar-toggler:hover { + text-decoration: none; +} +.navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-md .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xxl .navbar-toggler { + display: none; + } + .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} +.navbar-expand .navbar-nav { + flex-direction: row; +} +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} +.navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); +} +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} +.navbar-expand .navbar-toggler { + display: none; +} +.navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; +} +.navbar-expand .offcanvas .offcanvas-header { + display: none; +} +.navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.navbar-dark { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-border-width: 1px; + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: 0.375rem; + --bs-card-box-shadow: ; + --bs-card-inner-border-radius: calc(0.375rem - 1px); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(0, 0, 0, 0.03); + --bs-card-cap-color: ; + --bs-card-height: ; + --bs-card-color: ; + --bs-card-bg: #fff; + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); +} +.card > hr { + margin-right: 0; + margin-left: 0; +} +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} +.card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} + +.card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); +} + +.card-title { + margin-bottom: var(--bs-card-title-spacer-y); +} + +.card-subtitle { + margin-top: calc(-0.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link + .card-link { + margin-left: var(--bs-card-spacer-x); +} + +.card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); +} +.card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; +} + +.card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); +} +.card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); +} + +.card-header-tabs { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; +} +.card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); +} + +.card-header-pills { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); +} + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; +} + +.card-img, +.card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.card-img, +.card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.card-group > .card { + margin-bottom: var(--bs-card-group-margin); +} +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.accordion { + --bs-accordion-color: #212529; + --bs-accordion-bg: #fff; + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: 1px; + --bs-accordion-border-radius: 0.375rem; + --bs-accordion-inner-border-radius: calc(0.375rem - 1px); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: #212529; + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-border-color: #86b7fe; + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: #0c63e4; + --bs-accordion-active-bg: #e7f1ff; +} + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); +} +@media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; + } +} +.accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); +} +.accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); +} +.accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); +} +@media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; + } +} +.accordion-button:hover { + z-index: 2; +} +.accordion-button:focus { + z-index: 3; + border-color: var(--bs-accordion-btn-focus-border-color); + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); +} + +.accordion-header { + margin-bottom: 0; +} + +.accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); +} +.accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); +} +.accordion-item:first-of-type .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); +} +.accordion-item:not(:first-of-type) { + border-top: 0; +} +.accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} +.accordion-item:last-of-type .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); +} +.accordion-item:last-of-type .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); +} + +.accordion-flush .accordion-collapse { + border-width: 0; +} +.accordion-flush .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} +.accordion-flush .accordion-item:first-child { + border-top: 0; +} +.accordion-flush .accordion-item:last-child { + border-bottom: 0; +} +.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed { + border-radius: 0; +} + +.breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-bg: ; + --bs-breadcrumb-border-radius: ; + --bs-breadcrumb-divider-color: #6c757d; + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: #6c757d; + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); +} +.breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; +} +.breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); +} + +.pagination, .datatable-pagination ul { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: #fff; + --bs-pagination-border-width: 1px; + --bs-pagination-border-color: #dee2e6; + --bs-pagination-border-radius: 0.375rem; + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: #e9ecef; + --bs-pagination-hover-border-color: #dee2e6; + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: #e9ecef; + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: #6c757d; + --bs-pagination-disabled-bg: #fff; + --bs-pagination-disabled-border-color: #dee2e6; + display: flex; + padding-left: 0; + list-style: none; +} + +.page-link, .datatable-pagination a { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .page-link, .datatable-pagination a { + transition: none; + } +} +.page-link:hover, .datatable-pagination a:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); +} +.page-link:focus, .datatable-pagination a:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); +} +.page-link.active, .datatable-pagination a.active, .active > .page-link, .datatable-pagination .active > a { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); +} +.page-link.disabled, .datatable-pagination a.disabled, .disabled > .page-link, .datatable-pagination .disabled > a { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); +} + +.page-item:not(:first-child) .page-link, .page-item:not(:first-child) .datatable-pagination a, .datatable-pagination .page-item:not(:first-child) a, .datatable-pagination li:not(:first-child) .page-link, .datatable-pagination li:not(:first-child) a { + margin-left: -1px; +} +.page-item:first-child .page-link, .page-item:first-child .datatable-pagination a, .datatable-pagination .page-item:first-child a, .datatable-pagination li:first-child .page-link, .datatable-pagination li:first-child a { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); +} +.page-item:last-child .page-link, .page-item:last-child .datatable-pagination a, .datatable-pagination .page-item:last-child a, .datatable-pagination li:last-child .page-link, .datatable-pagination li:last-child a { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); +} + +.pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: 0.5rem; +} + +.pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: 0.25rem; +} + +.badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: 0.375rem; + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); +} +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: 1px solid var(--bs-alert-border-color); + --bs-alert-border-radius: 0.375rem; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 3rem; +} +.alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.alert-primary { + --bs-alert-color: #084298; + --bs-alert-bg: #cfe2ff; + --bs-alert-border-color: #b6d4fe; +} +.alert-primary .alert-link { + color: #06357a; +} + +.alert-secondary { + --bs-alert-color: #41464b; + --bs-alert-bg: #e2e3e5; + --bs-alert-border-color: #d3d6d8; +} +.alert-secondary .alert-link { + color: #34383c; +} + +.alert-success { + --bs-alert-color: #0f5132; + --bs-alert-bg: #d1e7dd; + --bs-alert-border-color: #badbcc; +} +.alert-success .alert-link { + color: #0c4128; +} + +.alert-info { + --bs-alert-color: #055160; + --bs-alert-bg: #cff4fc; + --bs-alert-border-color: #b6effb; +} +.alert-info .alert-link { + color: #04414d; +} + +.alert-warning { + --bs-alert-color: #664d03; + --bs-alert-bg: #fff3cd; + --bs-alert-border-color: #ffecb5; +} +.alert-warning .alert-link { + color: #523e02; +} + +.alert-danger { + --bs-alert-color: #842029; + --bs-alert-bg: #f8d7da; + --bs-alert-border-color: #f5c2c7; +} +.alert-danger .alert-link { + color: #6a1a21; +} + +.alert-light { + --bs-alert-color: #636464; + --bs-alert-bg: #fefefe; + --bs-alert-border-color: #fdfdfe; +} +.alert-light .alert-link { + color: #4f5050; +} + +.alert-dark { + --bs-alert-color: #141619; + --bs-alert-bg: #d3d3d4; + --bs-alert-border-color: #bcbebf; +} +.alert-dark .alert-link { + color: #101214; +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} +.progress { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: #e9ecef; + --bs-progress-border-radius: 0.375rem; + --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #0d6efd; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); +} +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); +} + +.progress-bar-animated { + animation: 1s linear infinite progress-bar-stripes; +} +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; + } +} + +.list-group { + --bs-list-group-color: #212529; + --bs-list-group-bg: #fff; + --bs-list-group-border-color: rgba(0, 0, 0, 0.125); + --bs-list-group-border-width: 1px; + --bs-list-group-border-radius: 0.375rem; + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: #495057; + --bs-list-group-action-hover-color: #495057; + --bs-list-group-action-hover-bg: #f8f9fa; + --bs-list-group-action-active-color: #212529; + --bs-list-group-action-active-bg: #e9ecef; + --bs-list-group-disabled-color: #6c757d; + --bs-list-group-disabled-bg: #fff; + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #0d6efd; + --bs-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); +} + +.list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; +} +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); +} +.list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); +} + +.list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); +} +.list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +.list-group-item.disabled, .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); +} +.list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); +} +.list-group-item + .list-group-item { + border-top-width: 0; +} +.list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); +} + +.list-group-horizontal { + flex-direction: row; +} +.list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; +} +.list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; +} +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; + } + .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +.list-group-flush { + border-radius: 0; +} +.list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); +} +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + color: #084298; + background-color: #cfe2ff; +} +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #084298; + background-color: #bacbe6; +} +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #084298; + border-color: #084298; +} + +.list-group-item-secondary { + color: #41464b; + background-color: #e2e3e5; +} +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #41464b; + background-color: #cbccce; +} +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #41464b; + border-color: #41464b; +} + +.list-group-item-success { + color: #0f5132; + background-color: #d1e7dd; +} +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #0f5132; + background-color: #bcd0c7; +} +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #0f5132; + border-color: #0f5132; +} + +.list-group-item-info { + color: #055160; + background-color: #cff4fc; +} +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #055160; + background-color: #badce3; +} +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #055160; + border-color: #055160; +} + +.list-group-item-warning { + color: #664d03; + background-color: #fff3cd; +} +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #664d03; + background-color: #e6dbb9; +} +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #664d03; + border-color: #664d03; +} + +.list-group-item-danger { + color: #842029; + background-color: #f8d7da; +} +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #842029; + background-color: #dfc2c4; +} +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #842029; + border-color: #842029; +} + +.list-group-item-light { + color: #636464; + background-color: #fefefe; +} +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #636464; + background-color: #e5e5e5; +} +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #636464; + border-color: #636464; +} + +.list-group-item-dark { + color: #141619; + background-color: #d3d3d4; +} +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #141619; + background-color: #bebebf; +} +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #141619; + border-color: #141619; +} + +.btn-close { + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: #000; + background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: 0.5; +} +.btn-close:hover { + color: #000; + text-decoration: none; + opacity: 0.75; +} +.btn-close:focus { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + opacity: 1; +} +.btn-close:disabled, .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: 0.25; +} + +.btn-close-white { + filter: invert(1) grayscale(100%) brightness(200%); +} + +.toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-color: ; + --bs-toast-bg: rgba(255, 255, 255, 0.85); + --bs-toast-border-width: 1px; + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: 0.375rem; + --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-toast-header-color: #6c757d; + --bs-toast-header-bg: rgba(255, 255, 255, 0.85); + --bs-toast-header-border-color: rgba(0, 0, 0, 0.05); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); +} +.toast.showing { + opacity: 0; +} +.toast:not(.show) { + display: none; +} + +.toast-container { + --bs-toast-zindex: 1090; + position: absolute; + z-index: var(--bs-toast-zindex); + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} +.toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); +} + +.toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); +} +.toast-header .btn-close { + margin-right: calc(-0.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); +} + +.toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; +} + +.modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-color: ; + --bs-modal-bg: #fff; + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: 1px; + --bs-modal-border-radius: 0.5rem; + --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-modal-inner-border-radius: calc(0.5rem - 1px); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: 1px; + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-bg: ; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: 1px; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; +} +.modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} +.modal.show .modal-dialog { + transform: none; +} +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); +} +.modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; +} + +.modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); +} + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + justify-content: space-between; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); +} +.modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); + margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto; +} + +.modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); +} + +.modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); +} +.modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * 0.5); +} + +@media (min-width: 576px) { + .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + } + .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; + } + .modal-sm { + --bs-modal-width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + --bs-modal-width: 800px; + } +} +@media (min-width: 1200px) { + .modal-xl { + --bs-modal-width: 1140px; + } +} +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} +.modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} +.modal-fullscreen .modal-header, +.modal-fullscreen .modal-footer { + border-radius: 0; +} +.modal-fullscreen .modal-body { + overflow-y: auto; +} + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-header, + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-md-down .modal-header, + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-header, + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-header, + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-header, + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } +} +.tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-margin: ; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: #fff; + --bs-tooltip-bg: #000; + --bs-tooltip-border-radius: 0.375rem; + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + padding: var(--bs-tooltip-arrow-height); + margin: var(--bs-tooltip-margin); + font-family: var(--bs-font-sans-serif); + 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; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; +} +.tooltip.show { + opacity: var(--bs-tooltip-opacity); +} +.tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); +} +.tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} +.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-top-color: var(--bs-tooltip-bg); +} + +/* rtl:begin:ignore */ +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} +.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-right-color: var(--bs-tooltip-bg); +} + +/* rtl:end:ignore */ +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} +.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); +} + +/* rtl:begin:ignore */ +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: 0; + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} +.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); +} + +/* rtl:end:ignore */ +.tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); +} + +.popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: #fff; + --bs-popover-border-width: 1px; + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: 0.5rem; + --bs-popover-inner-border-radius: calc(0.5rem - 1px); + --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-color: ; + --bs-popover-header-bg: #f0f0f0; + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: #212529; + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: var(--bs-font-sans-serif); + 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; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); +} +.popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); +} +.popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; +} + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); +} +.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); +} + +/* rtl:begin:ignore */ +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); +} +.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); +} + +/* rtl:end:ignore */ +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); +} +.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); +} +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-0.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); +} + +/* rtl:begin:ignore */ +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); +} +.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); +} + +/* rtl:end:ignore */ +.popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); +} +.popover-header:empty { + display: none; +} + +.popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, + .carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; + } +} +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +/* rtl:options: { + "autoRename": true, + "stringMap":[ { + "name" : "prev-next", + "search" : "prev", + "replace" : "next" + } ] +} */ +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; + list-style: none; +} +.carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; + } +} +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} +.carousel-dark .carousel-caption { + color: #000; +} + +.spinner-grow, +.spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); +} + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} +.spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; +} + +.spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} +.spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; +} + +.spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + --bs-spinner-animation-speed: 1.5s; + } +} +.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-color: ; + --bs-offcanvas-bg: #fff; + --bs-offcanvas-border-width: 1px; + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); +} + +@media (max-width: 575.98px) { + .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-sm { + transition: none; + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show { + visibility: visible; + } +} +@media (min-width: 576px) { + .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-sm .offcanvas-header { + display: none; + } + .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 767.98px) { + .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-md { + transition: none; + } +} +@media (max-width: 767.98px) { + .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} +@media (max-width: 767.98px) { + .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} +@media (max-width: 767.98px) { + .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} +@media (max-width: 767.98px) { + .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} +@media (max-width: 767.98px) { + .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 767.98px) { + .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show { + visibility: visible; + } +} +@media (min-width: 768px) { + .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-md .offcanvas-header { + display: none; + } + .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 991.98px) { + .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-lg { + transition: none; + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show { + visibility: visible; + } +} +@media (min-width: 992px) { + .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-lg .offcanvas-header { + display: none; + } + .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1199.98px) { + .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xl { + transition: none; + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show { + visibility: visible; + } +} +@media (min-width: 1200px) { + .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-xl .offcanvas-header { + display: none; + } + .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1399.98px) { + .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; + } +} +@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xxl { + transition: none; + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) { + transform: none; + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show { + visibility: visible; + } +} +@media (min-width: 1400px) { + .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-xxl .offcanvas-header { + display: none; + } + .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +.offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: transform 0.3s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; + } +} +.offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); +} +.offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); +} +.offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); +} +.offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); +} +.offcanvas.showing, .offcanvas.show:not(.hiding) { + transform: none; +} +.offcanvas.showing, .offcanvas.hiding, .offcanvas.show { + visibility: visible; +} + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} +.offcanvas-backdrop.fade { + opacity: 0; +} +.offcanvas-backdrop.show { + opacity: 0.5; +} + +.offcanvas-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); +} +.offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); + margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y)); + margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x)); + margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y)); +} + +.offcanvas-title { + margin-bottom: 0; + line-height: 1.5; +} + +.offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; +} + +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; +} +.placeholder.btn::before { + display: inline-block; + content: ""; +} + +.placeholder-xs { + min-height: 0.6em; +} + +.placeholder-sm { + min-height: 0.8em; +} + +.placeholder-lg { + min-height: 1.2em; +} + +.placeholder-glow .placeholder { + animation: placeholder-glow 2s ease-in-out infinite; +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} +.placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + animation: placeholder-wave 2s linear infinite; +} + +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.text-bg-primary { + color: #fff !important; + background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-secondary { + color: #fff !important; + background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-success { + color: #fff !important; + background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-info { + color: #000 !important; + background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-warning { + color: #000 !important; + background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-danger { + color: #fff !important; + background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-light { + color: #000 !important; + background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-dark { + color: #fff !important; + background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important; +} + +.link-primary { + color: #0d6efd !important; +} +.link-primary:hover, .link-primary:focus { + color: #0a58ca !important; +} + +.link-secondary { + color: #6c757d !important; +} +.link-secondary:hover, .link-secondary:focus { + color: #565e64 !important; +} + +.link-success { + color: #198754 !important; +} +.link-success:hover, .link-success:focus { + color: #146c43 !important; +} + +.link-info { + color: #0dcaf0 !important; +} +.link-info:hover, .link-info:focus { + color: #3dd5f3 !important; +} + +.link-warning { + color: #ffc107 !important; +} +.link-warning:hover, .link-warning:focus { + color: #ffcd39 !important; +} + +.link-danger { + color: #dc3545 !important; +} +.link-danger:hover, .link-danger:focus { + color: #b02a37 !important; +} + +.link-light { + color: #f8f9fa !important; +} +.link-light:hover, .link-light:focus { + color: #f9fafb !important; +} + +.link-dark { + color: #212529 !important; +} +.link-dark:hover, .link-dark:focus { + color: #1a1e21 !important; +} + +.ratio { + position: relative; + width: 100%; +} +.ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; +} +.ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ratio-1x1 { + --bs-aspect-ratio: 100%; +} + +.ratio-4x3 { + --bs-aspect-ratio: 75%; +} + +.ratio-16x9 { + --bs-aspect-ratio: 56.25%; +} + +.ratio-21x9 { + --bs-aspect-ratio: 42.8571428571%; +} + +.fixed-top, .sb-nav-fixed #layoutSidenav #layoutSidenav_nav, .sb-nav-fixed .sb-topnav { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.sticky-top { + position: sticky; + top: 0; + z-index: 1020; +} + +.sticky-bottom { + position: sticky; + bottom: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .sticky-sm-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-sm-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 768px) { + .sticky-md-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-md-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 992px) { + .sticky-lg-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-lg-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1200px) { + .sticky-xl-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-xl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1400px) { + .sticky-xxl-top { + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-xxl-bottom { + position: sticky; + bottom: 0; + z-index: 1020; + } +} +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.vr { + display: inline-block; + align-self: stretch; + width: 1px; + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; +} + +.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; +} + +.float-start { + float: left !important; +} + +.float-end { + float: right !important; +} + +.float-none { + float: none !important; +} + +.opacity-0 { + opacity: 0 !important; +} + +.opacity-25 { + opacity: 0.25 !important; +} + +.opacity-50 { + opacity: 0.5 !important; +} + +.opacity-75 { + opacity: 0.75 !important; +} + +.opacity-100 { + opacity: 1 !important; +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.overflow-visible { + overflow: visible !important; +} + +.overflow-scroll { + overflow: scroll !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: sticky !important; +} + +.top-0 { + top: 0 !important; +} + +.top-50 { + top: 50% !important; +} + +.top-100 { + top: 100% !important; +} + +.bottom-0 { + bottom: 0 !important; +} + +.bottom-50 { + bottom: 50% !important; +} + +.bottom-100 { + bottom: 100% !important; +} + +.start-0 { + left: 0 !important; +} + +.start-50 { + left: 50% !important; +} + +.start-100 { + left: 100% !important; +} + +.end-0 { + right: 0 !important; +} + +.end-50 { + right: 50% !important; +} + +.end-100 { + right: 100% !important; +} + +.translate-middle { + transform: translate(-50%, -50%) !important; +} + +.translate-middle-x { + transform: translateX(-50%) !important; +} + +.translate-middle-y { + transform: translateY(-50%) !important; +} + +.border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-end-0 { + border-right: 0 !important; +} + +.border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-start-0 { + border-left: 0 !important; +} + +.border-primary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important; +} + +.border-secondary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important; +} + +.border-success { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important; +} + +.border-info { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important; +} + +.border-warning { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important; +} + +.border-danger { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important; +} + +.border-light { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important; +} + +.border-dark { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important; +} + +.border-white { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important; +} + +.border-1 { + --bs-border-width: 1px; +} + +.border-2 { + --bs-border-width: 2px; +} + +.border-3 { + --bs-border-width: 3px; +} + +.border-4 { + --bs-border-width: 4px; +} + +.border-5 { + --bs-border-width: 5px; +} + +.border-opacity-10 { + --bs-border-opacity: 0.1; +} + +.border-opacity-25 { + --bs-border-opacity: 0.25; +} + +.border-opacity-50 { + --bs-border-opacity: 0.5; +} + +.border-opacity-75 { + --bs-border-opacity: 0.75; +} + +.border-opacity-100 { + --bs-border-opacity: 1; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.vw-100 { + width: 100vw !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.vh-100 { + height: 100vh !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +.gap-0 { + gap: 0 !important; +} + +.gap-1 { + gap: 0.25rem !important; +} + +.gap-2 { + gap: 0.5rem !important; +} + +.gap-3 { + gap: 1rem !important; +} + +.gap-4 { + gap: 1.5rem !important; +} + +.gap-5 { + gap: 3rem !important; +} + +.font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.fs-5 { + font-size: 1.25rem !important; +} + +.fs-6 { + font-size: 1rem !important; +} + +.fst-italic { + font-style: italic !important; +} + +.fst-normal { + font-style: normal !important; +} + +.fw-light { + font-weight: 300 !important; +} + +.fw-lighter { + font-weight: lighter !important; +} + +.fw-normal { + font-weight: 400 !important; +} + +.fw-bold { + font-weight: 700 !important; +} + +.fw-semibold { + font-weight: 600 !important; +} + +.fw-bolder { + font-weight: bolder !important; +} + +.lh-1 { + line-height: 1 !important; +} + +.lh-sm { + line-height: 1.25 !important; +} + +.lh-base { + line-height: 1.5 !important; +} + +.lh-lg { + line-height: 2 !important; +} + +.text-start { + text-align: left !important; +} + +.text-end { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-decoration-underline { + text-decoration: underline !important; +} + +.text-decoration-line-through { + text-decoration: line-through !important; +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; +} + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; +} + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; +} + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; +} + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; +} + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; +} + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; +} + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; +} + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; +} + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; +} + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; +} + +.text-muted { + --bs-text-opacity: 1; + color: #6c757d !important; +} + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-reset { + --bs-text-opacity: 1; + color: inherit !important; +} + +.text-opacity-25 { + --bs-text-opacity: 0.25; +} + +.text-opacity-50 { + --bs-text-opacity: 0.5; +} + +.text-opacity-75 { + --bs-text-opacity: 0.75; +} + +.text-opacity-100 { + --bs-text-opacity: 1; +} + +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; +} + +.bg-opacity-10 { + --bs-bg-opacity: 0.1; +} + +.bg-opacity-25 { + --bs-bg-opacity: 0.25; +} + +.bg-opacity-50 { + --bs-bg-opacity: 0.5; +} + +.bg-opacity-75 { + --bs-bg-opacity: 0.75; +} + +.bg-opacity-100 { + --bs-bg-opacity: 1; +} + +.bg-gradient { + background-image: var(--bs-gradient) !important; +} + +.user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} + +.pe-none { + pointer-events: none !important; +} + +.pe-auto { + pointer-events: auto !important; +} + +.rounded { + border-radius: var(--bs-border-radius) !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-2 { + border-radius: var(--bs-border-radius) !important; +} + +.rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-5 { + border-radius: var(--bs-border-radius-2xl) !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; +} + +.rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; +} + +.rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; + } + .float-sm-end { + float: right !important; + } + .float-sm-none { + float: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-grid { + display: grid !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } + .order-sm-first { + order: -1 !important; + } + .order-sm-0 { + order: 0 !important; + } + .order-sm-1 { + order: 1 !important; + } + .order-sm-2 { + order: 2 !important; + } + .order-sm-3 { + order: 3 !important; + } + .order-sm-4 { + order: 4 !important; + } + .order-sm-5 { + order: 5 !important; + } + .order-sm-last { + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .me-sm-0 { + margin-right: 0 !important; + } + .me-sm-1 { + margin-right: 0.25rem !important; + } + .me-sm-2 { + margin-right: 0.5rem !important; + } + .me-sm-3 { + margin-right: 1rem !important; + } + .me-sm-4 { + margin-right: 1.5rem !important; + } + .me-sm-5 { + margin-right: 3rem !important; + } + .me-sm-auto { + margin-right: auto !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ms-sm-0 { + margin-left: 0 !important; + } + .ms-sm-1 { + margin-left: 0.25rem !important; + } + .ms-sm-2 { + margin-left: 0.5rem !important; + } + .ms-sm-3 { + margin-left: 1rem !important; + } + .ms-sm-4 { + margin-left: 1.5rem !important; + } + .ms-sm-5 { + margin-left: 3rem !important; + } + .ms-sm-auto { + margin-left: auto !important; + } + .p-sm-0 { + padding: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pe-sm-0 { + padding-right: 0 !important; + } + .pe-sm-1 { + padding-right: 0.25rem !important; + } + .pe-sm-2 { + padding-right: 0.5rem !important; + } + .pe-sm-3 { + padding-right: 1rem !important; + } + .pe-sm-4 { + padding-right: 1.5rem !important; + } + .pe-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .ps-sm-0 { + padding-left: 0 !important; + } + .ps-sm-1 { + padding-left: 0.25rem !important; + } + .ps-sm-2 { + padding-left: 0.5rem !important; + } + .ps-sm-3 { + padding-left: 1rem !important; + } + .ps-sm-4 { + padding-left: 1.5rem !important; + } + .ps-sm-5 { + padding-left: 3rem !important; + } + .gap-sm-0 { + gap: 0 !important; + } + .gap-sm-1 { + gap: 0.25rem !important; + } + .gap-sm-2 { + gap: 0.5rem !important; + } + .gap-sm-3 { + gap: 1rem !important; + } + .gap-sm-4 { + gap: 1.5rem !important; + } + .gap-sm-5 { + gap: 3rem !important; + } + .text-sm-start { + text-align: left !important; + } + .text-sm-end { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} +@media (min-width: 768px) { + .float-md-start { + float: left !important; + } + .float-md-end { + float: right !important; + } + .float-md-none { + float: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-grid { + display: grid !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } + .order-md-first { + order: -1 !important; + } + .order-md-0 { + order: 0 !important; + } + .order-md-1 { + order: 1 !important; + } + .order-md-2 { + order: 2 !important; + } + .order-md-3 { + order: 3 !important; + } + .order-md-4 { + order: 4 !important; + } + .order-md-5 { + order: 5 !important; + } + .order-md-last { + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .me-md-0 { + margin-right: 0 !important; + } + .me-md-1 { + margin-right: 0.25rem !important; + } + .me-md-2 { + margin-right: 0.5rem !important; + } + .me-md-3 { + margin-right: 1rem !important; + } + .me-md-4 { + margin-right: 1.5rem !important; + } + .me-md-5 { + margin-right: 3rem !important; + } + .me-md-auto { + margin-right: auto !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ms-md-0 { + margin-left: 0 !important; + } + .ms-md-1 { + margin-left: 0.25rem !important; + } + .ms-md-2 { + margin-left: 0.5rem !important; + } + .ms-md-3 { + margin-left: 1rem !important; + } + .ms-md-4 { + margin-left: 1.5rem !important; + } + .ms-md-5 { + margin-left: 3rem !important; + } + .ms-md-auto { + margin-left: auto !important; + } + .p-md-0 { + padding: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pe-md-0 { + padding-right: 0 !important; + } + .pe-md-1 { + padding-right: 0.25rem !important; + } + .pe-md-2 { + padding-right: 0.5rem !important; + } + .pe-md-3 { + padding-right: 1rem !important; + } + .pe-md-4 { + padding-right: 1.5rem !important; + } + .pe-md-5 { + padding-right: 3rem !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .ps-md-0 { + padding-left: 0 !important; + } + .ps-md-1 { + padding-left: 0.25rem !important; + } + .ps-md-2 { + padding-left: 0.5rem !important; + } + .ps-md-3 { + padding-left: 1rem !important; + } + .ps-md-4 { + padding-left: 1.5rem !important; + } + .ps-md-5 { + padding-left: 3rem !important; + } + .gap-md-0 { + gap: 0 !important; + } + .gap-md-1 { + gap: 0.25rem !important; + } + .gap-md-2 { + gap: 0.5rem !important; + } + .gap-md-3 { + gap: 1rem !important; + } + .gap-md-4 { + gap: 1.5rem !important; + } + .gap-md-5 { + gap: 3rem !important; + } + .text-md-start { + text-align: left !important; + } + .text-md-end { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} +@media (min-width: 992px) { + .float-lg-start { + float: left !important; + } + .float-lg-end { + float: right !important; + } + .float-lg-none { + float: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-grid { + display: grid !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } + .order-lg-first { + order: -1 !important; + } + .order-lg-0 { + order: 0 !important; + } + .order-lg-1 { + order: 1 !important; + } + .order-lg-2 { + order: 2 !important; + } + .order-lg-3 { + order: 3 !important; + } + .order-lg-4 { + order: 4 !important; + } + .order-lg-5 { + order: 5 !important; + } + .order-lg-last { + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .me-lg-0 { + margin-right: 0 !important; + } + .me-lg-1 { + margin-right: 0.25rem !important; + } + .me-lg-2 { + margin-right: 0.5rem !important; + } + .me-lg-3 { + margin-right: 1rem !important; + } + .me-lg-4 { + margin-right: 1.5rem !important; + } + .me-lg-5 { + margin-right: 3rem !important; + } + .me-lg-auto { + margin-right: auto !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ms-lg-0 { + margin-left: 0 !important; + } + .ms-lg-1 { + margin-left: 0.25rem !important; + } + .ms-lg-2 { + margin-left: 0.5rem !important; + } + .ms-lg-3 { + margin-left: 1rem !important; + } + .ms-lg-4 { + margin-left: 1.5rem !important; + } + .ms-lg-5 { + margin-left: 3rem !important; + } + .ms-lg-auto { + margin-left: auto !important; + } + .p-lg-0 { + padding: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pe-lg-0 { + padding-right: 0 !important; + } + .pe-lg-1 { + padding-right: 0.25rem !important; + } + .pe-lg-2 { + padding-right: 0.5rem !important; + } + .pe-lg-3 { + padding-right: 1rem !important; + } + .pe-lg-4 { + padding-right: 1.5rem !important; + } + .pe-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .ps-lg-0 { + padding-left: 0 !important; + } + .ps-lg-1 { + padding-left: 0.25rem !important; + } + .ps-lg-2 { + padding-left: 0.5rem !important; + } + .ps-lg-3 { + padding-left: 1rem !important; + } + .ps-lg-4 { + padding-left: 1.5rem !important; + } + .ps-lg-5 { + padding-left: 3rem !important; + } + .gap-lg-0 { + gap: 0 !important; + } + .gap-lg-1 { + gap: 0.25rem !important; + } + .gap-lg-2 { + gap: 0.5rem !important; + } + .gap-lg-3 { + gap: 1rem !important; + } + .gap-lg-4 { + gap: 1.5rem !important; + } + .gap-lg-5 { + gap: 3rem !important; + } + .text-lg-start { + text-align: left !important; + } + .text-lg-end { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; + } + .float-xl-end { + float: right !important; + } + .float-xl-none { + float: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-grid { + display: grid !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } + .order-xl-first { + order: -1 !important; + } + .order-xl-0 { + order: 0 !important; + } + .order-xl-1 { + order: 1 !important; + } + .order-xl-2 { + order: 2 !important; + } + .order-xl-3 { + order: 3 !important; + } + .order-xl-4 { + order: 4 !important; + } + .order-xl-5 { + order: 5 !important; + } + .order-xl-last { + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .me-xl-0 { + margin-right: 0 !important; + } + .me-xl-1 { + margin-right: 0.25rem !important; + } + .me-xl-2 { + margin-right: 0.5rem !important; + } + .me-xl-3 { + margin-right: 1rem !important; + } + .me-xl-4 { + margin-right: 1.5rem !important; + } + .me-xl-5 { + margin-right: 3rem !important; + } + .me-xl-auto { + margin-right: auto !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ms-xl-0 { + margin-left: 0 !important; + } + .ms-xl-1 { + margin-left: 0.25rem !important; + } + .ms-xl-2 { + margin-left: 0.5rem !important; + } + .ms-xl-3 { + margin-left: 1rem !important; + } + .ms-xl-4 { + margin-left: 1.5rem !important; + } + .ms-xl-5 { + margin-left: 3rem !important; + } + .ms-xl-auto { + margin-left: auto !important; + } + .p-xl-0 { + padding: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pe-xl-0 { + padding-right: 0 !important; + } + .pe-xl-1 { + padding-right: 0.25rem !important; + } + .pe-xl-2 { + padding-right: 0.5rem !important; + } + .pe-xl-3 { + padding-right: 1rem !important; + } + .pe-xl-4 { + padding-right: 1.5rem !important; + } + .pe-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .ps-xl-0 { + padding-left: 0 !important; + } + .ps-xl-1 { + padding-left: 0.25rem !important; + } + .ps-xl-2 { + padding-left: 0.5rem !important; + } + .ps-xl-3 { + padding-left: 1rem !important; + } + .ps-xl-4 { + padding-left: 1.5rem !important; + } + .ps-xl-5 { + padding-left: 3rem !important; + } + .gap-xl-0 { + gap: 0 !important; + } + .gap-xl-1 { + gap: 0.25rem !important; + } + .gap-xl-2 { + gap: 0.5rem !important; + } + .gap-xl-3 { + gap: 1rem !important; + } + .gap-xl-4 { + gap: 1.5rem !important; + } + .gap-xl-5 { + gap: 3rem !important; + } + .text-xl-start { + text-align: left !important; + } + .text-xl-end { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; + } + .float-xxl-end { + float: right !important; + } + .float-xxl-none { + float: none !important; + } + .d-xxl-inline { + display: inline !important; + } + .d-xxl-inline-block { + display: inline-block !important; + } + .d-xxl-block { + display: block !important; + } + .d-xxl-grid { + display: grid !important; + } + .d-xxl-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: flex !important; + } + .d-xxl-inline-flex { + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + flex: 1 1 auto !important; + } + .flex-xxl-row { + flex-direction: row !important; + } + .flex-xxl-column { + flex-direction: column !important; + } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xxl-start { + justify-content: flex-start !important; + } + .justify-content-xxl-end { + justify-content: flex-end !important; + } + .justify-content-xxl-center { + justify-content: center !important; + } + .justify-content-xxl-between { + justify-content: space-between !important; + } + .justify-content-xxl-around { + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .align-items-xxl-start { + align-items: flex-start !important; + } + .align-items-xxl-end { + align-items: flex-end !important; + } + .align-items-xxl-center { + align-items: center !important; + } + .align-items-xxl-baseline { + align-items: baseline !important; + } + .align-items-xxl-stretch { + align-items: stretch !important; + } + .align-content-xxl-start { + align-content: flex-start !important; + } + .align-content-xxl-end { + align-content: flex-end !important; + } + .align-content-xxl-center { + align-content: center !important; + } + .align-content-xxl-between { + align-content: space-between !important; + } + .align-content-xxl-around { + align-content: space-around !important; + } + .align-content-xxl-stretch { + align-content: stretch !important; + } + .align-self-xxl-auto { + align-self: auto !important; + } + .align-self-xxl-start { + align-self: flex-start !important; + } + .align-self-xxl-end { + align-self: flex-end !important; + } + .align-self-xxl-center { + align-self: center !important; + } + .align-self-xxl-baseline { + align-self: baseline !important; + } + .align-self-xxl-stretch { + align-self: stretch !important; + } + .order-xxl-first { + order: -1 !important; + } + .order-xxl-0 { + order: 0 !important; + } + .order-xxl-1 { + order: 1 !important; + } + .order-xxl-2 { + order: 2 !important; + } + .order-xxl-3 { + order: 3 !important; + } + .order-xxl-4 { + order: 4 !important; + } + .order-xxl-5 { + order: 5 !important; + } + .order-xxl-last { + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 0.25rem !important; + } + .m-xxl-2 { + margin: 0.5rem !important; + } + .m-xxl-3 { + margin: 1rem !important; + } + .m-xxl-4 { + margin: 1.5rem !important; + } + .m-xxl-5 { + margin: 3rem !important; + } + .m-xxl-auto { + margin: auto !important; + } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xxl-0 { + margin-top: 0 !important; + } + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + .mt-xxl-3 { + margin-top: 1rem !important; + } + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + .mt-xxl-5 { + margin-top: 3rem !important; + } + .mt-xxl-auto { + margin-top: auto !important; + } + .me-xxl-0 { + margin-right: 0 !important; + } + .me-xxl-1 { + margin-right: 0.25rem !important; + } + .me-xxl-2 { + margin-right: 0.5rem !important; + } + .me-xxl-3 { + margin-right: 1rem !important; + } + .me-xxl-4 { + margin-right: 1.5rem !important; + } + .me-xxl-5 { + margin-right: 3rem !important; + } + .me-xxl-auto { + margin-right: auto !important; + } + .mb-xxl-0 { + margin-bottom: 0 !important; + } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + .mb-xxl-auto { + margin-bottom: auto !important; + } + .ms-xxl-0 { + margin-left: 0 !important; + } + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + .ms-xxl-3 { + margin-left: 1rem !important; + } + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + .ms-xxl-5 { + margin-left: 3rem !important; + } + .ms-xxl-auto { + margin-left: auto !important; + } + .p-xxl-0 { + padding: 0 !important; + } + .p-xxl-1 { + padding: 0.25rem !important; + } + .p-xxl-2 { + padding: 0.5rem !important; + } + .p-xxl-3 { + padding: 1rem !important; + } + .p-xxl-4 { + padding: 1.5rem !important; + } + .p-xxl-5 { + padding: 3rem !important; + } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xxl-0 { + padding-top: 0 !important; + } + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + .pt-xxl-3 { + padding-top: 1rem !important; + } + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + .pt-xxl-5 { + padding-top: 3rem !important; + } + .pe-xxl-0 { + padding-right: 0 !important; + } + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + .pe-xxl-3 { + padding-right: 1rem !important; + } + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + .pe-xxl-5 { + padding-right: 3rem !important; + } + .pb-xxl-0 { + padding-bottom: 0 !important; + } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + .ps-xxl-0 { + padding-left: 0 !important; + } + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + .ps-xxl-3 { + padding-left: 1rem !important; + } + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + .ps-xxl-5 { + padding-left: 3rem !important; + } + .gap-xxl-0 { + gap: 0 !important; + } + .gap-xxl-1 { + gap: 0.25rem !important; + } + .gap-xxl-2 { + gap: 0.5rem !important; + } + .gap-xxl-3 { + gap: 1rem !important; + } + .gap-xxl-4 { + gap: 1.5rem !important; + } + .gap-xxl-5 { + gap: 3rem !important; + } + .text-xxl-start { + text-align: left !important; + } + .text-xxl-end { + text-align: right !important; + } + .text-xxl-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; + } + .fs-2 { + font-size: 2rem !important; + } + .fs-3 { + font-size: 1.75rem !important; + } + .fs-4 { + font-size: 1.5rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-grid { + display: grid !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } + .d-print-none { + display: none !important; + } +} +html, +body { + height: 100%; +} + +#layoutAuthentication { + display: flex; + flex-direction: column; + min-height: 100vh; +} +#layoutAuthentication #layoutAuthentication_content { + min-width: 0; + flex-grow: 1; +} +#layoutAuthentication #layoutAuthentication_footer { + min-width: 0; +} + +#layoutSidenav { + display: flex; +} +#layoutSidenav #layoutSidenav_nav { + flex-basis: 225px; + flex-shrink: 0; + transition: transform 0.15s ease-in-out; + z-index: 1038; + transform: translateX(-225px); +} +#layoutSidenav #layoutSidenav_content { + position: relative; + display: flex; + flex-direction: column; + justify-content: space-between; + min-width: 0; + flex-grow: 1; + min-height: calc(100vh - 56px); + margin-left: -225px; +} + +.sb-sidenav-toggled #layoutSidenav #layoutSidenav_nav { + transform: translateX(0); +} +.sb-sidenav-toggled #layoutSidenav #layoutSidenav_content:before { + content: ""; + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #000; + z-index: 1037; + opacity: 0.5; + transition: opacity 0.3s ease-in-out; +} + +@media (min-width: 992px) { + #layoutSidenav #layoutSidenav_nav { + transform: translateX(0); + } + #layoutSidenav #layoutSidenav_content { + margin-left: 0; + transition: margin 0.15s ease-in-out; + } + .sb-sidenav-toggled #layoutSidenav #layoutSidenav_nav { + transform: translateX(-225px); + } + .sb-sidenav-toggled #layoutSidenav #layoutSidenav_content { + margin-left: -225px; + } + .sb-sidenav-toggled #layoutSidenav #layoutSidenav_content:before { + display: none; + } +} +.sb-nav-fixed .sb-topnav { + z-index: 1039; +} +.sb-nav-fixed #layoutSidenav #layoutSidenav_nav { + width: 225px; + height: 100vh; + z-index: 1038; +} +.sb-nav-fixed #layoutSidenav #layoutSidenav_nav .sb-sidenav { + padding-top: 56px; +} +.sb-nav-fixed #layoutSidenav #layoutSidenav_nav .sb-sidenav .sb-sidenav-menu { + overflow-y: auto; +} +.sb-nav-fixed #layoutSidenav #layoutSidenav_content { + padding-left: 225px; + top: 56px; +} + +#layoutError { + display: flex; + flex-direction: column; + min-height: 100vh; +} +#layoutError #layoutError_content { + min-width: 0; + flex-grow: 1; +} +#layoutError #layoutError_footer { + min-width: 0; +} + +.img-error { + max-width: 20rem; +} + +.nav .nav-link .sb-nav-link-icon, +.sb-sidenav-menu .nav-link .sb-nav-link-icon { + margin-right: 0.5rem; +} + +.sb-topnav { + padding-left: 0; + height: 56px; + z-index: 1039; +} +.sb-topnav .navbar-brand { + width: 225px; + margin: 0; +} +.sb-topnav.navbar-dark #sidebarToggle { + color: rgba(255, 255, 255, 0.5); +} +.sb-topnav.navbar-light #sidebarToggle { + color: #212529; +} + +.sb-sidenav { + display: flex; + flex-direction: column; + height: 100%; + flex-wrap: nowrap; +} +.sb-sidenav .sb-sidenav-menu { + flex-grow: 1; +} +.sb-sidenav .sb-sidenav-menu .nav { + flex-direction: column; + flex-wrap: nowrap; +} +.sb-sidenav .sb-sidenav-menu .nav .sb-sidenav-menu-heading { + padding: 1.75rem 1rem 0.75rem; + font-size: 0.75rem; + font-weight: bold; + text-transform: uppercase; +} +.sb-sidenav .sb-sidenav-menu .nav .nav-link { + display: flex; + align-items: center; + padding-top: 0.75rem; + padding-bottom: 0.75rem; + position: relative; +} +.sb-sidenav .sb-sidenav-menu .nav .nav-link .sb-nav-link-icon { + font-size: 0.9rem; +} +.sb-sidenav .sb-sidenav-menu .nav .nav-link .sb-sidenav-collapse-arrow { + display: inline-block; + margin-left: auto; + transition: transform 0.15s ease; +} +.sb-sidenav .sb-sidenav-menu .nav .nav-link.collapsed .sb-sidenav-collapse-arrow { + transform: rotate(-90deg); +} +.sb-sidenav .sb-sidenav-menu .nav .sb-sidenav-menu-nested { + margin-left: 1.5rem; + flex-direction: column; +} +.sb-sidenav .sb-sidenav-footer { + padding: 0.75rem; + flex-shrink: 0; +} + +.sb-sidenav-dark { + background-color: #212529; + color: rgba(255, 255, 255, 0.5); +} +.sb-sidenav-dark .sb-sidenav-menu .sb-sidenav-menu-heading { + color: rgba(255, 255, 255, 0.25); +} +.sb-sidenav-dark .sb-sidenav-menu .nav-link { + color: rgba(255, 255, 255, 0.5); +} +.sb-sidenav-dark .sb-sidenav-menu .nav-link .sb-nav-link-icon { + color: rgba(255, 255, 255, 0.25); +} +.sb-sidenav-dark .sb-sidenav-menu .nav-link .sb-sidenav-collapse-arrow { + color: rgba(255, 255, 255, 0.25); +} +.sb-sidenav-dark .sb-sidenav-menu .nav-link:hover { + color: #fff; +} +.sb-sidenav-dark .sb-sidenav-menu .nav-link.active { + color: #fff; +} +.sb-sidenav-dark .sb-sidenav-menu .nav-link.active .sb-nav-link-icon { + color: #fff; +} +.sb-sidenav-dark .sb-sidenav-footer { + background-color: #343a40; +} + +.sb-sidenav-light { + background-color: #f8f9fa; + color: #212529; +} +.sb-sidenav-light .sb-sidenav-menu .sb-sidenav-menu-heading { + color: #adb5bd; +} +.sb-sidenav-light .sb-sidenav-menu .nav-link { + color: #212529; +} +.sb-sidenav-light .sb-sidenav-menu .nav-link .sb-nav-link-icon { + color: #adb5bd; +} +.sb-sidenav-light .sb-sidenav-menu .nav-link .sb-sidenav-collapse-arrow { + color: #adb5bd; +} +.sb-sidenav-light .sb-sidenav-menu .nav-link:hover { + color: #0d6efd; +} +.sb-sidenav-light .sb-sidenav-menu .nav-link.active { + color: #0d6efd; +} +.sb-sidenav-light .sb-sidenav-menu .nav-link.active .sb-nav-link-icon { + color: #0d6efd; +} +.sb-sidenav-light .sb-sidenav-footer { + background-color: #e9ecef; +} + +.datatable-wrapper .datatable-container { + font-size: 0.875rem; +} + +.datatable-wrapper.no-header .datatable-container { + border-top: none; +} + +.datatable-wrapper.no-footer .datatable-container { + border-bottom: none; +} + +.datatable-top { + padding: 0 0 1rem; +} + +.datatable-bottom { + padding: 0; +} + +.datatable-top > nav:first-child, +.datatable-top > div:first-child, +.datatable-bottom > nav:first-child, +.datatable-bottom > div:first-child { + float: left; +} + +.datatable-top > nav:last-child, +.datatable-top > div:last-child, +.datatable-bottom > nav:last-child, +.datatable-bottom > div:last-child { + float: right; +} + +.datatable-selector { + width: auto; + display: inline-block; + padding-left: 1.125rem; + padding-right: 2.125rem; + margin-right: 0.25rem; +} + +.datatable-info { + margin: 7px 0; +} + +/* PAGER */ +.datatable-pagination a:hover { + background-color: #e9ecef; +} + +.datatable-pagination .active a, +.datatable-pagination .active a:focus, +.datatable-pagination .active a:hover { + background-color: #0d6efd; +} + +.datatable-pagination .ellipsis a, +.datatable-pagination .disabled a, +.datatable-pagination .disabled a:focus, +.datatable-pagination .disabled a:hover { + cursor: not-allowed; +} + +.datatable-pagination .disabled a, +.datatable-pagination .disabled a:focus, +.datatable-pagination .disabled a:hover { + cursor: not-allowed; + opacity: 0.4; +} + +.datatable-pagination .pager a { + font-weight: bold; +} + +/* TABLE */ +.datatable-table { + border-collapse: collapse; +} + +.datatable-table > tbody > tr > td, +.datatable-table > tbody > tr > th, +.datatable-table > tfoot > tr > td, +.datatable-table > tfoot > tr > th, +.datatable-table > thead > tr > td, +.datatable-table > thead > tr > th { + vertical-align: top; + padding: 0.5rem 0.5rem; +} + +.datatable-table > thead > tr > th { + vertical-align: bottom; + text-align: left; + border-bottom: none; +} + +.datatable-table > tfoot > tr > th { + vertical-align: bottom; + text-align: left; +} + +.datatable-table th { + vertical-align: bottom; + text-align: left; +} + +.datatable-table th a { + text-decoration: none; + color: inherit; +} + +.datatable-sorter { + display: inline-block; + height: 100%; + position: relative; + width: 100%; + padding-right: 1rem; +} + +.datatable-sorter::before, +.datatable-sorter::after { + content: ""; + height: 0; + width: 0; + position: absolute; + right: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + opacity: 0.2; +} + +.datatable-sorter::before { + bottom: 4px; +} + +.datatable-sorter::after { + top: 0px; +} + +.asc .datatable-sorter::after, +.desc .datatable-sorter::before { + opacity: 0.6; +} + +.datatables-empty { + text-align: center; +} + +.datatable-top::after, +.datatable-bottom::after { + clear: both; + content: " "; + display: table; +} + +.datatable-pagination li.datatable-hidden { + visibility: visible; +} + +.btn-datatable { + height: 20px !important; + width: 20px !important; + font-size: 0.75rem; + border-radius: 0.375rem !important; +} + +/* Menambahkan gaya untuk item menu yang aktif */ +.nav-link.active { + color: #ffffff !important; /* Mengubah warna teks */ + background-color: #0542cc; /* Memberi latar belakang biru pada item aktif */ +} + +.sb-sidenav-menu-heading.active { + color: #0542cc; /* Mengubah warna heading menu aktif */ +} +.search-bar { + padding: 5px; /* Reduced padding */ + display: flex; + align-items: center; +} + +.search-input { + width: 80%; /* Reduced width */ + padding: 6px; /* Reduced padding */ + border-radius: 4px 0 0 4px; + border: 1px solid #ddd; + outline: none; + font-size: 0.9em; /* Slightly smaller font */ +} + +.search-button { + padding: 6px; /* Reduced padding */ + border: 1px solid #ddd; + border-left: none; + border-radius: 0 4px 4px 0; + background-color: #fff; + cursor: pointer; +} + +.search-button .fa-search { + color: #555; + font-size: 0.9em; /* Smaller icon size */ +} +.custom-badge { + position: absolute; + top: -2px; /* Adjust this to position the dot closer to the top */ + right: 9px; /* Adjust this to position the dot closer to the right */ + border-radius: 100%; + background-color: red; + font-size: 10px; +} diff --git a/src/assets/icon/index.js b/src/assets/icon/index.js new file mode 100644 index 0000000..8187e5d --- /dev/null +++ b/src/assets/icon/index.js @@ -0,0 +1,9 @@ +import OCR from './ocr.png'; +import SmsAnnounce from './sms.png'; +import OTP from './sms-otp.png' + +export { + OCR, + SmsAnnounce, + OTP +} \ No newline at end of file diff --git a/src/assets/icon/ocr.png b/src/assets/icon/ocr.png new file mode 100644 index 0000000000000000000000000000000000000000..27513ad6e462c56718a25c112742023d55f78a7a GIT binary patch literal 513 zcmV+c0{;DpP)fD0IufDuF-2^9bpPy(R?N-z}=E?hv!5)kD^=m0wK4J7OxW(-MC zlmwLcz>~F}^{!^dyYq+e&3dE0<-yCusOsE!A9wCLuNXrVMb)>3>~OFb)a%^dU#abM z2zP6z473OYeU#jqro2|hIed57iR^9l_j>iwsJ~P`?1~GcC;;UxU66?93{KUy5*3qh z?gCjhoD&_%7!-ll8a0h}E^*@S&Eqj@902q!(zng_T zC^|M*r(_r#DO+xJuRE`wWy+NqC+IN|00000NkvXXu0mjf DvIEvx literal 0 HcmV?d00001 diff --git a/src/assets/icon/sms-otp.png b/src/assets/icon/sms-otp.png new file mode 100644 index 0000000000000000000000000000000000000000..a6241a52301d6bbe8dffbc6fd87cc16ca0a700fd GIT binary patch literal 899 zcmV-}1AP36P) z+dvTQo{_M#b54MK0$>$GOd5S915#-wYMF=75IFwf?~H^;1JTu8jybr$zU+Lxq9 zfTiL{FJx;~mT;lXXSqHVSVHm(Bd;d+=Pcp-+aoomJ3|!{)NSea;B?5}sQoTZ=+rM`Y791F2C?qDV0Rp)vP$hmDNq+It+dA6a zFQ;a}h^!4%UNZ&E2(e|gj=1`t%F65YR681EItpthk-7!vPa8nKO?YaB}XOSQ;RbFj!Nx zM?R>mqK2~AP0++z&$Q9ldGuM95dFaD3Z#T-#dx&F`h7+u1FeD?zLEv_W%rJ4Bj=d?gXDIv|0@zH~kqfx;|HL Zi@!%{yPZJOe~P)jaxK;8KDs9!x;O( zcqNxohMBMD8v6LoTsCS7p8~<4XCT z&787)`Hgf<_sv#k@<_^_=;#Tv2~iV6B#Sjx>M?cX#mCcwr(?E_AceXx$HBtC{%U{9 xf!J2^wM_1k8Meg9ye;uc9%Qf?#chiJHy`(~hj|d-jW_@R002ovPDHLkV1g6nscHZK literal 0 HcmV?d00001 diff --git a/src/assets/images/Dummy-Ktp.png b/src/assets/images/Dummy-Ktp.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5aa96e3b960555929f69edc166e78eaaec0905 GIT binary patch literal 108061 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
  • #@65 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/Logo.png b/src/assets/images/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..45d418424a199acdc4b39c55ea5116524fdc2eec GIT binary patch literal 7890 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/Profile.jpeg b/src/assets/images/Profile.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e62e385344e8ce8a2c25c1035b4c4b439c77bb67 GIT binary patch literal 6862 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/dashboard-img.png b/src/assets/images/dashboard-img.png new file mode 100644 index 0000000000000000000000000000000000000000..b503383451fe99a2acca843fc240d61babf6679e GIT binary patch literal 14739 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 { + useEffect(() => { + // Menambahkan FontAwesome script secara dinamis + const fontAwesomeScript = document.createElement('script'); + fontAwesomeScript.src = "https://use.fontawesome.com/releases/v6.3.0/js/all.js"; + fontAwesomeScript.crossOrigin = "anonymous"; + fontAwesomeScript.async = true; + document.body.appendChild(fontAwesomeScript); + + // Menambahkan Chart.js script secara dinamis + const chartJsScript = document.createElement('script'); + chartJsScript.src = "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.js"; + chartJsScript.crossOrigin = "anonymous"; + chartJsScript.async = true; + document.body.appendChild(chartJsScript); + + // Menambahkan Simple DataTables JS script secara dinamis + const simpleDatatablesScript = document.createElement('script'); + simpleDatatablesScript.src = "https://cdn.jsdelivr.net/npm/simple-datatables@7.1.2/dist/umd/simple-datatables.min.js"; + simpleDatatablesScript.crossOrigin = "anonymous"; + simpleDatatablesScript.async = true; + document.body.appendChild(simpleDatatablesScript); + + // Fungsi untuk menangani event DOMContentLoaded + const handleDOMContentLoaded = () => { + console.log('JS Activated'); + + // Toggle the side navigation + const sidebarToggle = document.body.querySelector('#sidebarToggle'); + if (sidebarToggle) { + sidebarToggle.addEventListener('click', event => { + event.preventDefault(); + document.body.classList.toggle('sb-sidenav-toggled'); + localStorage.setItem('sb|sidebar-toggle', document.body.classList.contains('sb-sidenav-toggled')); + }); + } + }; + + // Menunggu dokumen siap sebelum menambahkan event listener + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', handleDOMContentLoaded); + } else { + handleDOMContentLoaded(); + } + + // Cleanup function untuk menghapus script dan event listener saat komponen unmount + return () => { + document.body.removeChild(fontAwesomeScript); + document.body.removeChild(chartJsScript); + document.body.removeChild(simpleDatatablesScript); + document.removeEventListener('DOMContentLoaded', handleDOMContentLoaded); + }; + }, []); + + return ( + <> + {/* Link CSS untuk Simple DataTables */} + + + ); +}; + +export default ExternalScripts; diff --git a/src/assets/js/scripts.js b/src/assets/js/scripts.js new file mode 100644 index 0000000..f5ea2cb --- /dev/null +++ b/src/assets/js/scripts.js @@ -0,0 +1,28 @@ +/*! + * Start Bootstrap - SB Admin v7.0.7 (https://startbootstrap.com/template/sb-admin) + * Copyright 2013-2023 Start Bootstrap + * Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-sb-admin/blob/master/LICENSE) + */ + // +// Scripts +// + +window.addEventListener('DOMContentLoaded', event => { + + console.log('JS Activated'); + + // Toggle the side navigation + const sidebarToggle = document.body.querySelector('#sidebarToggle'); + if (sidebarToggle) { + // Uncomment Below to persist sidebar toggle between refreshes + // if (localStorage.getItem('sb|sidebar-toggle') === 'true') { + // document.body.classList.toggle('sb-sidenav-toggled'); + // } + sidebarToggle.addEventListener('click', event => { + event.preventDefault(); + document.body.classList.toggle('sb-sidenav-toggled'); + localStorage.setItem('sb|sidebar-toggle', document.body.classList.contains('sb-sidenav-toggled')); + }); + } + +}); diff --git a/src/components/Footer.jsx b/src/components/Footer.jsx new file mode 100644 index 0000000..495fc8c --- /dev/null +++ b/src/components/Footer.jsx @@ -0,0 +1,19 @@ +import React from 'react'; + +const Footer = () => { + return ( +

    + ); +}; + +export default Footer; diff --git a/src/components/Main.jsx b/src/components/Main.jsx new file mode 100644 index 0000000..b91f337 --- /dev/null +++ b/src/components/Main.jsx @@ -0,0 +1,16 @@ +import React from 'react'; + +const Main = () => { + return ( +
    +
    +

    Dashboard

    +
      +
    1. Dashboard
    2. +
    +
    +
    + ); +}; + +export default Main; diff --git a/src/components/Navbar.jsx b/src/components/Navbar.jsx new file mode 100644 index 0000000..51965b3 --- /dev/null +++ b/src/components/Navbar.jsx @@ -0,0 +1,165 @@ +import React, { useState, useEffect } from 'react'; +import { Logo } from '../assets/images'; +import { Link } from 'react-router-dom'; + +const Navbar = () => { + const messageCount = 5; // Example count for messages + const notificationCount = 3; // Example count for notifications + + const [isMobile, setIsMobile] = useState(false); + + useEffect(() => { + const handleResize = () => { + setIsMobile(window.innerWidth < 600); + }; + + // Check the initial screen size + handleResize(); + + // Add event listener for window resize + window.addEventListener('resize', handleResize); + + // Cleanup event listener on component unmount + return () => { + window.removeEventListener('resize', handleResize); + }; + }, []); + + return ( + + ); +}; + +export default Navbar; diff --git a/src/components/Sidebar/DeepMenu.jsx b/src/components/Sidebar/DeepMenu.jsx new file mode 100644 index 0000000..cc6fb5a --- /dev/null +++ b/src/components/Sidebar/DeepMenu.jsx @@ -0,0 +1,50 @@ +import React from 'react'; +import DeeperMenu from './DeeperMenu'; + +const DeepMenu = ({ name, link, target, subMenus, activeMenu, onMenuClick }) => { + return ( + <> + {subMenus ? ( + + ) : ( + onMenuClick(name)} // Menangani klik pada DeepMenu + > + {name} + + )} + + {subMenus && ( +
    + +
    + )} + + ); +}; + +export default DeepMenu; diff --git a/src/components/Sidebar/DeeperMenu.jsx b/src/components/Sidebar/DeeperMenu.jsx new file mode 100644 index 0000000..0652262 --- /dev/null +++ b/src/components/Sidebar/DeeperMenu.jsx @@ -0,0 +1,15 @@ +import { Link } from 'react-router-dom'; + +const DeeperMenu = ({ name, link, target, activeMenu, onMenuClick }) => { + return ( + onMenuClick(name)} // Menangani klik pada DeeperMenu + > + {name} + + ); +}; + +export default DeeperMenu; diff --git a/src/components/Sidebar/Menu.jsx b/src/components/Sidebar/Menu.jsx new file mode 100644 index 0000000..44fe002 --- /dev/null +++ b/src/components/Sidebar/Menu.jsx @@ -0,0 +1,70 @@ +import React, { useState } from 'react'; +import { Link } from 'react-router-dom'; +import SubMenu from './SubMenu'; +import dataMenu from './dataMenu'; + +const Menu = ({ searchQuery }) => { + const [activeMenu, setActiveMenu] = useState(null); + + const handleMenuClick = (name) => { + setActiveMenu(name); // Menyimpan menu yang aktif + }; + + const filteredMenu = dataMenu.map((menuSection) => { + const filteredItems = menuSection.items.filter((item) => { + const itemName = item.name.toLowerCase(); + const matches = itemName.includes(searchQuery); + const subMatches = item.subMenus?.some((subMenu) => + subMenu.name.toLowerCase().includes(searchQuery) + ); + return matches || subMatches; + }); + + return { + ...menuSection, + items: filteredItems, + }; + }).filter(section => section.items.length > 0); // Filter out sections without items + + return ( +
    +
    + {filteredMenu.map((menuSection, index) => ( + + {menuSection.items.map((item, idx) => ( + // Jika item memiliki submenu, render SubMenu + item.subMenus ? ( + + subMenu.name.toLowerCase().includes(searchQuery) + )} + activeMenu={activeMenu} + onMenuClick={handleMenuClick} + /> + ) : ( + // Jika item tidak memiliki submenu, gunakan untuk navigasi + handleMenuClick(item.name)} // Memperbarui state activeMenu saat item dipilih + > +
    + {item.iconClass && } +
    + {item.name} + + ) + ))} +
    + ))} +
    +
    + ); +}; + +export default Menu; diff --git a/src/components/Sidebar/Profile.jsx b/src/components/Sidebar/Profile.jsx new file mode 100644 index 0000000..ce6d258 --- /dev/null +++ b/src/components/Sidebar/Profile.jsx @@ -0,0 +1,37 @@ +// src/components/Profile.js +import React from 'react'; +import { ProfileImage } from '../../assets/images'; + +const Profile = () => ( +
    + Profile + Alexander Pierce +
    +); + +export default Profile; + + +const styles = { + container: { + padding: '10px', + display: 'flex', + alignItems: 'center', + marginTop: '2vh' + }, + image: { + width: '40px', + height: '40px', + borderRadius: '50%', + marginRight: '10px', + }, + name: { + fontWeight: 'bold', + }, +}; + diff --git a/src/components/Sidebar/SearchBar.jsx b/src/components/Sidebar/SearchBar.jsx new file mode 100644 index 0000000..64093fe --- /dev/null +++ b/src/components/Sidebar/SearchBar.jsx @@ -0,0 +1,50 @@ +// src/components/SearchBar.js +import React from 'react'; + + +const SearchBar = ({ onSearch }) => ( +
    + onSearch(e.target.value)} + style={styles.input} + /> + +
    +); + +export default SearchBar; + + +const styles = { + container: { + padding: '0.1rem', + display: 'flex', + alignItems: 'center', + margin: '0 0.5rem 0 0.6rem' + }, + input: { + width: '100%', + padding: '6px', + borderRadius: '4px 0 0 4px', + border: '1px solid #ddd', + outline: 'none', + fontSize: '0.9em', + }, + button: { + padding: '6px', + border: '1px solid #ddd', + borderLeft: 'none', + borderRadius: '0 4px 4px 0', + backgroundColor: '#fff', + cursor: 'pointer', + }, + icon: { + color: '#555', + fontSize: '0.9em', + }, +}; diff --git a/src/components/Sidebar/Sidebar.jsx b/src/components/Sidebar/Sidebar.jsx new file mode 100644 index 0000000..70f61e7 --- /dev/null +++ b/src/components/Sidebar/Sidebar.jsx @@ -0,0 +1,25 @@ +import React, { useState } from 'react'; +import Menu from './Menu'; +import Profile from './Profile'; +import SearchBar from './SearchBar'; + +const Sidebar = () => { + const [searchQuery, setSearchQuery] = useState(''); + + return ( +
    + +
    + ); +}; + + +export default Sidebar; diff --git a/src/components/Sidebar/SubMenu.jsx b/src/components/Sidebar/SubMenu.jsx new file mode 100644 index 0000000..0d88a98 --- /dev/null +++ b/src/components/Sidebar/SubMenu.jsx @@ -0,0 +1,41 @@ +import React from 'react'; +import DeepMenu from './DeepMenu'; + +const SubMenu = ({ heading, target, iconClass, subMenus, activeMenu, onMenuClick }) => { + return ( + <> +
    {heading}
    + +
    + +
    + + ); +}; + +export default SubMenu; diff --git a/src/components/Sidebar/dataMenu.js b/src/components/Sidebar/dataMenu.js new file mode 100644 index 0000000..10f7077 --- /dev/null +++ b/src/components/Sidebar/dataMenu.js @@ -0,0 +1,263 @@ +// src/components/dataMenu.js + +const dataMenu = [ + { + items: [ + { + name: 'Main Dashboard', // Changed the name + target: 'collapseHome', + subMenus: [ + { + name: 'Getting Started', + link: '/getting-started' + }, + { + name: 'Dashboard Overview', // Changed the name + link: '/dashboard' + }, + { + name: 'Application Settings', // Changed the name + link: '/application' + }, + ], + }, + ], + iconClass: 'fas fa-tachometer-alt', + }, + { + items: [ + { + name: 'Biometric Systems', // Changed the name + target: 'collapseBiometric', + subMenus: [ + { + name: 'Face Recognition System', // Changed the name + target: 'collapseFaceRecog', + subMenus: [ + { name: 'Verify Identity', link: '/face-verify'}, // Changed the name + { name: 'Summary Report', link: '/face-summary'}, // Changed the name + { name: 'Transaction Log', link: '/face-transaction'}, // Changed the name + ], + }, + { + name: 'KTP OCR', // Changed the name + target: 'collapseOcrKtp', + subMenus: [ + { name: 'Verify KTP', link: '/ktp-verify'}, // Changed the name + { name: 'Manage Basic Auth', link: '/ktp-manage'}, + { name: 'Summary of KTPs', link: '/ktp-summary'}, // Changed the name + { name: 'KTP Transaction History', link: '/ktp-transaction'}, // Changed the name + ], + }, + { + name: 'NPWP OCR', // Changed the name + target: 'collapseOcrNpwp', + subMenus: [ + { name: 'Verify NPWP', link: '/npwp-verify'}, // Changed the name + { name: 'NPWP Summary', link: '/npwp-summary'}, // Changed the name + { name: 'NPWP Transaction Log', link: '/npwp-transaction'}, // Changed the name + ], + }, + { + name: 'SIM OCR', // Changed the name + target: 'collapseOcrSim', + subMenus: [ + { name: 'Verify SIM', link: '/sim-verify'}, // Changed the name + { name: 'SIM Summary', link: '/sim-summary'}, // Changed the name + { name: 'SIM Transaction Log', link: '/sim-transaction'}, // Changed the name + ], + }, + { + name: 'Document OCR', // Changed the name + target: 'collapseOcrDocument', + subMenus: [ + { name: 'Verify Document', link: '/document-verify'}, // Changed the name + { name: 'Document Summary', link: '/document-summary'}, // Changed the name + { name: 'Document Transaction History', link: '/document-transaction'}, // Changed the name + ], + }, + ], + }, + ], + iconClass: 'fas fa-user', + }, + { + items: [ + { + name: 'SMS Services', // Changed the name + target: 'collapseSms', + subMenus: [ + { + name: 'SMS Verification', // Changed the name + link: '/sms-verify' + }, + { + name: 'SMS OTP Management', // Changed the name + target: 'collapseSmsOtp', + subMenus: [ + { name: 'Settings', link: '/sms-otp-settings'}, + { name: 'Summary Report', link: '/sms-otp-summary'}, // Changed the name + { name: 'Transaction Log', link: '/sms-otp-transaction'}, // Changed the name + { name: 'Detail View', link: '/sms-otp-detail'}, // Changed the name + ], + }, + { + name: 'SMS Announcements', // Changed the name + target: 'collapseAnnouncement', + subMenus: [ + { name: 'Bulk Message', link: '/sms-announcement-bulk'}, // Changed the name + { name: 'Announcement Summary', link: '/sms-announcement-summary'}, // Changed the name + { name: 'Transaction Logs', link: '/sms-announcement-transaction'}, + ], + }, + { + name: 'Blocked Numbers', // Changed the name + link: '/sms-block' + }, + { + name: 'SMS Anomaly Report', // Changed the name + link: '/sms-anomaly' + }, + ], + }, + ], + iconClass: 'fas fa-phone', + }, + { + items: [ + { + name: 'WhatsApp Communication', // Changed the name + target: 'collapseWa', + subMenus: [ + { + name: 'Verify WhatsApp Account', // Changed the name + link: '/wa-verify' + }, + { + name: 'WhatsApp Management', // Changed the name + target: 'collapseWaManage', + subMenus: [ + { name: 'Register Business Account', link: '/wa-manage-register'}, // Changed the name + { name: 'WhatsApp Profile Settings', link: '/wa-manage-profile'}, // Changed the name + { name: 'Message Templates', link: '/wa-manage-template'}, // Changed the name + { name: 'Integration Settings', link: '/wa-manage-integration'}, // Changed the name + ], + }, + { + name: 'WhatsApp Activity', // Changed the name + target: 'collapseActivity', + subMenus: [ + { name: 'Settings', link: '/wa-activity-settings'}, // Changed the name + { name: 'Activity Summary', link: '/wa-activity-summary'}, // Changed the name + { name: 'Transaction Logs', link: '/wa-activity-transaction'}, + { name: 'Bulk Sending', link: '/wa-activity-bulk'}, // Changed the name + ], + }, + { + name: 'WhatsApp Inbox', // Changed the name + link: '/wa-inbox' + }, + { + name: 'Blocked WhatsApp Numbers', // Changed the name + link: '/wa-block' + }, + ], + }, + ], + iconClass: 'fab fa-whatsapp', + }, + { + items: [ + { + name: 'Identity Verification', // Changed the name + target: 'collapseIdentify', + subMenus: [ + { + name: 'Electronic Certificate Verification', // Changed the name + target: 'collapseElectro', + subMenus: [ + { name: 'Verify Certificate', link: '/identify-electro-verify'}, // Changed the name + { name: 'Transaction Logs', link: '/identify-electro-transaction'}, + ], + }, + { + name: 'NPWP Verification', // Changed the name + target: 'collapseIdentifyNpwp', + subMenus: [ + { name: 'Transaction Logs', link: '/identify-npwp-transaction'} + ], + }, + { + name: 'Tax Number Verification', // Changed the name + target: 'collapseTax', + subMenus: [ + { name: 'Verify Tax Number', link: '/identify-tax-verify'}, // Changed the name + { name: 'Transaction Logs', link: '/identify-tax-transaction'} + ], + }, + { + name: 'Income Verification', // Changed the name + target: 'collapseIncome', + subMenus: [ + { name: 'Verify Income', link: '/identify-income-verify'}, // Changed the name + { name: 'Transaction Logs', link: '/identify-income-transaction'} + ], + }, + { + name: 'ID Verification', // Changed the name + target: 'collapseIdVerification', + subMenus: [ + { name: 'Verify ID', link: '/identify-id-verify'}, // Changed the name + { name: 'Transaction Logs', link: '/identify-id-transaction'} + ], + }, + ], + }, + ], + iconClass: 'fas fa-edit', + }, + { + items: [ + { + name: 'Watchlist Management', // Changed the name + target: 'collapseWatchlist', + subMenus: [ + { + name: 'Watchlist Screening', // Changed the name + target: 'collapseScreening', + subMenus: [ + { name: 'Verify Watchlist', link: '/watchlist-screening-verify'}, // Changed the name + { name: 'Admin Settings', link: '/watchlist-screening-admin'}, + { name: 'Search Watchlist', link: '/watchlist-screening-search'}, // Changed the name + { name: 'Transaction Logs', link: '/watchlist-screening-transaction'}, + { name: 'Monitor Watchlist', link: '/watchlist-screening-monitor'}, + ], + }, + ], + }, + ], + iconClass: 'fas fa-calendar', + }, + { + items: [ + { + name: 'File Management', // Changed the name + target: 'collapseFiles', + subMenus: [ + { + name: 'File Screening', // Changed the name + target: 'collapseScreening', + subMenus: [ + { name: 'Verify File', link: '/files-screening-verify'}, // Changed the name + { name: 'Search Files', link: '/files-screening-search'}, // Changed the name + { name: 'File Management Settings', link: '/files-screening-admin'}, + ], + }, + ], + }, + ], + iconClass: 'fas fa-cogs', + } +]; + +export default dataMenu; diff --git a/src/components/index.js b/src/components/index.js new file mode 100644 index 0000000..9e170ca --- /dev/null +++ b/src/components/index.js @@ -0,0 +1,11 @@ +import Navbar from "./Navbar"; +import Sidebar from "./Sidebar/Sidebar"; +import Main from "./Main"; +import Footer from "./Footer"; + +export { + Navbar, + Sidebar, + Main, + Footer +} \ No newline at end of file diff --git a/src/index.css b/src/index.css deleted file mode 100644 index ec2585e..0000000 --- a/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/src/index.js b/src/index.js index d563c0f..fae780b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,17 +1,17 @@ import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; +import ReactDOM from 'react-dom'; +import './assets/css/app.css'; import App from './App'; -import reportWebVitals from './reportWebVitals'; +import 'bootstrap/dist/css/bootstrap.min.css'; +import 'bootstrap/dist/js/bootstrap.bundle.min.js'; +import ExternalScripts from './assets/js/externalScript'; // Mengimpor komponen ExternalScripts -const root = ReactDOM.createRoot(document.getElementById('root')); -root.render( +// Menyisipkan ExternalScripts di luar App +ReactDOM.render( + {/* Menambahkan ExternalScripts ke dalam aplikasi */} + - + , + document.getElementById('root') ); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 9dfc1c0..0000000 --- a/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/reportWebVitals.js b/src/reportWebVitals.js deleted file mode 100644 index 5253d3a..0000000 --- a/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/src/screens/Biometric/FaceRecognition/Section/Compare.jsx b/src/screens/Biometric/FaceRecognition/Section/Compare.jsx new file mode 100644 index 0000000..3e8d6db --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/Section/Compare.jsx @@ -0,0 +1,720 @@ +import React, { useState, useRef, useEffect } from 'react' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faChevronLeft, faChevronDown, faTimes, faImage } from '@fortawesome/free-solid-svg-icons'; +import { FileUploader } from 'react-drag-drop-files'; +import Select from 'react-select' +import { height } from '@fortawesome/free-solid-svg-icons/fa0'; + +const Compare = () => { + + const BASE_URL = process.env.REACT_APP_BASE_URL + const API_KEY = process.env.REACT_APP_API_KEY + + const [isSelectOpen, setIsSelectOpen] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); + const [selectedImageName, setSelectedImageName] = useState(''); + const [selectedCompareImageName, setSelectedCompareImageName] = useState(''); + const fileInputRef = useRef(null); + const fileCompareInputRef = useRef(null); + const [showResult, setShowResult] = useState(false); + const [applicationId, setApplicationId] = useState(''); + const [selectedQuota, setSelectedQuota] = useState(0); + const [thresholdId, setTresholdId] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const [imageUrl, setImageUrl] = useState(''); + const [imageCompareUrl, setImageCompareUrl] = useState(''); + const [verified, setVerified] = useState(null); + + const fileTypes = ["JPG", "JPEG", "PNG"]; + const [file, setFile] = useState(null); // For the first image + const [compareFile, setCompareFile] = useState(null); // For the second imag + + const [applicationIds, setApplicationIds] = useState([]); + const [inputValueApplication, setInputValueApplication] = useState(''); // Controlled input value for Application ID + + const thresholdIds = [ + { id: 1, name: 'cosine', displayName: 'Basic' }, + { id: 2, name: 'euclidean', displayName: 'Medium' }, + { id: 3, name: 'euclidean_l2', displayName: 'High' }, + ]; + + const [applicationError, setApplicationError] = useState(''); + const [thresholdError, setThresholdError] = useState(''); + const [uploadError, setUploadError] = useState(''); + const [compareUploadError, setCompareUploadError] = useState(''); + + useEffect(() => { + const fetchApplicationIds = async () => { + try { + setIsLoading(true) + + const url = `${BASE_URL}/application/list`; + console.log('Fetching URL:', url); // Log the URL + + const response = await fetch(url, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, + }, + }); + + const data = await response.json(); + + if (data.status_code === 200) { + const ids = data.details.data.map(app => app.id); + console.log('Application Id: ' + ids); // Log the IDs + setApplicationIds(data.details.data); // Update state with the fetched data + } else { + console.error('Failed to fetch data:', data.details.message); + } + } catch (error) { + console.error('Error fetching application IDs:', error); + } finally { + setIsLoading(false) + } + }; + + fetchApplicationIds(); + }, []); + + const handleApplicationChange = (selectedOption) => { + if (selectedOption) { + const selectedId = selectedOption.value; + const selectedApp = applicationIds.find(app => app.id === parseInt(selectedId)); + if (selectedApp) { + setApplicationId(selectedId); + setSelectedQuota(selectedApp.quota); // Set the selected quota + } + } + }; + + + const handleInputChangeApplication = (newInputValue) => { + // Limit input to 15 characters for Application ID + if (newInputValue.length <= 15) { + setInputValueApplication(newInputValue); + } + }; + + const handleFocus = () => { + setIsSelectOpen(true); + }; + + const handleBlur = () => { + setIsSelectOpen(false); + }; + + const handleImageUpload = (file) => { + if (file && fileTypes.includes(file.name.split('.').pop().toUpperCase())) { + setSelectedImageName(file.name); + setFile(file); // Store the file directly in state + setUploadError(''); // Clear error if valid + } + }; + + const handleCompareImageUpload = (file) => { + if (file && fileTypes.includes(file.name.split('.').pop().toUpperCase())) { + setSelectedCompareImageName(file.name); + setCompareFile(file); // Store the compare file directly in state + setCompareUploadError(''); // Clear error if valid + } + }; + + const handleImageCancel = () => { + setSelectedImageName(''); + setImageUrl(''); + if (fileInputRef.current) fileInputRef.current.value = ''; + }; + + const handleCompareImageCancel = () => { + setSelectedCompareImageName(''); + setImageCompareUrl(''); + if (fileCompareInputRef.current) fileCompareInputRef.current.value = ''; + }; + + const handleCheckClick = async () => { + // Reset error messages + setApplicationError(''); + setThresholdError(''); + setUploadError(''); + setCompareUploadError(''); + setErrorMessage(''); + + // Initialize a flag to check for errors + let hasError = false; + + // Validate Application ID + if (!applicationId) { + setApplicationError('Please select an Application ID before compare.'); + hasError = true; + } + + // Validate Threshold ID + const selectedThreshold = thresholdIds.find(threshold => threshold.name === thresholdId)?.name; + if (!selectedThreshold) { + setThresholdError('Invalid threshold selected.'); + hasError = true; + } + + // Validate Image Uploads + if (!selectedImageName) { + setUploadError('Please upload a face photo before compare.'); + hasError = true; + } + + if (!selectedCompareImageName) { + setCompareUploadError('Please upload a compare face photo before compare.'); + hasError = true; + } + + // If there are any errors, return early + if (hasError) { + return; + } + + // Prepare FormData and log inputs + const formData = new FormData(); + formData.append('application_id', applicationId); + formData.append('file1', file); // Use the state variable directly + formData.append('file2', compareFile); // Use the state variable directly + formData.append('threshold', selectedThreshold); + + // Log the inputs + console.log('Inputs:', { + applicationId, + threshold: selectedThreshold, + file1: selectedImageName, + file2: selectedCompareImageName, + }); + + setIsLoading(true); + setErrorMessage(''); + + try { + const response = await fetch(`${BASE_URL}/face_recognition/compare`, { + method: 'POST', + headers: { + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, + }, + body: formData, + }); + + const data = await response.json(); + if (response.ok) { + // Fetch image URLs from response + const imageUrl1 = data.details.data.result.image_url1; + const imageUrl2 = data.details.data.result.image_url2; + + await fetchImage(imageUrl1, setImageUrl); + await fetchImage(imageUrl2, setImageCompareUrl); + + setVerified(data.details.data.result.verified); + setShowResult(true); + console.log('Comparison successful:', data); + } else { + console.error('Error response:', data); + const errorMessage = data.message || data.detail || data.details?.message || 'An unknown error occurred.'; + setErrorMessage(errorMessage); + } + } catch (error) { + console.error('Error:', error); + setErrorMessage('An error occurred while making the request.'); + } finally { + setIsLoading(false); + } + }; + + const fetchImage = async (imageUrl, setImageUrl) => { + setIsLoading(true); + try { + const response = await fetch(imageUrl, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, // Ensure this is valid + } + }); + + if (!response.ok) { + const errorDetails = await response.json(); + console.error('Image fetch error details:', errorDetails); + setErrorMessage('Failed to fetch image, please try again.'); + return; + } + + const imageBlob = await response.blob(); + const imageData = URL.createObjectURL(imageBlob); + console.log('Fetched image URL:', imageData); + + setImageUrl(imageData); // Set the state with the blob URL + + } catch (error) { + console.error('Error fetching image:', error); + setErrorMessage(error.message); + } finally { + setIsLoading(false); + } + }; + + const applicationOptions = applicationIds.map(app => ({ + value: app.id, + label: app.name + })); + + const ResultsSection = ({ showResult, verified, imageUrl, selectedImageName, imageCompareUrl, selectedCompareImageName }) => ( + showResult && ( +
    +

    Results

    +
    + + + + + + + +
    Similarity + {verified !== null ? (verified ? 'True' : 'False') : 'N/A'} +
    + +
    +
    + Original Foto +

    {selectedImageName}

    +
    + +
    + Compare Foto +

    {selectedCompareImageName}

    +
    +
    +
    +
    + ) + ); + + const formatFileSize = (sizeInBytes) => { + if (sizeInBytes < 1024) { + return `${sizeInBytes} bytes`; // Jika ukuran lebih kecil dari 1 KB + } else if (sizeInBytes < 1048576) { + return `${(sizeInBytes / 1024).toFixed(2)} KB`; // Jika ukuran lebih kecil dari 1 MB + } else { + return `${(sizeInBytes / 1048576).toFixed(2)} MB`; // Jika ukuran lebih besar dari 1 MB + } + }; + + return ( +
    + {/* Inject keyframes for the spinner */} + + + {isLoading && ( +
    +
    +

    Loading...

    +
    + )} + + + {/* Application ID Selection */} +
    +
    +
    + setTresholdId(e.target.value)} + onFocus={handleFocus} + onBlur={handleBlur} + > + + {thresholdIds.map((app) => ( + + ))} + + + {thresholdError && {thresholdError}} +
    +
    +
    + +
    + {/* Upload Image #1 */} +
    +
    + + + +

    Drag and Drop Here

    +

    Or

    + Browse +

    Recommended size: 250x250 (Max File Size: 2MB)

    +

    Supported file types: JPG, JPEG

    +
    + } + /> + {uploadError && {uploadError}} +
    + + {/* Display uploaded image name */} + {selectedImageName && ( +
    +
    + +
    +
    Uploaded File:
    +

    {selectedImageName}

    + {file && ( +

    + Size: {formatFileSize(file.size)} +

    + )} +
    +
    + +
    +
    +
    + )} +
    + + {/* Upload Image #2 */} +
    +
    + + + +

    Drag and Drop Here

    +

    Or

    + Browse +

    Recommended size: 250x250 (Max File Size: 2MB)

    +

    Supported file types: JPG, JPEG

    +
    + } + /> + {compareUploadError && {compareUploadError}} +
    + + {/* Display uploaded image name */} + {selectedCompareImageName && ( +
    +
    + +
    +
    Uploaded File:
    +

    {selectedCompareImageName}

    + {file && ( +

    + Size: {formatFileSize(file.size)} +

    + )} +
    +
    + +
    +
    +
    + )} +
    + + + {/* Submit Button */} +
    + +
    + + {/* Results Section */} + {showResult && ( + + )} + + ) +} + +export default Compare + +const styles = { + formGroup: { + marginTop: '-45px', + }, + selectWrapper: { + position: 'relative', + marginTop: '0', + }, + select: { + width: '100%', + paddingRight: '30px', + }, + chevronIcon: { + position: 'absolute', + right: '10px', + top: '50%', + transform: 'translateY(-50%)', + pointerEvents: 'none', + }, + remainingQuota: { + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + marginTop: '4px', + }, + quotaText: { + fontSize: '40px', + color: '#0542cc', + fontWeight: '600', + }, + timesText: { + marginLeft: '8px', + verticalAlign: 'super', + fontSize: '20px', + }, + uploadArea: { + backgroundColor: '#e6f2ff', + height: '40svh', + cursor: 'pointer', + marginTop: '1rem', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + border: '1px solid #ced4da', + borderRadius: '0.25rem', + padding: '25px 10px 10px 10px' + }, + uploadIcon: { + fontSize: '40px', + color: '#0542cc', + marginBottom: '7px', + }, + uploadText: { + color: '#1f2d3d', + fontWeight: '400', + fontSize: '16px', + lineHeight: '13px', + }, + wrapper: { + border: '1px solid #ddd', + borderRadius: '6px', + padding: '18px 10px 0 8px', // Padding lebih seragam + height: '13svh', // Tinggi lebih kecil untuk menyesuaikan tampilan + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + backgroundColor: '#f9f9f9', + overflow: 'hidden', + }, + fileWrapper: { + display: 'flex', + alignItems: 'center', + flex: '1', + }, + textContainer: { + flex: '1', + fontSize: '16px', // Ukuran font lebih kecil + marginLeft: '6px', + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + marginTop: '1rem' + }, + fileSize: { + fontSize: '12px', + color: '#555', + marginBottom: '2rem', + }, + closeButtonContainer: { + display: 'flex', + alignItems: 'center', + marginLeft: 'auto', + }, + closeButton: { + background: 'transparent', + border: 'none', + cursor: 'pointer', + padding: '0', + }, + imageIcon: { + color: '#0542cc', + fontSize: '18px', // Ukuran ikon sedikit lebih kecil + marginRight: '6px', + }, + closeIcon: { + color: 'red', + fontSize: '18px', + }, + submitButton: { + marginLeft: 'auto', + marginTop: '4rem', + textAlign: 'start', + position: 'relative', + zIndex: 1, + }, + uploadError: { + color: 'red', + fontSize: '12px', + marginTop: '5px', + }, + containerResultStyle: { + margin: '20px 0', + padding: '10px', + border: '1px solid #e0e0e0', + borderRadius: '8px', + backgroundColor: '#f9f9f9', + }, + resultContainer: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + }, + tableStyle: { + width: '100%', + borderCollapse: 'collapse', + marginBottom: '20px', + }, + imageContainer: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + flex: 1, + padding: '10px', + }, + imageCompareContainer: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + flex: 1, + padding: '10px', + }, + imageStyle: { + width: '100%', + height: 'auto', + maxWidth: '150px', // Limit image width + borderRadius: '8px', + }, + similarityText: (verified) => ({ + border: '0.1px solid gray', + padding: '8px', + color: verified ? 'green' : 'red', + fontWeight: 'bold', + }), + loadingOverlay: { + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + backgroundColor: 'rgba(0, 0, 0, 0.2)', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + zIndex: 1000, + }, + spinner: { + border: '4px solid rgba(0, 0, 0, 0.1)', + borderLeftColor: '#0542cc', + borderRadius: '50%', + width: '90px', + height: '90px', + animation: 'spin 1s ease-in-out infinite', + }, + loadingText: { + marginTop: '10px', + fontSize: '1.2rem', + color: '#fff', + textAlign: 'center', + }, +}; \ No newline at end of file diff --git a/src/screens/Biometric/FaceRecognition/Section/Enroll.jsx b/src/screens/Biometric/FaceRecognition/Section/Enroll.jsx new file mode 100644 index 0000000..735d492 --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/Section/Enroll.jsx @@ -0,0 +1,841 @@ +import React, { useState, useRef, useEffect } from 'react' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faTimes, faImage } from '@fortawesome/free-solid-svg-icons'; +import { FileUploader } from 'react-drag-drop-files'; +import Select from 'react-select' + +const Enroll = () => { + + const BASE_URL = process.env.REACT_APP_BASE_URL + const API_KEY = process.env.REACT_APP_API_KEY + + const fileTypes = ["JPG", "JPEG", "PNG"]; + const [file, setFile] = useState(null); + + const [errorMessage, setErrorMessage] = useState(''); + const [selectedImageName, setSelectedImageName] = useState(''); + const fileInputRef = useRef(null); + const [showResult, setShowResult] = useState(false); + const [applicationId, setApplicationId] = useState(''); + const [applicationIds, setApplicationIds] = useState([]); + const [selectedQuota, setSelectedQuota] = useState(0); + const [subjectId, setSubjectId] = useState(''); + const [subjectIds, setSubjectIds] = useState([]); + const [imageUrl, setImageUrl] = useState(''); + const [isLoading, setIsLoading] = useState(false); + + const [applicationError, setApplicationError] = useState(''); + const [subjectError, setSubjectError] = useState(''); + const [imageError, setImageError] = useState(''); + const [subjectAvailabilityMessage, setSubjectAvailabilityMessage] = useState(''); // Message for subject availability + + const [inputValueApplication, setInputValueApplication] = useState(''); // Controlled input value for Application ID + const [options, setOptions] = useState([]); + const [isMobile, setIsMobile] = useState(false); + + const styles = { + // Existing styles + formGroup: { + marginTop: '-45px', + }, + selectWrapper: { + position: 'relative', + marginTop: '0', + }, + select: { + width: '100%', + paddingRight: '30px', + }, + chevronIcon: { + position: 'absolute', + right: '10px', + top: '50%', + transform: 'translateY(-50%)', + pointerEvents: 'none', + }, + remainingQuota: { + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + marginTop: '4px', + }, + quotaText: { + fontSize: '40px', + color: '#0542cc', + fontWeight: '600', + }, + timesText: { + marginLeft: '8px', + verticalAlign: 'super', + fontSize: '20px', + }, + uploadArea: { + backgroundColor: '#e6f2ff', + height: '250px', // Default height for non-mobile devices + cursor: 'pointer', + marginTop: '1rem', + paddingTop: '22px', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + border: '1px solid #ced4da', + borderRadius: '0.25rem', + }, + + // Mobile responsive styles for upload area + uploadAreaMobile: { + backgroundColor: '#e6f2ff', + height: '50svh', // Reduced height for mobile + cursor: 'pointer', + marginTop: '1rem', + paddingTop: '18px', // Adjusted padding for mobile + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + border: '1px solid #ced4da', + borderRadius: '0.25rem', + padding: '20px' + }, + uploadIcon: { + fontSize: '40px', + color: '#0542cc', + marginBottom: '7px', + }, + uploadText: { + color: '#1f2d3d', + fontWeight: '400', + fontSize: '16px', + lineHeight: '13px', + }, + wrapper: { + border: '1px solid #ddd', + borderRadius: '6px', + padding: '18px 10px 0 8px', // Padding lebih seragam + height: '13svh', // Tinggi lebih kecil untuk menyesuaikan tampilan + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + backgroundColor: '#f9f9f9', + overflow: 'hidden', + }, + fileWrapper: { + display: 'flex', + alignItems: 'center', + flex: '1', + }, + textContainer: { + flex: '1', + fontSize: '16px', // Ukuran font lebih kecil + marginLeft: '6px', + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + marginTop: '1rem' + }, + fileSize: { + fontSize: '12px', + color: '#555', + marginBottom: '2rem', + }, + closeButtonContainer: { + display: 'flex', + alignItems: 'center', + marginLeft: 'auto', + }, + closeButton: { + background: 'transparent', + border: 'none', + cursor: 'pointer', + padding: '0', + }, + imageIcon: { + color: '#0542cc', + fontSize: '18px', // Ukuran ikon sedikit lebih kecil + marginRight: '6px', + }, + closeIcon: { + color: 'red', + fontSize: '18px', + }, + submitButton: { + marginLeft: 'auto', + marginTop: '4rem', + textAlign: 'start', + position: 'relative', + zIndex: 1, + }, + uploadError: { + color: 'red', + fontSize: '12px', + marginTop: '5px', + }, + + // New styles added and merged + containerResultStyle: { + padding: '20px', + border: '1px solid #0053b3', + borderRadius: '5px', + width: '100%', + margin: '20px auto', + }, + resultContainer: { + display: 'flex', + justifyContent: 'space-between', // Horizontal alignment + alignItems: 'flex-start', // Align items at the top + flexDirection: isMobile ? 'column' : 'row', // Stack vertically on mobile + width: '100%', + }, + resultsTable: { + width: '60%', + borderCollapse: 'collapse', + }, + resultsTableMobile: { + width: '100%', + borderCollapse: 'collapse', + }, + resultsCell: { + padding: '8px', + width: '30%', + fontSize: isMobile ? '14px' : '16px', + }, + resultsValueCell: { + padding: '8px', + width: '70%', + fontSize: isMobile ? '14px' : '16px', + color: 'red', + }, + resultsTrueValue: { + color: 'inherit', + }, + imageContainer: { + display: 'flex', + flexDirection: 'column', + alignItems: isMobile ? 'center' : 'flex-start', // Center image on mobile + width: '100%', + marginTop: isMobile ? '10px' : '0', // Add margin for spacing on mobile + }, + imageStyle: { + width: '300px', + height: '300px', + borderRadius: '5px', + }, + imageStyleMobile: { + width: '100%', // Make image responsive on mobile + height: 'auto', + borderRadius: '5px', + }, + imageDetails: { + marginTop: '10px', + fontSize: isMobile ? '14px' : '16px', // Adjust font size on mobile + color: '#1f2d3d', + }, + loadingOverlay: { + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + backgroundColor: 'rgba(0, 0, 0, 0.2)', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + zIndex: 1000, + }, + spinner: { + border: '4px solid rgba(0, 0, 0, 0.1)', + borderLeftColor: '#0542cc', + borderRadius: '50%', + width: '90px', + height: '90px', + animation: 'spin 1s ease-in-out infinite', + }, + loadingText: { + marginTop: '10px', + fontSize: '1.2rem', + color: '#fff', + textAlign: 'center', + }, + uploadedFileWrapper: { + backgroundColor: '#fff', + border: '0.2px solid gray', + padding: '15px 0 0 17px', + borderRadius: '5px', + display: 'flex', + alignItems: 'center', + gap: '10px', + justifyContent: 'space-between', + }, + uploadedFileInfo: { + marginRight: '18rem', + marginTop: '0.2rem', + }, + uploadedFileText: { + fontSize: '16px', + color: '#1f2d3d', + }, + resultsTable: { + width: '60%', + borderCollapse: 'collapse', + }, + resultsRow: { + border: '0.1px solid gray', + padding: '8px', + }, + resultsCell: { + padding: '8px', + width: '30%', + }, + resultsValueCell: { + padding: '8px', + width: '70%', + color: 'red', + }, + resultsTrueValue: { + color: 'inherit', + }, + customLabel: { + fontWeight: 600, fontSize: '14px', color: '#212529' + }, + + // Mobile responsiveness adjustments (if necessary) + responsiveImageStyle: { + width: '100%', + maxHeight: '250px', + objectFit: 'cover', + marginTop: '20px', + }, + responsiveResultContainer: { + padding: '1rem', + border: '1px solid #ccc', + borderRadius: '8px', + marginTop: '20px', + }, + responsiveImageContainer: { + marginTop: '20px', + textAlign: 'center', + }, + responsiveSubmitButton: { + marginTop: '1rem', + }, + responsiveLoadingOverlay: { + position: 'absolute', + top: '0', + left: '0', + width: '100%', + height: '100%', + backgroundColor: 'rgba(0,0,0,0.5)', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + zIndex: '10', + }, + responsiveSpinner: { + border: '4px solid #f3f3f3', + borderTop: '4px solid #3498db', + borderRadius: '50%', + width: '50px', + height: '50px', + animation: 'spin 2s linear infinite', + }, + responsiveLoadingText: { + color: 'white', + marginTop: '10px', + }, + } + + + useEffect(() => { + const fetchApplicationIds = async () => { + setIsLoading(true); + const url = `${BASE_URL}/application/list`; + try { + const response = await fetch(url, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': API_KEY, + }, + }); + + const data = await response.json(); + if (data.status_code === 200) { + setApplicationIds(data.details.data); + } else { + console.error('Failed to fetch data:', data.details.message); + } + } catch (error) { + console.error('Error fetching application IDs:', error); + } finally { + setIsLoading(false); + } + }; + + fetchApplicationIds(); + setOptions(subjectIds.map(id => ({ value: id, label: id }))); + + const handleResize = () => { + setIsMobile(window.innerWidth <= 768); // Deteksi apakah layar kecil (mobile) + }; + + window.addEventListener('resize', handleResize); + handleResize(); // Initial check + + return () => window.removeEventListener('resize', handleResize); + + }, [subjectIds]); + + const handleApplicationChange = async (selectedOption) => { + const selectedId = selectedOption.value; + const selectedApp = applicationIds.find(app => app.id === parseInt(selectedId)); + + if (!selectedOption) { + console.error("Selected option is undefined"); + return; + } + if (selectedApp) { + setSelectedQuota(selectedApp.quota); + } + + setApplicationId(selectedId); + + // Fetch subjects related to the application + await fetchSubjectIds(selectedId); + }; + + const handleInputChangeApplication = (newInputValue) => { + // Limit input to 15 characters for Application ID + if (newInputValue.length <= 15) { + setInputValueApplication(newInputValue); + } + }; + + + const fetchSubjectIds = async (appId) => { + setIsLoading(true); + try { + const response = await fetch(`${BASE_URL}/trx_face/list/subject?application_id=${appId}&search=${subjectId}&limit=10`, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': API_KEY, + }, + }); + + const data = await response.json(); + console.log("Fetched Subject IDs:", data); // Log data fetched from API + + if (data.status_code === 200) { + setSubjectIds(data.details.data); + } else { + console.error('Failed to fetch subject IDs:', data.details.message); + } + } catch (error) { + console.error('Error fetching subject IDs:', error); + } finally { + setIsLoading(false); + } + }; + + const handleImageUpload = (file) => { + // Ensure the file is not undefined or null before accessing its properties + if (file && file.name) { + const fileExtension = file.name.split('.').pop().toUpperCase(); + if (fileTypes.includes(fileExtension)) { + setSelectedImageName(file.name); + setFile(file); + setImageError(''); // Clear any previous errors + } else { + alert('Image format is not supported'); + setImageError('Image format is not supported'); + setFile(null); + } + } else { + console.error('No file selected or invalid file object.'); + } + }; + + + const handleImageCancel = () => { + setSelectedImageName(''); + setFile(null); + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } + }; + + const handleEnrollClick = async () => { + let hasError = false; // Track if there are any errors + + // Validate inputs and set corresponding errors + const validationErrors = { + imageError: !selectedImageName ? 'Please upload a face photo before enrolling.' : '', + applicationError: !applicationId ? 'Please select an Application ID before enrolling.' : '', + subjectError: !subjectId ? 'Please enter a Subject ID before enrolling.' : '', + }; + + // Update state with errors + if (validationErrors.imageError) { + setImageError(validationErrors.imageError); + hasError = true; + } else { + setImageError(''); // Clear error if valid + } + + if (validationErrors.applicationError) { + setApplicationError(validationErrors.applicationError); + hasError = true; + } else { + setApplicationError(''); // Clear error if valid + } + + if (validationErrors.subjectError) { + setSubjectError(validationErrors.subjectError); + hasError = true; + } else { + setSubjectError(''); // Clear error if valid + } + + // If there are errors, return early + if (hasError) return; + + if (!file) { + setImageError('No file selected. Please upload a valid image file.'); + return; + } + + const formData = new FormData(); + formData.append('application_id', String(applicationId)); + formData.append('subject_id', subjectId); + formData.append('file', file); + + console.log('Inputs:', { + applicationId, + subjectId, + file: file.name, + }); + + setIsLoading(true); + setErrorMessage(''); // Clear previous error message + + try { + const response = await fetch(`${BASE_URL}/face_recognition/enroll`, { + method: 'POST', + body: formData, + headers: { + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, + } + }); + + if (!response.ok) { + const errorDetails = await response.json(); + console.error('Response error details:', errorDetails); + // Periksa jika detail error terkait dengan Subject ID + if (errorDetails.detail && errorDetails.detail.includes('Subject ID')) { + setSubjectError(errorDetails.detail); // Tampilkan error di bawah input Subject ID + } else { + setErrorMessage(errorDetails.detail || 'Failed to enroll, please try again'); + } + return; + } + + const result = await response.json(); + console.log('Enrollment response:', result); + + if (result.details && result.details.data && result.details.data.image_url) { + const imageFileName = result.details.data.image_url.split('/').pop(); + console.log('Image URL:', result.details.data.image_url); + await fetchImage(imageFileName); + } else { + console.error('Image URL not found in response:', result); + setErrorMessage('Image URL not found in response. Please try again.'); + } + + setShowResult(true); + console.log('Enrollment successful:', result); + } catch (error) { + console.error('Error during API call:', error); + setErrorMessage('An unexpected error occurred. Please try again.'); + } finally { + setIsLoading(false); + } + }; + + const fetchImage = async (imageFileName) => { + + setIsLoading(true); + try { + const response = await fetch(`${BASE_URL}/preview/image/${imageFileName}`, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': API_KEY, + } + }); + + if (!response.ok) { + const errorDetails = await response.json(); + console.error('Image fetch error details:', errorDetails); + setErrorMessage('Failed to fetch image, please try again.'); + return; + } + + + const imageBlob = await response.blob(); + const imageData = URL.createObjectURL(imageBlob); + console.log('Fetched image URL:', imageData); + + + + setImageUrl(imageData); + + } catch (error) { + console.error('Error fetching image:', error); + setErrorMessage(error.message); + } finally { + setIsLoading(false); + } + }; + + const CustomLabel = ({ overRide, children, ...props }) => { + // We intentionally don't pass `overRide` to the label + return ( + + ); + }; + + const applicationOptions = applicationIds.map(app => ({ + value: app.id, + label: app.name + })); + + const handleSubjectIdChange = async (e) => { + const id = e.target.value; + setSubjectId(id); + + console.log("Current Subject ID Input:", id); // Debugging: Log input + + if (id) { + const exists = subjectIds.includes(id); + console.log("Subject IDs:", subjectIds); // Debugging: Log existing Subject IDs + + if (exists) { + setSubjectAvailabilityMessage('Subject already exists.'); // Error message + setSubjectError(''); // Clear any subject error + } else { + setSubjectAvailabilityMessage('This subject ID is available.'); // Success message + setSubjectError(''); + } + } else { + setSubjectAvailabilityMessage(''); // Clear message if input is empty + } + }; + + // Fungsi untuk mengonversi ukuran file dari byte ke KB/MB + const formatFileSize = (sizeInBytes) => { + if (sizeInBytes < 1024) { + return `${sizeInBytes} bytes`; // Jika ukuran lebih kecil dari 1 KB + } else if (sizeInBytes < 1048576) { + return `${(sizeInBytes / 1024).toFixed(2)} KB`; // Jika ukuran lebih kecil dari 1 MB + } else { + return `${(sizeInBytes / 1048576).toFixed(2)} MB`; // Jika ukuran lebih besar dari 1 MB + } + }; + + return ( +
    + {/* Inject keyframes for the spinner */} + + + {isLoading && ( +
    +
    +

    Loading...

    +
    + )} + + {/* Application ID Selection */} +
    +
    +
    + fetchSubjectIds(applicationId)} + maxLength={15} + /> + {subjectError && {subjectError}} + {subjectAvailabilityMessage && ( + + {subjectAvailabilityMessage} + + )} +
    +
    + + {/* Upload Section */} +
    +
    + + Upload Face Photo + + { + if (files && files[0]) { + handleImageUpload(files[0]); + } else { + console.error('No valid files dropped'); + } + }} + children={( +
    + +

    Drag and Drop Here

    +

    Or

    + fileInputRef.current.click()}>Browse +

    Recommended size: 300x300 (Max File Size: 2MB)

    +

    Supported file types: JPG, JPEG

    +
    + )} + /> + handleImageUpload(e.target.files[0])} + /> + {imageError && {imageError}} +
    +
    + + {/* Display uploaded image name */} + {selectedImageName && ( +
    +
    + +
    +
    Uploaded File:
    +

    {selectedImageName}

    + {file && ( +

    + Size: {formatFileSize(file.size)} +

    + )} +
    +
    + +
    +
    +
    + )} + + {/* Submit Button */} +
    + +
    + + {/* Result Section */} + {showResult && ( +
    +

    Results

    +
    + {/* Table Styling: responsive */} + + + + + + + {/* More rows can go here */} + +
    SimilarityTrue
    + + {/* Image and Details Container */} +
    + Contoh Foto +

    + {selectedImageName} +

    +
    +
    +
    + )} +
    + ); +} +export default Enroll; + + + diff --git a/src/screens/Biometric/FaceRecognition/Section/Liveness.jsx b/src/screens/Biometric/FaceRecognition/Section/Liveness.jsx new file mode 100644 index 0000000..9c92c4a --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/Section/Liveness.jsx @@ -0,0 +1,11 @@ +import React from 'react' + +const Liveness = () => { + return ( +
    +

    Face Recognition - Liveness

    +
    + ) +} + +export default Liveness diff --git a/src/screens/Biometric/FaceRecognition/Section/Search.jsx b/src/screens/Biometric/FaceRecognition/Section/Search.jsx new file mode 100644 index 0000000..d0e8a3a --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/Section/Search.jsx @@ -0,0 +1,662 @@ +import React, { useState, useRef, useEffect } from 'react' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faChevronLeft, faChevronDown, faTimes, faImage } from '@fortawesome/free-solid-svg-icons'; +import { FileUploader } from 'react-drag-drop-files'; +import Select from 'react-select' + +const fileTypes = ["JPG", "JPEG", "PNG"]; // Allowed file types + + +const Search = () => { + + const BASE_URL = process.env.REACT_APP_BASE_URL + const API_KEY = process.env.REACT_APP_API_KEY + + const [isSelectOpen, setIsSelectOpen] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); + const [selectedImageName, setSelectedImageName] = useState(''); + const fileInputRef = useRef(null); + const [showResult, setShowResult] = useState(false); + const [applicationId, setApplicationId] = useState(''); + const [selectedQuota, setSelectedQuota] = useState(0); + const [limitId, setLimitId] = useState(''); + const [imageUrls, setImageUrls] = useState([]); + const [isLoading, setIsLoading] = useState(false); + const [results, setResults] = useState([]); + const [file, setFile] = useState(null); + const [isMobile, setIsMobile] = useState(window.innerWidth <= 768); + + const [applicationIds, setApplicationIds] = useState([]); + const [inputValueApplication, setInputValueApplication] = useState(''); // Controlled input value for Application ID + + const [limitIds] = useState( + Array.from({ length: 10 }, (_, index) => ({ + id: index + 1, + name: index + 1, + })) + ); + + const [applicationIdError, setApplicationIdError] = useState(''); + const [limitIdError, setLimitIdError] = useState(''); + const [imageError, setImageError] = useState(''); + const [uploadedFile, setUploadedFile] = useState(null); + + const formatFileSize = (sizeInBytes) => { + if (sizeInBytes < 1024) { + return `${sizeInBytes} bytes`; // Jika ukuran lebih kecil dari 1 KB + } else if (sizeInBytes < 1048576) { + return `${(sizeInBytes / 1024).toFixed(2)} KB`; // Jika ukuran lebih kecil dari 1 MB + } else { + return `${(sizeInBytes / 1048576).toFixed(2)} MB`; // Jika ukuran lebih besar dari 1 MB + } + }; + + useEffect(() => { + const fetchApplicationIds = async () => { + try { + setIsLoading(true) + const url = `${BASE_URL}/application/list`; + console.log('Fetching URL:', url); // Log the URL + + const response = await fetch(url, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, + }, + }); + + const data = await response.json(); + + if (data.status_code === 200) { + const ids = data.details.data.map(app => app.id); + console.log('Application Id: ' + ids); // Log the IDs + setApplicationIds(data.details.data); // Update state with the fetched data + } else { + console.error('Failed to fetch data:', data.details.message); + } + } catch (error) { + console.error('Error fetching application IDs:', error); + } finally { + setIsLoading(false) + } + }; + + fetchApplicationIds(); + + const handleResize = () => setIsMobile(window.innerWidth <= 768); + window.addEventListener('resize', handleResize); + return () => window.removeEventListener('resize', handleResize); + }, []); + + const applicationOptions = applicationIds.map(app => ({ + value: app.id, + label: app.name + })); + + const handleApplicationChange = (selectedOption) => { + if (selectedOption) { + const selectedId = selectedOption.value; + const selectedApp = applicationIds.find(app => app.id === parseInt(selectedId)); + if (selectedApp) { + setSelectedQuota(selectedApp.quota); // Set the selected quota + setApplicationId(selectedId); // Set the selected application ID + } + } + }; + + const handleInputChangeApplication = (newInputValue) => { + // Limit input to 15 characters for Application ID + if (newInputValue.length <= 15) { + setInputValueApplication(newInputValue); + } +}; + + const handleFocus = () => { + setIsSelectOpen(true); + }; + + const handleBlur = () => { + setIsSelectOpen(false); + }; + + const handleImageUpload = (file) => { + // Ensure file exists before accessing its properties + if (!file) { + console.error('File is undefined'); + setImageError('Please upload a valid image file.'); + return; + } + + const fileExtension = file.name.split('.').pop().toUpperCase(); + if (fileTypes.includes(fileExtension)) { + setSelectedImageName(file.name); + setFile(file); + setImageError(''); // Clear any previous errors + } else { + // Show an alert if the file type is not supported + alert('Image format is not supported'); + setImageError('Image format is not supported'); // Optionally set error message to display on the UI + setFile(null); // Optionally clear the selected file + } + }; + + + const handleImageCancel = () => { + setSelectedImageName(''); + setFile(null); + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } + }; + + const handleCheckClick = async () => { + // Clear existing errors + setApplicationIdError(''); + setLimitIdError(''); + setImageError(''); + setErrorMessage(''); + + // Initialize validation flags + let hasError = false; + + // Validate Application ID + if (!applicationId) { + setApplicationIdError('Please select an Application ID before searching.'); + hasError = true; // Set error flag + } + + // Validate Limit ID + if (!limitId) { + setLimitIdError('Please select a Limit before searching.'); + hasError = true; // Set error flag + } + + // Validate Image Upload + if (!selectedImageName) { + setImageError('Please upload an image file.'); + hasError = true; // Set error flag + } + + // Check if the file is uploaded + if (!uploadedFile) { + setErrorMessage('Please upload an image file.'); + hasError = true; // Set error flag + } + + // If any errors were found, do not proceed + if (hasError) { + return; + } + + const parsedLimitId = parseInt(limitId, 10); + + const formData = new FormData(); + formData.append('application_id', applicationId); + formData.append('threshold', 1); + formData.append('limit', parsedLimitId); + formData.append('file', uploadedFile, uploadedFile.name); // Use the uploaded file + + setIsLoading(true); + + try { + const response = await fetch(`${BASE_URL}/face_recognition/search`, { + method: 'POST', + headers: { + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, + }, + body: formData, + }); + + const data = await response.json(); + + console.log('Response Data:', data); // Log the response + + if (response.ok) { + const resultsArray = Array.isArray(data.details.data) ? data.details.data : []; + const processedResults = resultsArray.map(item => ({ + identity: item.identity, + similarity: item.similarity, + imageUrl: item.image_url, + distance: item.distance, + })); + + // Fetch images using their URLs + await Promise.all(processedResults.map(async result => { + const imageFileName = result.imageUrl.split('/').pop(); // Extract file name if needed + await fetchImage(imageFileName); // Fetch image + console.log('multiple image data: ', result.imageUrl); // Log the URL + })); + + setResults(processedResults); + setShowResult(true); + + } else { + console.error('Error response:', JSON.stringify(data, null, 2)); + const errorMessage = data.message || data.detail || data.details?.message || 'An unknown error occurred.'; + setErrorMessage(errorMessage); + } + } catch (error) { + console.error('Error:', error); + setErrorMessage('An error occurred while making the request.'); + } finally { + setIsLoading(false); + } + }; + + const fetchImage = async (imageFileName) => { + setIsLoading(true); + try { + const response = await fetch(`${BASE_URL}/preview/image/${imageFileName}`, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': API_KEY, + }, + }); + + if (!response.ok) { + const errorDetails = await response.json(); + console.error('Image fetch error details:', errorDetails); + setErrorMessage('Failed to fetch image, please try again.'); + return; + } + + const imageBlob = await response.blob(); + const imageData = URL.createObjectURL(imageBlob); + console.log('Fetched image URL:', imageData); + setImageUrls(prevUrls => [...prevUrls, imageData]); // Store the blob URL + + } catch (error) { + console.error('Error fetching image:', error); + setErrorMessage(error.message); + } finally { + setIsLoading(false); + } + }; + + const CustomLabel = ({ overRide, children, ...props }) => { + // We intentionally don't pass `overRide` to the label + return ( + + ); + }; + + const styles = { + formGroup: { + marginTop: '-45px', + }, + selectWrapper: { + position: 'relative', + marginTop: '0', + }, + select: { + width: '100%', + paddingRight: '30px', + }, + chevronIcon: { + position: 'absolute', + right: '10px', + top: '50%', + transform: 'translateY(-50%)', + pointerEvents: 'none', + }, + remainingQuota: { + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + marginTop: '4px', + }, + quotaText: { + fontSize: '40px', + color: '#0542cc', + fontWeight: '600', + }, + timesText: { + marginLeft: '8px', + verticalAlign: 'super', + fontSize: '20px', + }, + uploadArea: { + backgroundColor: '#e6f2ff', + height: '50svh', + cursor: 'pointer', + marginTop: '1rem', + padding: '1rem', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + border: '1px solid #ced4da', + borderRadius: '0.25rem', + }, + uploadIcon: { + fontSize: '40px', + color: '#0542cc', + marginBottom: '7px', + }, + uploadText: { + color: '#1f2d3d', + fontWeight: '400', + fontSize: '16px', + lineHeight: '13px', + }, + wrapper: { + border: '1px solid #ddd', + borderRadius: '6px', + padding: '18px 10px 0 8px', // Padding lebih seragam + height: '13svh', // Tinggi lebih kecil untuk menyesuaikan tampilan + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + backgroundColor: '#f9f9f9', + overflow: 'hidden', + }, + fileWrapper: { + display: 'flex', + alignItems: 'center', + flex: '1', + }, + textContainer: { + flex: '1', + fontSize: '16px', // Ukuran font lebih kecil + marginLeft: '6px', + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + marginTop: '1rem' + }, + fileSize: { + fontSize: '12px', + color: '#555', + marginBottom: '2rem', + }, + closeButtonContainer: { + display: 'flex', + alignItems: 'center', + marginLeft: 'auto', + }, + closeButton: { + background: 'transparent', + border: 'none', + cursor: 'pointer', + padding: '0', + }, + imageIcon: { + color: '#0542cc', + fontSize: '18px', // Ukuran ikon sedikit lebih kecil + marginRight: '6px', + }, + closeIcon: { + color: 'red', + fontSize: '18px', + }, + submitButton: { + marginLeft: 'auto', + marginTop: '4rem', + textAlign: 'start', + position: 'relative', + zIndex: 1, + }, + uploadError: { + color: 'red', + fontSize: '12px', + marginTop: '5px', + }, + loadingOverlay: { + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + backgroundColor: 'rgba(0, 0, 0, 0.2)', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + zIndex: 1000, + }, + spinner: { + border: '4px solid rgba(0, 0, 0, 0.1)', + borderLeftColor: '#0542cc', + borderRadius: '50%', + width: '90px', + height: '90px', + animation: 'spin 1s ease-in-out infinite', + }, + loadingText: { + marginTop: '10px', + fontSize: '1.2rem', + color: '#fff', + textAlign: 'center', + }, + containerResultStyle: { + padding: '1rem', + backgroundColor: '#f7f7f7', + borderRadius: '8px', + margin: '1rem', + width: isMobile ? '100%' : '50%', + }, + resultContainer: { + display: 'flex', + flexDirection: isMobile ? 'column' : 'row', + flexWrap: 'wrap', + gap: '1rem', + justifyContent: 'center', + }, + resultItem: { + display: 'flex', + flexDirection: isMobile ? 'row' : 'column', + alignItems: 'center', + textAlign: 'center', + padding: '0.5rem', + backgroundColor: '#fff', + border: '1px solid #ddd', + borderRadius: '8px', + boxShadow: '0px 4px 8px rgba(0, 0, 0, 0.1)', + width: isMobile ? '100%' : '150px', + }, + resultTextContainer: { + marginBottom: isMobile ? '0' : '0.5rem', + }, + resultText: { + fontSize: '0.9rem', + color: '#333', + margin: '0.2rem 0', + }, + resultImage: { + width: '80px', + height: '80px', + borderRadius: '50%', + marginTop: isMobile ? '0' : '0.5rem', + }, + + }; + + return ( +
    + {/* Inject keyframes for the spinner */} + + + {isLoading && ( +
    +
    +

    Loading...

    +
    + )} + + {/* Application ID Selection */} +
    +
    +
    + setLimitId(e.target.value)} + onFocus={handleFocus} + onBlur={handleBlur} + > + + {limitIds.map((app) => ( + + ))} + + + {limitIdError && ( + {limitIdError} + )} +
    +
    +
    + + {/* Upload Section */} + {/* Drag and Drop File Uploader */} +
    +
    + + Upload Face Photo + + handleImageUpload(files[0])} + children={ +
    + +

    Drag and Drop Here

    +

    Or

    + fileInputRef.current.click()}>Browse +

    Recommended size: 300x300 (Max File Size: 2MB)

    +

    Supported file types: JPG, JPEG

    +
    + } + /> + handleImageUpload(e.target.files[0])} + /> + {(imageError || errorMessage) && ( + + {imageError || errorMessage} + + )} +
    +
    + + {selectedImageName && ( +
    +
    + +
    +
    Uploaded File:
    +

    {selectedImageName}

    + {file && ( +

    + Size: {formatFileSize(file.size)} +

    + )} +
    +
    + +
    +
    +
    + )} + + {/* Submit Button */} +
    + +
    + + {/* Results Section */} + { + showResult && results.length > 0 && ( +
    +

    Results

    +
    + {results.slice(0, limitId).map((result, index) => ( +
    +
    +

    Image Name: image_{index + 1}

    +

    Similarity: {result.similarity}%

    +

    Distance: {result.distance}

    +
    + {`Result +
    + ))} +
    +
    + )} +
    + ); +} + +export default Search + diff --git a/src/screens/Biometric/FaceRecognition/Section/Verify.jsx b/src/screens/Biometric/FaceRecognition/Section/Verify.jsx new file mode 100644 index 0000000..d8a0716 --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/Section/Verify.jsx @@ -0,0 +1,724 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faChevronLeft, faChevronDown, faTimes, faImage } from '@fortawesome/free-solid-svg-icons'; +import { FileUploader } from 'react-drag-drop-files'; +import Select from 'react-select' + +const Verify = () => { + const BASE_URL = process.env.REACT_APP_BASE_URL; + const API_KEY = process.env.REACT_APP_API_KEY; + + const fileTypes = ["JPG", "JPEG", "PNG"]; + const [file, setFile] = useState(null); + + const [isSelectOpen, setIsSelectOpen] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); + const [uploadError, setUploadError] = useState(''); + const [applicationError, setApplicationError] = useState(''); + const [subjectError, setSubjectError] = useState(''); + const [thresholdError, setThresholdError] = useState(''); + const [selectedImageName, setSelectedImageName] = useState(''); + const fileInputRef = useRef(null); + const [showResult, setShowResult] = useState(false); + const [applicationId, setApplicationId] = useState(''); + const [thresholdId, setThresholdId] = useState(''); + const [selectedQuota, setSelectedQuota] = useState(0); + const [subjectId, setSubjectId] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const [verified, setVerified] = useState(null); + const [imageUrl, setImageUrl] = useState(''); + const [applicationIds, setApplicationIds] = useState([]); + const [subjectIds, setSubjectIds] = useState([]); + const [subjectAvailabilityMessage, setSubjectAvailabilityMessage] = useState(''); // Message for subject availability + const [inputValueApplication, setInputValueApplication] = useState(''); // Controlled input value for Application ID + const [isMobile, setIsMobile] = useState(window.innerWidth <= 768); + + const thresholdIds = [ + { id: 1, name: 'cosine', displayName: 'Basic' }, + { id: 2, name: 'euclidean', displayName: 'Medium' }, + { id: 3, name: 'euclidean_l2', displayName: 'High' }, + ]; + + const options = subjectIds.map(id => ({ value: id, label: id })); + const [inputValue, setInputValue] = useState(''); + const applicationOptions = applicationIds.map(app => ({ + value: app.id, + label: app.name + })); + useEffect(() => { + const fetchApplicationIds = async () => { + try { + setIsLoading(true); + const url = `${BASE_URL}/application/list`; + const response = await fetch(url, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, + }, + }); + const data = await response.json(); + + if (data.status_code === 200) { + setApplicationIds(data.details.data); + } else { + console.error('Failed to fetch data:', data.details.message); + } + } catch (error) { + console.error('Error fetching application IDs:', error); + } finally { + setIsLoading(false); + } + }; + + fetchApplicationIds(); + + const handleResize = () => setIsMobile(window.innerWidth <= 768); + window.addEventListener('resize', handleResize); + return () => window.removeEventListener('resize', handleResize); + }, []); + + const styles = { + formGroup: { + marginTop: '-45px', + }, + selectWrapper: { + position: 'relative', + marginTop: '0', + }, + select: { + width: '100%', + paddingRight: '30px', + }, + chevronIcon: { + position: 'absolute', + right: '10px', + top: '50%', + transform: 'translateY(-50%)', + pointerEvents: 'none', + }, + remainingQuota: { + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + marginTop: '4px', + }, + quotaText: { + fontSize: '40px', + color: '#0542cc', + fontWeight: '600', + }, + timesText: { + marginLeft: '8px', + verticalAlign: 'super', + fontSize: '20px', + }, + uploadArea: { + backgroundColor: '#e6f2ff', + height: '250px', + cursor: 'pointer', + marginTop: '1rem', + padding: '22px 10px 0 20px', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + border: '1px solid #ced4da', + borderRadius: '0.25rem', + }, + uploadIcon: { + fontSize: '40px', + color: '#0542cc', + marginBottom: '7px', + }, + uploadText: { + color: '#1f2d3d', + fontWeight: '400', + fontSize: '16px', + lineHeight: '13px', + }, + wrapper: { + border: '1px solid #ddd', + borderRadius: '6px', + padding: '18px 10px 0 8px', // Padding lebih seragam + height: '13svh', // Tinggi lebih kecil untuk menyesuaikan tampilan + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + backgroundColor: '#f9f9f9', + overflow: 'hidden', + }, + fileWrapper: { + display: 'flex', + alignItems: 'center', + flex: '1', + }, + textContainer: { + flex: '1', + fontSize: '16px', // Ukuran font lebih kecil + marginLeft: '6px', + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + marginTop: '1rem' + }, + fileSize: { + fontSize: '12px', + color: '#555', + marginBottom: '2rem', + }, + closeButtonContainer: { + display: 'flex', + alignItems: 'center', + marginLeft: 'auto', + }, + closeButton: { + background: 'transparent', + border: 'none', + cursor: 'pointer', + padding: '0', + }, + imageIcon: { + color: '#0542cc', + fontSize: '18px', // Ukuran ikon sedikit lebih kecil + marginRight: '6px', + }, + closeIcon: { + color: 'red', + fontSize: '18px', + }, + submitButton: { + marginLeft: 'auto', + marginTop: '4rem', + textAlign: 'start', + position: 'relative', + zIndex: 1, + }, + uploadError: { + color: 'red', + fontSize: '12px', + marginTop: '5px', + }, + containerResultStyle: { + padding: '20px', + border: '1px solid #0053b3', + borderRadius: '5px', + width: '100%', + maxWidth: '600px', + margin: '20px auto', + }, + resultContainer: { + display: 'flex', + alignItems: 'center', + width: '100%', + }, + tableStyle: { + width: '60%', + borderCollapse: 'collapse', + }, + resultsTableMobile: { + width: '100%', + borderCollapse: 'collapse', + fontSize: '14px', + }, + resultsCell: { + border: '0.1px solid gray', + padding: '8px', + }, + resultsValueCell: { + border: '0.1px solid gray', + padding: '8px', + width: '60%', + }, + imageContainer: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + marginTop: isMobile ? '20px' : '0', + }, + imageStyle: { + width: '300px', + height: '300px', + borderRadius: '5px', + objectFit: 'cover', + }, + imageStyleMobile: { + width: '100%', + height: 'auto', + }, + loadingOverlay: { + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + backgroundColor: 'rgba(0, 0, 0, 0.2)', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + zIndex: 1000, + }, + spinner: { + border: '4px solid rgba(0, 0, 0, 0.1)', + borderLeftColor: '#0542cc', + borderRadius: '50%', + width: '90px', + height: '90px', + animation: 'spin 1s ease-in-out infinite', + }, + loadingText: { + marginTop: '10px', + fontSize: '1.2rem', + color: '#fff', + textAlign: 'center', + }, + }; + + const handleApplicationChange = async (selectedOption) => { + if (!selectedOption) { + console.error("Selected option is undefined"); + return; + } + + const selectedId = selectedOption.value; + const selectedApp = applicationIds.find(app => app.id === parseInt(selectedId)); + + if (selectedApp) { + setSelectedQuota(selectedApp.quota); + } + + setApplicationId(selectedId); + + if (selectedId) { + await fetchSubjectIds(selectedId); + } else { + setSubjectIds([]); + setSubjectAvailabilityMessage(''); + } + }; + + + const fetchSubjectIds = async (appId) => { + setIsLoading(true); + try { + const response = await fetch(`${BASE_URL}/trx_face/list/subject?application_id=${appId}&search=${subjectId}&limit=99`, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': API_KEY, + }, + }); + + const data = await response.json(); + console.log("Fetched Subject IDs:", data); // Log data fetched from API + + if (data.status_code === 200) { + setSubjectIds(data.details.data); + } else { + console.error('Failed to fetch subject IDs:', data.details.message); + } + } catch (error) { + console.error('Error fetching subject IDs:', error); + } finally { + setIsLoading(false); + } + }; + + + const handleFocus = () => { + setIsSelectOpen(true); + }; + + const handleBlur = () => { + setIsSelectOpen(false); + }; + + const handleImageUpload = (file) => { + // Ensure file exists before accessing its properties + if (!file) { + console.error('File is undefined'); + setUploadError('Please upload a valid image file.'); + return; + } + + const fileExtension = file.name.split('.').pop().toUpperCase(); + if (fileTypes.includes(fileExtension)) { + setSelectedImageName(file.name); + setFile(file); + setUploadError(''); // Clear any previous errors + } else { + // Show an alert if the file type is not supported + alert('Image format is not supported'); + setUploadError('Image format is not supported'); // Optionally set error message to display on the UI + setFile(null); // Optionally clear the selected file + } + }; + + + const handleImageCancel = () => { + setSelectedImageName(''); + setFile(null); + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } + }; + + const handleCheckClick = async () => { + // Reset previous error messages + setErrorMessage(''); + setApplicationError(''); + setSubjectError(''); + setThresholdError(''); + setUploadError(''); + + let hasError = false; // Track if any errors occur + + if (!applicationId) { + setApplicationError('Please select an Application ID before enrolling.'); + hasError = true; // Mark that an error occurred + } + + if (!subjectId) { + setSubjectError('Please enter a Subject ID before enrolling.'); + hasError = true; // Mark that an error occurred + } + + const selectedThreshold = thresholdIds.find(threshold => threshold.name === thresholdId)?.name; + + if (!selectedThreshold) { + setThresholdError('Invalid threshold selected.'); + hasError = true; // Mark that an error occurred + } + + if (!selectedImageName) { + setUploadError('Please upload a face photo before verifying.'); + hasError = true; // Mark that an error occurred + } + + // If there are any errors, stop the function + if (hasError) { + return; + } + + // Log the input values + console.log('Selected Image Name:', selectedImageName); + console.log('Application ID:', applicationId); + console.log('Subject ID:', subjectId); + console.log('Selected Threshold:', selectedThreshold); + + const formData = new FormData(); + formData.append('application_id', applicationId); + formData.append('threshold', selectedThreshold); + formData.append('subject_id', subjectId); + + // const file = fileInputRef.current.files[0]; + if (file) { + formData.append('file', file, file.name); + } else { + setUploadError('Please upload an image file.'); + return; + } + + setIsLoading(true); + + try { + const response = await fetch(`${BASE_URL}/face_recognition/verifiy`, { + method: 'POST', + headers: { + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, + }, + body: formData, + }); + + const data = await response.json(); + + if (response.ok) { + if (data.details && data.details.data && data.details.data.result && data.details.data.result.image_url) { + const imageFileName = data.details.data.result.image_url.split('/').pop(); + await fetchImage(imageFileName); + } + + setShowResult(true); + setVerified(data.details.data.result.verified); + } else { + const errorMessage = data.message || data.detail || data.details?.message || 'An unknown error occurred.'; + setErrorMessage(errorMessage); + } + } catch (error) { + console.error('Error:', error); + setErrorMessage('An error occurred while making the request.'); + } finally { + setIsLoading(false); + } + }; + + + const fetchImage = async (imageFileName) => { + setIsLoading(true); + try { + const response = await fetch(`${BASE_URL}/preview/image/${imageFileName}`, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': API_KEY, + }, + }); + + if (!response.ok) { + setErrorMessage('Failed to fetch image, please try again.'); + return; + } + + const imageBlob = await response.blob(); + const imageData = URL.createObjectURL(imageBlob); + setImageUrl(imageData); + } catch (error) { + console.error('Error fetching image:', error); + setErrorMessage(error.message); + } finally { + setIsLoading(false); + } + }; + + const CustomLabel = ({ overRide, children, ...props }) => { + // We intentionally don't pass `overRide` to the label + return ( + + ); + }; + + const handleInputChangeApplication = (newInputValue) => { + // Limit input to 15 characters for Application ID + if (newInputValue.length <= 15) { + setInputValueApplication(newInputValue); + } + }; + + // Fungsi untuk mengonversi ukuran file dari byte ke KB/MB + const formatFileSize = (sizeInBytes) => { + if (sizeInBytes < 1024) { + return `${sizeInBytes} bytes`; // Jika ukuran lebih kecil dari 1 KB + } else if (sizeInBytes < 1048576) { + return `${(sizeInBytes / 1024).toFixed(2)} KB`; // Jika ukuran lebih kecil dari 1 MB + } else { + return `${(sizeInBytes / 1048576).toFixed(2)} MB`; // Jika ukuran lebih besar dari 1 MB + } + }; + + + return ( +
    + + + {isLoading && ( +
    +
    +

    Loading...

    +
    + )} + + {/* Application ID Selection */} +
    +
    +
    + option.value === subjectId)} + onChange={selectedOption => setSubjectId(selectedOption ? selectedOption.value : '')} + onInputChange={(value) => { + // Check if input value length is within the 15-character limit + if (value.length <= 15) { + setInputValue(value); // Set the input value if within limit + } + }} + onFocus={() => fetchSubjectIds(applicationId)} // Fetch subject IDs on focus + placeholder="Enter Subject ID" + isClearable + noOptionsMessage={() => ( +
    Subject ID not registered.
    + )} + inputValue={inputValue} // Bind the inputValue state to control the input + /> + {subjectError && {subjectError}} + {subjectAvailabilityMessage && ( + + {subjectAvailabilityMessage} + + )} +
    + +
    +
    + + + {thresholdError && {thresholdError}} +
    +
    +
    + + {/* Upload Section */} +
    +
    + + Upload Face Photo + + handleImageUpload(files[0])} + children={ +
    + +

    Drag and Drop Here

    +

    Or

    + fileInputRef.current.click()}>Browse +

    Recommended size: 300x300 (Max File Size: 2MB)

    +

    Supported file types: JPG, JPEG

    +
    + } + /> + {uploadError && {uploadError}} +
    +
    + + {/* Display uploaded image name */} + {selectedImageName && ( +
    +
    + +
    +
    Uploaded File:
    +

    {selectedImageName}

    + {file && ( +

    + Size: {formatFileSize(file.size)} +

    + )} +
    +
    + +
    +
    +
    + )} + + {/* Submit Button */} +
    + +
    + + {/* Results Section */} + {showResult && ( +
    +

    Results

    +
    + + + + + + + +
    Similarity + {verified !== null ? (verified ? 'True' : 'False') : 'N/A'} +
    + +
    + Example Image +

    + File Name: {selectedImageName} +

    +
    +
    +
    + )} +
    + ); +} + +export default Verify; diff --git a/src/screens/Biometric/FaceRecognition/Section/index.js b/src/screens/Biometric/FaceRecognition/Section/index.js new file mode 100644 index 0000000..5192539 --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/Section/index.js @@ -0,0 +1,13 @@ +import Enroll from "./Enroll"; +import VerifySection from "./Verify"; +import Compare from "./Compare" +import Liveness from "./Liveness" +import Search from "./Search" + +export { + Enroll, + VerifySection, + Compare, + Liveness, + Search +} \ No newline at end of file diff --git a/src/screens/Biometric/FaceRecognition/Summary.jsx b/src/screens/Biometric/FaceRecognition/Summary.jsx new file mode 100644 index 0000000..25fd862 --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/Summary.jsx @@ -0,0 +1,11 @@ +import React from 'react' + +const Summary = () => { + return ( +
    +

    Summary

    +
    + ) +} + +export default Summary diff --git a/src/screens/Biometric/FaceRecognition/Transaction.jsx b/src/screens/Biometric/FaceRecognition/Transaction.jsx new file mode 100644 index 0000000..46b9e75 --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/Transaction.jsx @@ -0,0 +1,11 @@ +import React from 'react' + +const Transaction = () => { + return ( +
    +

    Transaction

    +
    + ) +} + +export default Transaction diff --git a/src/screens/Biometric/FaceRecognition/Verify.jsx b/src/screens/Biometric/FaceRecognition/Verify.jsx new file mode 100644 index 0000000..160db3e --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/Verify.jsx @@ -0,0 +1,123 @@ +import React, { useEffect, useState } from 'react'; +import { Link, Routes, Route, useNavigate } from 'react-router-dom'; +import { + Enroll, + Compare, + Liveness, + Search, + VerifySection +} from './Section'; + +const Verify = () => { + const verifyTabs = [ + { name: 'Enroll', link: 'face-enroll' }, + { name: 'Verify', link: 'face-verifysection' }, + { name: 'Liveness', link: 'face-liveness' }, + { name: 'Compare', link: 'face-compare' }, + { name: 'Search', link: 'face-search' }, + ]; + + const [isMobile, setIsMobile] = useState(false); + const navigate = useNavigate(); + + // Redirect otomatis ke rute default saat akses ke /face-verify + useEffect(() => { + if (window.location.pathname === '/face-verify') { + navigate('face-enroll', { replace: true }); + } + }, [navigate]); + + // Update state isMobile berdasarkan ukuran layar + useEffect(() => { + const handleResize = () => { + setIsMobile(window.innerWidth <= 768); + }; + + handleResize(); + window.addEventListener('resize', handleResize); + + return () => window.removeEventListener('resize', handleResize); + }, []); + + return ( +
    + {/* Static Content */} +
    +
    +

    + Alert +

    +

    + Get started now by creating an Application ID and explore all the demo services available on the dashboard. + Experience the ease and flexibility of trying out all our features firsthand. +

    +
    + + + +
    +
    +
    + + {/* Tab Navigation */} +
    +
    +
    + {verifyTabs.map((tab) => ( + + {tab.name} + + ))} +
    +
    + + {/* Dynamic Tab Content */} +
    + + } /> + } /> + } /> + } /> + } /> + +
    +
    +
    + ); +}; + +export default Verify; + +const styles = { + container: { + marginTop: '3%', + padding: '0 15px', + }, + welcomeCard: { + backgroundColor: '#E2FBEA', + borderLeft: '4px solid #0542CC', + borderRadius: '5px', + marginBottom: '20px', + }, + createButton: { + backgroundColor: '#0542CC', + }, + section: { + padding: '20px', + border: '0.1px solid rgba(0, 0, 0, 0.2)', + borderLeft: '4px solid #0542CC', + borderRadius: '10px', + width: '100%', + }, + tabLink: { + padding: '10px 20px', + }, +}; diff --git a/src/screens/Biometric/FaceRecognition/index.js b/src/screens/Biometric/FaceRecognition/index.js new file mode 100644 index 0000000..ad6ea8f --- /dev/null +++ b/src/screens/Biometric/FaceRecognition/index.js @@ -0,0 +1,9 @@ +import FaceVerify from "./Verify"; +import FaceSummary from "./Summary"; +import FaceTransaction from "./Transaction"; + +export { + FaceVerify, + FaceSummary, + FaceTransaction +} \ No newline at end of file diff --git a/src/screens/Biometric/OcrKtp/Verify.jsx b/src/screens/Biometric/OcrKtp/Verify.jsx new file mode 100644 index 0000000..441bff3 --- /dev/null +++ b/src/screens/Biometric/OcrKtp/Verify.jsx @@ -0,0 +1,511 @@ +import React, { useState, useRef, useEffect } from 'react' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faChevronLeft, faChevronDown, faTimes, faImage } from '@fortawesome/free-solid-svg-icons'; +import { DummyKtp } from '../../../assets/images' +import { Link } from 'react-router-dom'; + + +const Verify = () => { + + const BASE_URL = process.env.REACT_APP_BASE_URL + const API_KEY = process.env.REACT_APP_API_KEY + + const [isSelectOpen, setIsSelectOpen] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); + const [selectedImageName, setSelectedImageName] = useState(''); + const fileInputRef = useRef(null); + const [showResult, setShowResult] = useState(false); + const [applicationId, setApplicationId] = useState(''); + const [imageUrl, setImageUrl] = useState(''); + const [isLoading, setIsLoading] = useState(false); + + const [applicationIds, setApplicationIds] = useState([]); + + // Example usage: + const data = { + nik: "21710121748901", + district: "BATAM KOTA", + name: "HANDOKO", + city: "KOTA BATAM", + dob: "BANJARMASIN, 12-12-1974", + state: "PROVINSI KEPULAUAN RIAU", + gender: "LAKI-LAKI", + religion: "KRISTEN", + bloodType: "A", + maritalStatus: "KAWIN", + address: "GOLDEN LAND BLOK FN NO.39", + occupation: "WIRASWASTA", + rtRw: "002/013", + nationality: "WNI", + village: "TAMAN BALOI", + imageUrl: DummyKtp, // Replace this with the actual image path + dark: false, + blur: false, + grayscale: false, + flashlight: false, + }; + + useEffect(() => { + const fetchApplicationIds = async () => { + try { + setIsLoading(true) + + const url = `${BASE_URL}/application/list`; + console.log('Fetching URL:', url); + + const response = await fetch(url, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, + }, + }); + + const data = await response.json(); + + if (data.status_code === 200) { + const ids = data.details.data.map(app => app.id); + console.log('Application Id: ' + ids); + setApplicationIds(data.details.data); + } else { + console.error('Failed to fetch data:', data.details.message); + } + } catch (error) { + console.error('Error fetching application IDs:', error); + } finally { + setIsLoading(false) + } + }; + + fetchApplicationIds(); + }, []); + + const handleFocus = () => { + setIsSelectOpen(true); + }; + + const handleBlur = () => { + setIsSelectOpen(false); + }; + + const handleImageUpload = (event) => { + const file = event.target.files[0]; + + if (file && (file.type === 'image/jpeg' || file.type === 'image/jpg')) { + setSelectedImageName(file.name); + setErrorMessage(''); + } else { + alert('Please upload a valid image file (JPG, JPEG).'); + } + }; + + const handleImageCancel = () => { + setSelectedImageName(''); + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } + }; + + const handleCheckClick = async () => { + console.log('Verify - OCR Ktp') + setShowResult(true) + }; + + const getValueStyle = (value) => ({ + color: value ? 'green' : 'red', + }); + + + return ( +
    + {/* Inject keyframes for the spinner */} + + + {isLoading && ( +
    +
    +

    Loading...

    +
    + )} + {/* Welcome Message */} +
    +
    +
    +

    + Alert +

    +

    + Get started now by creating an Application ID and explore all the demo services available on the dashboard. + Experience the ease and flexibility of trying out all our features firsthand. +

    +
    + {/* Tombol di bawah teks */} +
    + + + +
    +
    +
    + + {/* Section */} +
    + {/* Application ID Selection */} +
    {/* Added align-items-center for vertical alignment */} +
    +
    + + +
    +
    + +
    +

    {/* Adjusted margins */} + Remaining Quota +

    +
    + 0 + (times) +
    +
    +
    + + {/* Upload Section */} +
    +
    + +
    document.getElementById('fileUpload').click()} + > + +

    Drag and Drop Here

    +

    Or

    + Browse +

    Recommended size: 300x300 (Max File Size: 2MB)

    +

    Supported file types: JPG, JPEG

    +
    + + {errorMessage && ( + {errorMessage} + )} +
    +
    + + {/* Display uploaded image name */} + {selectedImageName && ( +
    +
    + +
    +
    Uploaded File:
    +

    {selectedImageName}

    +
    +
    + +
    +
    +
    + )} + + {/* Submit Button */} +
    + +
    + + {/* Result Section */} + {showResult && ( +
    +
    +

    Results

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NIK{data.nik}
    District{data.district}
    Name{data.name}
    City{data.city}
    Date of Birth{data.dob}
    State{data.state}
    Gender{data.gender}
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Religion{data.religion}
    Blood Type{data.bloodType}
    Marital Status{data.maritalStatus}
    Address{data.address}
    Occupation{data.occupation}
    RT/RW{data.rtRw}
    Nationality{data.nationality}
    +
    +
    +
    +
    + KTP +
    +
    +

    Dark: {data.dark.toString()}

    +

    Blur: {data.blur.toString()}

    +
    +
    +

    Grayscale: {data.grayscale.toString()}

    +

    Flashlight: {data.flashlight.toString()}

    +
    +
    +
    +
    + )} +
    +
    + ) +} + +export default Verify + +const styles = { + formGroup: { + marginTop: '-45px', + }, + selectWrapper: { + position: 'relative', + marginTop: '0', // Adjusted to remove excessive spacing + }, + select: { + width: '100%', + paddingRight: '30px', // Ensures padding for the icon + }, + chevronIcon: { + position: 'absolute', + right: '10px', + top: '50%', + transform: 'translateY(-50%)', + pointerEvents: 'none', + }, + remainingQuota: { + display: 'flex', // Ensures the text aligns properly + flexDirection: 'row', + alignItems: 'center', + marginTop: '4px', // Adjust spacing from the label + }, + quotaText: { + fontSize: '40px', + color: '#0542cc', + fontWeight: '600', + }, + timesText: { + marginLeft: '8px', + verticalAlign: 'super', + fontSize: '20px', // Adjust font size if necessary + }, + uploadArea: { + backgroundColor: '#e6f2ff', + height: '250px', + cursor: 'pointer', + marginTop: '1rem', + paddingTop: '22px', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + border: '1px solid #ced4da', + borderRadius: '0.25rem', + }, + uploadIcon: { + fontSize: '40px', + color: '#0542cc', + marginBottom: '7px', + }, + uploadText: { + color: '#1f2d3d', + fontWeight: '400', + fontSize: '16px', + lineHeight: '13px', + }, + fileWrapper: { + backgroundColor: '#fff', + border: '0.2px solid gray', + padding: '15px 0 0 17px', + borderRadius: '5px', + position: 'relative', + display: 'flex', + alignItems: 'center', + gap: '10px', + justifyContent: 'space-between', + }, + fileInfo: { + marginTop: '4rem', + display: 'flex', + alignItems: 'center', + }, + imageIcon: { + color: '#0542cc', + fontSize: '24px', + marginBottom: '1rem' + }, + closeIcon: { + color: 'red', + cursor: 'pointer', + fontSize: '26px', + marginRight: '1rem', + marginBottom: '1rem' + }, + submitButton: { + marginLeft: 'auto', + marginTop: '4rem', + textAlign: 'start', + position: 'relative', // Menambahkan posisi relative + zIndex: 1, // Menambah z-index jika ada elemen yang menutupi + }, + uploadError: { + color: 'red', + fontSize: '12px', + marginTop: '5px', + }, + + containerResultStyle: { + padding: '20px', + border: '1px solid #ccc', + borderRadius: '8px', + backgroundColor: '#f9f9f9', + marginTop: '20px', + }, + resultContainer: { + overflowX: 'auto', // Allows horizontal scrolling if the table is too wide + }, + tableStyle: { + width: '100%', + borderCollapse: 'collapse', // Ensures that table borders are merged + }, + tableCell: { + padding: '10px', + border: '1px solid #ddd', // Light gray border around each cell + textAlign: 'left', + }, + loadingOverlay: { + position: 'fixed', + top: 0, + left: 0, + right: 0, + bottom: 0, + backgroundColor: 'rgba(0, 0, 0, 0.2)', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + zIndex: 1000, + }, + spinner: { + border: '4px solid rgba(0, 0, 0, 0.1)', + borderLeftColor: '#0542cc', + borderRadius: '50%', + width: '90px', + height: '90px', + animation: 'spin 1s ease-in-out infinite', + }, + loadingText: { + marginTop: '10px', + fontSize: '1.2rem', + color: '#fff', + textAlign: 'center', + }, +}; diff --git a/src/screens/Biometric/OcrKtp/index.js b/src/screens/Biometric/OcrKtp/index.js new file mode 100644 index 0000000..b7eeff4 --- /dev/null +++ b/src/screens/Biometric/OcrKtp/index.js @@ -0,0 +1,5 @@ +import VerifyKtp from "./Verify"; + +export { + VerifyKtp +} \ No newline at end of file diff --git a/src/screens/Home/Applications/Applications.jsx b/src/screens/Home/Applications/Applications.jsx new file mode 100644 index 0000000..4bae33e --- /dev/null +++ b/src/screens/Home/Applications/Applications.jsx @@ -0,0 +1,246 @@ +import React, { useState, useEffect } from 'react'; +import { Link } from 'react-router-dom'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faPlus } from '@fortawesome/free-solid-svg-icons'; + +const Applications = () => { + const BASE_URL = process.env.REACT_APP_BASE_URL; + const API_KEY = process.env.REACT_APP_API_KEY; + + const [applications, setApplications] = useState([]); + const [buttonStates, setButtonStates] = useState([]); + const [copiedIndex, setCopiedIndex] = useState(null); + const [searchTerm, setSearchTerm] = useState(''); + const [debouncedSearchTerm, setDebouncedSearchTerm] = useState(''); + const [errorMessage, setErrorMessage] = useState(null); + const [isMobile, setIsMobile] = useState(window.innerWidth <= 768); // Check if mobile + + useEffect(() => { + const timer = setTimeout(() => { + setDebouncedSearchTerm(searchTerm); + }, 500); + return () => clearTimeout(timer); + }, [searchTerm]); + + useEffect(() => { + const fetchApplications = async () => { + if (debouncedSearchTerm) { + try { + const response = await fetch(`${BASE_URL}/application/get-by-name/${debouncedSearchTerm}`, { + method: 'GET', + headers: { + 'accept': 'application/json', + 'x-api-key': API_KEY, + }, + }); + + const result = await response.json(); + + if (response.ok) { + if (result.details && result.details.data) { + setApplications([result.details.data]); + setButtonStates([{ isHovered: false, isActive: false }]); + setErrorMessage(null); + } else { + setApplications([]); + setErrorMessage('Data is not found.'); + } + } else { + setApplications([]); + setErrorMessage('Data is not found.'); + } + } catch (error) { + console.error('Error fetching applications:', error); + setApplications([]); + setErrorMessage('Data is not found.'); + } + } else { + const fetchAllApplications = async () => { + try { + const response = await fetch(`${BASE_URL}/application/list`, { + method: 'GET', + headers: { + 'x-api-key': API_KEY, + }, + }); + const result = await response.json(); + if (response.ok && result.status_code === 200) { + setApplications(result.details.data); + setButtonStates(result.details.data.map(() => ({ isHovered: false, isActive: false }))); + setErrorMessage(null); + } else { + setApplications([]); + setErrorMessage('Error fetching data. Please try again.'); + } + } catch (error) { + console.error('Error fetching all applications:', error); + setApplications([]); + setErrorMessage('Error fetching data. Please try again.'); + } + }; + + fetchAllApplications(); + } + }; + + fetchApplications(); + }, [debouncedSearchTerm]); + + useEffect(() => { + const handleResize = () => { + setIsMobile(window.innerWidth <= 768); // Update state based on window size + }; + + window.addEventListener('resize', handleResize); // Add resize event listener + + return () => { + window.removeEventListener('resize', handleResize); // Cleanup event listener on unmount + }; + }, []); + + const handleMouseEnter = (index) => { + setButtonStates((prevStates) => { + const newStates = [...prevStates]; + newStates[index].isHovered = true; + return newStates; + }); + }; + + const handleMouseLeave = (index) => { + setButtonStates((prevStates) => { + const newStates = [...prevStates]; + newStates[index].isHovered = false; + return newStates; + }); + }; + + const handleCopy = (index, appName) => { + navigator.clipboard.writeText(appName) + .then(() => { + setCopiedIndex(index); + setTimeout(() => setCopiedIndex(null), 2000); + }) + .catch(err => console.error('Failed to copy: ', err)); + }; + + return ( +
    +

    List of Applications

    + setSearchTerm(e.target.value)} + /> +
    +
    + + + +
    + {errorMessage ? ( +

    {errorMessage}

    + ) : ( +
    + {applications.map((application, index) => ( +
    handleMouseEnter(index)} + onMouseLeave={() => handleMouseLeave(index)} + > +

    {application.name}

    +

    Application ID: {application.id}

    +

    Date & Time: + {application.created_at ? new Date(application.created_at).toLocaleString() : "Date not available"} +

    + +
    + ))} +
    + )} +
    +
    + ); +}; + +export default Applications; + +const styles = { + container: { + padding: '20px', + fontFamily: 'Arial, sans-serif', + color: '#333', + }, + title: { + fontSize: '24px', + color: '#003399', + marginBottom: '10px', + }, + searchInput: { + width: '100%', + padding: '10px', + marginBottom: '20px', + borderRadius: '5px', + border: '1px solid #ddd', + }, + wrapperCard: (isMobile) => ({ + border: '0.2px solid gray', + borderLeft: '5px solid #0542cc', + borderRadius: '5px', + boxShadow: '0 2px 10px rgba(0, 0, 0, 0.1)', + padding: isMobile ? '15px' : '22px', // Adjust padding dynamically based on device + overflow: 'hidden', + margin: '0 auto', + maxWidth: '1200px', + }), + createButtonContainer: { + textAlign: 'start', + marginBottom: '20px', + }, + createButton: { + padding: '10px 20px', + backgroundColor: '#003399', + color: '#fff', + border: 'none', + borderRadius: '5px', + cursor: 'pointer', + }, + link: { + textDecoration: 'none', + }, + cardsContainer: (isMobile) => ({ + display: 'grid', + gridTemplateColumns: isMobile ? '1fr' : '1fr 1fr', // Stack cards on mobile + gap: isMobile ? '15px' : '20px', // Adjust gap based on device + width: '100%', + boxSizing: 'border-box', + }), + card: { + padding: '15px', + backgroundColor: '#f9f9f9', + borderRadius: '8px', + boxShadow: '0px 4px 8px rgba(0, 0, 0, 0.1)', + border: '1px solid #ddd', + maxWidth: '100%', + boxSizing: 'border-box', + }, + copyButton: { + marginTop: '10px', + padding: '8px 12px', + backgroundColor: '#003399', + color: '#fff', + border: 'none', + borderRadius: '4px', + cursor: 'pointer', + }, +}; diff --git a/src/screens/Home/Applications/CreateApps.jsx b/src/screens/Home/Applications/CreateApps.jsx new file mode 100644 index 0000000..c2bd463 --- /dev/null +++ b/src/screens/Home/Applications/CreateApps.jsx @@ -0,0 +1,220 @@ +import React, { useState } from 'react'; +import { useLocation, useNavigate } from 'react-router-dom'; + +const CreateApps = () => { + const BASE_URL = process.env.REACT_APP_BASE_URL; + const API_KEY = process.env.REACT_APP_API_KEY; + + const location = useLocation(); + const navigate = useNavigate(); + const [buttonState, setButtonState] = useState({ + isHovered: false, + isActive: false, + }); + const [inputValue, setInputValue] = useState(''); + const [error, setError] = useState(''); + + const Breadcrumb = ({ path }) => { + return ( + + ); + }; + + const breadcrumbPath = [ + { name: 'Application', link: '/application' }, + { name: 'Create Application ID', link: '/createApps' }, + ]; + + const handleMouseEnter = () => setButtonState({ ...buttonState, isHovered: true }); + const handleMouseLeave = () => setButtonState({ ...buttonState, isHovered: false, isActive: false }); + const handleMouseDown = () => setButtonState({ ...buttonState, isActive: true }); + const handleMouseUp = () => setButtonState({ ...buttonState, isActive: false }); + + const handleInputChange = (e) => { + setInputValue(e.target.value); + if (error) setError(''); // Clear error when user starts typing + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + if (!inputValue) { + setError('Application name is required.'); + } else { + const requestData = { + name: inputValue, + quota: 100, + mode_id: 9, + status_id: 1, + }; + + try { + const response = await fetch(`${BASE_URL}/application/add`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'accept': 'application/json', + 'x-api-key': `${API_KEY}`, + }, + body: JSON.stringify(requestData), + }); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + const result = await response.json(); + console.log('Form submitted successfully:', result); + + // Tampilkan pesan sukses + alert('Application ID created successfully!'); + + // Navigasikan kembali ke halaman sebelumnya + navigate(-1); // Jika menggunakan react-router-dom + // Atau jika menggunakan React Native: + // navigation.goBack(); + + } catch (error) { + console.error('Error creating application ID:', error); + setError('Failed to create Application ID. Please try again.'); + } + } + }; + + return ( +
    +
    + +

    Create Application ID

    +
    +
    + + {error && {error}} +
    + +
    +
    + +
    + ); +}; + +const styles = { + container: { + padding: '1rem', + width: '100%', + margin: '0', + boxSizing: 'border-box', + }, + wrapper: { + display: 'flex', + flexDirection: 'column', + border: '1px solid #ddd', + borderRadius: '8px', + padding: '1.5rem', + boxShadow: '0 2px 5px rgba(0, 0, 0, 0.1)', + borderLeft: '5px solid #0542cc', + backgroundColor: '#fff', + }, + form: { + display: 'flex', + flexDirection: 'column', + }, + header: { + marginBottom: '1rem', + fontSize: '1.5rem', + textAlign: 'flex-start', + }, + input: { + width: '100%', + padding: '0.75rem', + marginBottom: '1rem', + borderRadius: '6px', + border: '1px solid #ccc', + boxSizing: 'border-box', + fontStyle: 'italic', + }, + button: { + padding: '0.5rem 1rem', // Ubah ukuran padding tombol untuk resize + alignSelf: 'flex-start', // Menempatkan tombol di flex-start + color: '#fff', + border: 'none', + borderRadius: '6px', + cursor: 'pointer', + transition: 'background-color 0.3s ease', + }, + buttonText: { + color: '#fff', + fontWeight: '500', + }, + breadcrumb: { + marginBottom: '1rem', + fontSize: '14px', + display: 'flex', + justifyContent: 'flex-start', + }, + breadcrumbLink: { + color: '#000', + textDecoration: 'none', + }, + error: { + color: 'red', + fontSize: '12px', + marginTop: '-8px', + marginBottom: '10px', + }, +}; + + + +export default CreateApps; diff --git a/src/screens/Home/Dashboard/Dashboard.jsx b/src/screens/Home/Dashboard/Dashboard.jsx new file mode 100644 index 0000000..57dc123 --- /dev/null +++ b/src/screens/Home/Dashboard/Dashboard.jsx @@ -0,0 +1,200 @@ +import React from 'react'; +import { + OCR, + SmsAnnounce, + OTP +} from '../../../assets/icon'; +import { DashboardImg } from '../../../assets/images'; + +function Dashboard() { + const cardData = [ + { + icon: OCR, + title: 'Optical Character Recognition', + hits: '0', + percentage: '0%', + note: 'From Yesterday', + }, + { + icon: SmsAnnounce, + title: 'SMS Announcement', + hits: '0', + percentage: '0%', + note: 'From Yesterday', + }, + { + icon: OTP, + title: 'SMS OTP', + hits: '0', + percentage: '0%', + note: 'From Yesterday', + }, + ]; + + return ( +
    + {/* Check Our Service Status Section */} +
    +
    +
    +
    Check Our Service Status
    +

    + Stay updated on the current status of our services in real-time. Easily monitor performance, downtime, and maintenance schedules to ensure seamless integration and uninterrupted usage. +

    +
    + +
    +
    + + {/* Your Daily Usage Section */} +
    +
    + + Your Daily Usage +
    + +
    + {cardData.map((card, index) => ( +
    +
    +
    +
    + {card.title.toLowerCase()} +
    {card.title}
    +
    + +
    +

    {card.hits}

    +

    Hits

    +

    + {card.percentage} +

    +

    {card.note}

    +
    +
    +
    +
    + ))} +
    + + {/* Subscribe Other Services Section */} +
    +
    +
    +
    +
    + {/* Image on top for smaller screens, beside text on larger screens */} + dashImg +
    +

    Subscribe Other Services

    +

    + Unlock access to more features by subscribing to our other services. Once subscribed, you'll gain insights through detailed statistics and data tailored to your needs. +

    + +
    +
    +
    +
    +
    +
    +
    +
    + ); +} + +export default Dashboard; + +const styles = { + wrapper: { + backgroundColor: '#e2fbea', + borderWidth: '1px', + borderStyle: 'solid', + borderColor: '#d2d6de', + borderRadius: '5px', + padding: '16px', + marginBottom: '2%', + }, + alert: { + backgroundColor: '#e2fbea', + padding: '6px 22px 0 0', + marginBottom: '2%', + }, + heading: (fontWeight, color) => ({ + fontWeight: fontWeight, + color: color, + }), + text: { + fontWeight: 400, + color: '#212529', + marginTop: '2vh', + }, + card: { + border: '0.1px solid gray', + borderRadius: '2%', + filter: 'drop-shadow(0 2px 5px rgba(0, 0, 0, 0.1))', + }, + icon: { + marginBottom: '3%', + marginRight: '3%', + }, + responsiveImage: { + maxWidth: '100%', // Ensure the image doesn't overflow its container + height: 'auto', // Maintain aspect ratio of the image + }, + flexContainer: { + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', // Align items in the center by default + gap: '2%', + }, + hits: { + fontWeight: 600, + fontSize: '40px', + color: '#0542cc', + }, + percentage: { + fontWeight: 600, + fontSize: '40px', + color: '#0542cc', + }, + valueContainer: { + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + gap: '4%', + margin: '10% 0 0 0', + }, + cardBottom: { + border: '0.1px solid gray', + borderRadius: '2%', + filter: 'drop-shadow(0 2px 5px rgba(0, 0, 0, 0.1))', + }, + contentBottom: { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + gap: '10px', + }, + paragraph: { + textAlign: 'left', + fontWeight: 400, + }, + button: { + backgroundColor: '#0542cc', + borderRadius: '5px', + color: 'white', + padding: '10px 20px', + border: 'none', + textAlign: 'center', + cursor: 'pointer', + }, +}; diff --git a/src/screens/Home/GettingStarted/GettingStarted.jsx b/src/screens/Home/GettingStarted/GettingStarted.jsx new file mode 100644 index 0000000..b70152b --- /dev/null +++ b/src/screens/Home/GettingStarted/GettingStarted.jsx @@ -0,0 +1,137 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; + +const GettingStarted = () => { + const cardData = [ + { + title: "Watchlist Screening", + subtitle: "Assess Potential Risk", + description: "Receive detailed insights into potential matches against a list of known or suspected individuals and entities. Our service analyzes the provided full name and other key information to help you assess risks effectively and make informed decisions.", + badge: "New", + buttonText: "Get Started", + }, + { + title: "Watchlist Screening", + subtitle: "Assess Potential Risk", + description: "Receive detailed insights into potential matches against a list of known or suspected individuals and entities. Our service analyzes the provided full name and other key information to help you assess risks effectively and make informed decisions.", + badge: "New", + buttonText: "Get Started", + }, + { + title: "Watchlist Screening", + subtitle: "Assess Potential Risk", + description: "Receive detailed insights into potential matches against a list of known or suspected individuals and entities. Our service analyzes the provided full name and other key information to help you assess risks effectively and make informed decisions.", + badge: "New", + buttonText: "Get Started", + }, + { + title: "Watchlist Screening", + subtitle: "Assess Potential Risk", + description: "Receive detailed insights into potential matches against a list of known or suspected individuals and entities. Our service analyzes the provided full name and other key information to help you assess risks effectively and make informed decisions.", + badge: "New", + buttonText: "Get Started", + }, + { + title: "Watchlist Screening", + subtitle: "Assess Potential Risk", + description: "Receive detailed insights into potential matches against a list of known or suspected individuals and entities. Our service analyzes the provided full name and other key information to help you assess risks effectively and make informed decisions.", + badge: "New", + buttonText: "Get Started", + }, + { + title: "Watchlist Screening", + subtitle: "Assess Potential Risk", + description: "Receive detailed insights into potential matches against a list of known or suspected individuals and entities. Our service analyzes the provided full name and other key information to help you assess risks effectively and make informed decisions.", + badge: "New", + buttonText: "Get Started", + }, + ]; + + return ( +
    + {/* Welcome Section */} +
    +
    +
    +

    + + Welcome Back, Murtadi +

    +

    + Get started now by creating an Application ID and explore all the demo services available on the dashboard. + Experience the ease and flexibility of trying out all our features firsthand. +

    +
    + {/* Buttons */} +
    + + + + + +
    +
    +
    + + {/* Cards Section */} +
    + {cardData.map((card, index) => ( +
    +
    +
    +
    + {card.title} + {card.badge} +
    +
    {card.subtitle}
    +

    {card.description}

    + + {card.buttonText} + +
    +
    +
    + ))} +
    +
    + ); +}; + +export default GettingStarted; + +const styles = { + welcomeCard: { + backgroundColor: 'white', + borderLeft: '4px solid #007bff', + boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)', + marginBottom: '1rem', + }, + buttonPrimary: { + backgroundColor: '#0542CC', + }, + buttonSecondary: { + backgroundColor: '#E2FBEA', + }, + card: { + boxShadow: '0 2px 4px rgba(0, 0, 0, 0.1)', + }, + cardTitle: { + color: '#007bff', + }, + badge: { + backgroundColor: 'green', + color: 'white', + padding: '0.25em 0.5em', + borderRadius: '0.25em', + }, + linkButton: { + padding: '0', + fontWeight: 'bold', + color: '#007bff', + }, +}; diff --git a/src/screens/Home/index.js b/src/screens/Home/index.js new file mode 100644 index 0000000..d8ca9fa --- /dev/null +++ b/src/screens/Home/index.js @@ -0,0 +1,11 @@ +import GettingStarted from './GettingStarted/GettingStarted'; +import Dashboard from './Dashboard/Dashboard'; +import Applications from './Applications/Applications'; +import CreateApps from './Applications/CreateApps'; + +export { + GettingStarted, + Dashboard, + Applications, + CreateApps +} diff --git a/src/setupTests.js b/src/setupTests.js deleted file mode 100644 index 8f2609b..0000000 --- a/src/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom';