diff --git a/package-lock.json b/package-lock.json
index 5fb41ac..ec0d7ec 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,7 +18,9 @@
"react-redux": "^8.0.5",
"react-router-dom": "6.3",
"react-scripts": "5.0.1",
+ "react-toastify": "^9.1.1",
"redux": "^4.2.0",
+ "tw-elements": "^1.0.0-alpha12",
"web-vitals": "^2.1.4"
},
"devDependencies": {
@@ -3668,6 +3670,15 @@
}
}
},
+ "node_modules/@popperjs/core": {
+ "version": "2.11.6",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
+ "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
"node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -6230,6 +6241,40 @@
"node": ">=10"
}
},
+ "node_modules/chart.js": {
+ "version": "2.9.4",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz",
+ "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==",
+ "dependencies": {
+ "chartjs-color": "^2.1.0",
+ "moment": "^2.10.2"
+ }
+ },
+ "node_modules/chartjs-color": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz",
+ "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
+ "dependencies": {
+ "chartjs-color-string": "^0.6.0",
+ "color-convert": "^1.9.3"
+ }
+ },
+ "node_modules/chartjs-color-string": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz",
+ "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==",
+ "dependencies": {
+ "color-name": "^1.0.0"
+ }
+ },
+ "node_modules/chartjs-plugin-datalabels": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-0.7.0.tgz",
+ "integrity": "sha512-PKVUX14nYhH0wcdCpgOoC39Gbzvn6cZ7O9n+bwc02yKD9FTnJ7/TSrBcfebmolFZp1Rcicr9xbT0a5HUbigS7g==",
+ "peerDependencies": {
+ "chart.js": ">= 2.7.0 < 3"
+ }
+ },
"node_modules/check-types": {
"version": "11.1.2",
"resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz",
@@ -6322,6 +6367,14 @@
"wrap-ansi": "^7.0.0"
}
},
+ "node_modules/clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -6972,6 +7025,11 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
"integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
},
+ "node_modules/custom-event-polyfill": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz",
+ "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w=="
+ },
"node_modules/damerau-levenshtein": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
@@ -7126,6 +7184,14 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
+ "node_modules/detect-autofill": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/detect-autofill/-/detect-autofill-1.1.4.tgz",
+ "integrity": "sha512-utCBQwCR/beSnADQmBC7C4tTueBBkYCl6WSpfGUkYKO/+MzPxqYGj6G4MvHzcKmH1gCTK+VunX2vaagvkRXPvA==",
+ "dependencies": {
+ "custom-event-polyfill": "^1.0.7"
+ }
+ },
"node_modules/detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -12712,6 +12778,14 @@
"mkdirp": "bin/cmd.js"
}
},
+ "node_modules/moment": {
+ "version": "2.29.4",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
+ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -13252,6 +13326,11 @@
"node": ">=8"
}
},
+ "node_modules/perfect-scrollbar": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz",
+ "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g=="
+ },
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -13415,6 +13494,16 @@
"node": ">=4"
}
},
+ "node_modules/popper.js": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
+ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
+ "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
"node_modules/postcss": {
"version": "8.4.19",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
@@ -15157,6 +15246,18 @@
}
}
},
+ "node_modules/react-toastify": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.1.tgz",
+ "integrity": "sha512-pkFCla1z3ve045qvjEmn2xOJOy4ZciwRXm1oMPULVkELi5aJdHCN/FHnuqXq8IwGDLB7PPk2/J6uP9D8ejuiRw==",
+ "dependencies": {
+ "clsx": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -16775,6 +16876,21 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
+ "node_modules/tw-elements": {
+ "version": "1.0.0-alpha12",
+ "resolved": "https://registry.npmjs.org/tw-elements/-/tw-elements-1.0.0-alpha12.tgz",
+ "integrity": "sha512-AQHwXIC4kw4T0NPKAi0vD1bkHSiA4RhdXqqnXDWEHKsrN02njc/ITB3YZ92s2f2jt+wBPI2UOpeUsWL5xiMVeQ==",
+ "dependencies": {
+ "@popperjs/core": "^2.6.0",
+ "chart.js": "^2.9.4",
+ "chartjs-plugin-datalabels": "^0.7.0",
+ "deepmerge": "^4.2.2",
+ "detect-autofill": "^1.1.3",
+ "perfect-scrollbar": "^1.5.0",
+ "popper.js": "^1.16.1",
+ "tailwindcss": "^3.0.7"
+ }
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -20539,6 +20655,11 @@
"source-map": "^0.7.3"
}
},
+ "@popperjs/core": {
+ "version": "2.11.6",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
+ "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw=="
+ },
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -22468,6 +22589,38 @@
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="
},
+ "chart.js": {
+ "version": "2.9.4",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz",
+ "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==",
+ "requires": {
+ "chartjs-color": "^2.1.0",
+ "moment": "^2.10.2"
+ }
+ },
+ "chartjs-color": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz",
+ "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
+ "requires": {
+ "chartjs-color-string": "^0.6.0",
+ "color-convert": "^1.9.3"
+ }
+ },
+ "chartjs-color-string": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz",
+ "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==",
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ },
+ "chartjs-plugin-datalabels": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-0.7.0.tgz",
+ "integrity": "sha512-PKVUX14nYhH0wcdCpgOoC39Gbzvn6cZ7O9n+bwc02yKD9FTnJ7/TSrBcfebmolFZp1Rcicr9xbT0a5HUbigS7g==",
+ "requires": {}
+ },
"check-types": {
"version": "11.1.2",
"resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz",
@@ -22538,6 +22691,11 @@
"wrap-ansi": "^7.0.0"
}
},
+ "clsx": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg=="
+ },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -23001,6 +23159,11 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
"integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
},
+ "custom-event-polyfill": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz",
+ "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w=="
+ },
"damerau-levenshtein": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
@@ -23115,6 +23278,14 @@
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
},
+ "detect-autofill": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/detect-autofill/-/detect-autofill-1.1.4.tgz",
+ "integrity": "sha512-utCBQwCR/beSnADQmBC7C4tTueBBkYCl6WSpfGUkYKO/+MzPxqYGj6G4MvHzcKmH1gCTK+VunX2vaagvkRXPvA==",
+ "requires": {
+ "custom-event-polyfill": "^1.0.7"
+ }
+ },
"detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -27207,6 +27378,11 @@
"minimist": "^1.2.6"
}
},
+ "moment": {
+ "version": "2.29.4",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
+ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -27594,6 +27770,11 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
},
+ "perfect-scrollbar": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz",
+ "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g=="
+ },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -27710,6 +27891,11 @@
}
}
},
+ "popper.js": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
+ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
+ },
"postcss": {
"version": "8.4.19",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
@@ -28782,6 +28968,14 @@
"workbox-webpack-plugin": "^6.4.1"
}
},
+ "react-toastify": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.1.tgz",
+ "integrity": "sha512-pkFCla1z3ve045qvjEmn2xOJOy4ZciwRXm1oMPULVkELi5aJdHCN/FHnuqXq8IwGDLB7PPk2/J6uP9D8ejuiRw==",
+ "requires": {
+ "clsx": "^1.1.1"
+ }
+ },
"read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -29978,6 +30172,21 @@
}
}
},
+ "tw-elements": {
+ "version": "1.0.0-alpha12",
+ "resolved": "https://registry.npmjs.org/tw-elements/-/tw-elements-1.0.0-alpha12.tgz",
+ "integrity": "sha512-AQHwXIC4kw4T0NPKAi0vD1bkHSiA4RhdXqqnXDWEHKsrN02njc/ITB3YZ92s2f2jt+wBPI2UOpeUsWL5xiMVeQ==",
+ "requires": {
+ "@popperjs/core": "^2.6.0",
+ "chart.js": "^2.9.4",
+ "chartjs-plugin-datalabels": "^0.7.0",
+ "deepmerge": "^4.2.2",
+ "detect-autofill": "^1.1.3",
+ "perfect-scrollbar": "^1.5.0",
+ "popper.js": "^1.16.1",
+ "tailwindcss": "^3.0.7"
+ }
+ },
"type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
diff --git a/package.json b/package.json
index 95adca7..a5a0e97 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,9 @@
"react-redux": "^8.0.5",
"react-router-dom": "6.3",
"react-scripts": "5.0.1",
+ "react-toastify": "^9.1.1",
"redux": "^4.2.0",
+ "tw-elements": "^1.0.0-alpha12",
"web-vitals": "^2.1.4"
},
"scripts": {
diff --git a/src/App.js b/src/App.js
index abc1197..bb53765 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,10 +1,17 @@
+import { Provider } from "react-redux";
+import { ToastContainer } from "react-toastify";
+import { store } from "./app/store";
+
+import AppRouter from "./router/AppRouter";
function App() {
+
return (
-
-
-
+
+
+
+
);
}
diff --git a/src/app/store.jsx b/src/app/store.jsx
new file mode 100644
index 0000000..14c9a1e
--- /dev/null
+++ b/src/app/store.jsx
@@ -0,0 +1,9 @@
+import { configureStore} from "@reduxjs/toolkit";
+import authReducer from "../features/authSlice"
+
+export const store =configureStore({
+ reducer:{
+ auth:authReducer,
+
+ }
+})
\ No newline at end of file
diff --git a/src/auth/firebase.js b/src/auth/firebase.js
new file mode 100644
index 0000000..cd9b621
--- /dev/null
+++ b/src/auth/firebase.js
@@ -0,0 +1,110 @@
+// Import the functions you need from the SDKs you need
+
+import { initializeApp } from "firebase/app";
+import {
+ getAuth,
+ createUserWithEmailAndPassword,
+ signInWithEmailAndPassword,
+ signOut,
+ updateProfile,
+ onAuthStateChanged,
+ GoogleAuthProvider,
+ signInWithPopup,
+} from "firebase/auth";
+import { useSelector } from "react-redux";
+import { clearUser, initialState, setUser } from "../features/authSlice";
+import { toastSuccessNotify, toastErrorNotify, toastWarnNotify } from "../helper/Toastfy";
+const firebaseConfig = {
+ apiKey: "AIzaSyDjSI_ROzIdejIheZ2twAYT46njNDS-hKg",
+ authDomain: "redux-app-85e9c.firebaseapp.com",
+ projectId: "redux-app-85e9c",
+ storageBucket: "redux-app-85e9c.appspot.com",
+ messagingSenderId: "777502188729",
+ appId: "1:777502188729:web:3ac62475f62cc342db2768"
+ };
+// Initialize Firebase
+const app = initializeApp(firebaseConfig);
+export const auth = getAuth(app);
+export const provider = new GoogleAuthProvider();
+export const createUser = async (email,password,navigate,displayName) => {
+ try {
+ let userCredential = await createUserWithEmailAndPassword(
+ auth,
+ email,
+ password
+ );
+ console.log(userCredential);
+ await updateProfile(auth.user, { displayName: displayName });
+ toastSuccessNotify("Registered is successfully!")
+ navigate("/");
+ } catch (error) {
+ toastErrorNotify(error.message);
+ console.log("asaefv")
+ console.log(auth);
+ }
+};
+
+export const userObserver = (setCurrentUser) => {
+ //? Kullanıcının signin olup olmadığını takip eden ve kullanıcı değiştiğinde yeni kullanıcıyı response olarak dönen firebase metodu
+ onAuthStateChanged(auth, (user) => {
+ if (user) {
+ const { email, displayName, photoURL } = user;
+ setCurrentUser({ email, displayName, photoURL });
+ console.log(user);
+ } else {
+ setCurrentUser(false);
+ console.log("user signed out");
+ }
+ });
+ };
+
+export const logOut = (navigate,dispatch) => {
+ signOut(auth);
+ dispatch(clearUser())
+ toastWarnNotify("logged out successfully");
+ navigate("/")
+};
+
+export const signIn = async (username,email, password, navigate, dispatch) => {
+ try {
+ await signInWithEmailAndPassword(
+ auth,
+ email,
+ password
+ )
+ dispatch(
+ setUser({
+ username: username,
+ email: email,
+ password: password
+ })
+ )
+ navigate("/home");
+ toastSuccessNotify("Login successfully!")
+ } catch (error) {
+ toastErrorNotify(error.message);
+ }
+};
+
+export const signUpProvider = (navigate,dispatch) => {
+ //? Google ile giriş yapılması için kullanılan firebase metodu
+ const provider = new GoogleAuthProvider();
+ //? Açılır pencere ile giriş yapılması için kullanılan firebase metodu
+ signInWithPopup(auth, provider)
+ .then(({user})=>{
+ dispatch(
+ setUser({
+ displayName: user.displayName,
+ email: user.email,
+ photoUrl: user.photoUrl
+ })
+ )
+ navigate("/home");
+ toastSuccessNotify("Login successfully!!");
+})
+ .catch((error) => {
+ // Handle Errors here.
+ toastErrorNotify(error);
+ });
+};
+
diff --git a/src/features/authSlice.jsx b/src/features/authSlice.jsx
new file mode 100644
index 0000000..41e67b1
--- /dev/null
+++ b/src/features/authSlice.jsx
@@ -0,0 +1,26 @@
+import { createSlice } from "@reduxjs/toolkit";
+
+export const initialState = {
+ user: {
+ displayName: "",
+ email: "",
+ pasword:""
+ },
+};
+
+const authSlice = createSlice({
+ name: "auth",
+ initialState,
+ reducers: {
+ setUser: (state, action) => {
+ state.user = action.payload;
+ },
+ clearUser: (state, action) => {
+ state.user = initialState;
+ },
+ },
+});
+
+export const { setUser, clearUser } = authSlice.actions;
+
+export default authSlice.reducer;
diff --git a/src/helper/Toastfy.js b/src/helper/Toastfy.js
new file mode 100644
index 0000000..2b41143
--- /dev/null
+++ b/src/helper/Toastfy.js
@@ -0,0 +1,31 @@
+import { toast } from "react-toastify";
+export const toastWarnNotify = (msg) => {
+ toast.warn(msg, {
+ autoClose: 5000,
+ hideProgressBar: false,
+ closeOnClick: true,
+ pauseOnHover: true,
+ draggable: true,
+ progress: undefined,
+ });
+};
+export const toastSuccessNotify = (msg) => {
+ toast.success(msg, {
+ autoClose: 3000,
+ hideProgressBar: false,
+ closeOnClick: true,
+ pauseOnHover: true,
+ draggable: true,
+ progress: undefined,
+ });
+};
+export const toastErrorNotify = (msg) => {
+ toast.error(msg, {
+ autoClose: 5000,
+ hideProgressBar: false,
+ closeOnClick: true,
+ pauseOnHover: true,
+ draggable: true,
+ progress: undefined,
+ });
+};
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index 7765cb2..4322edf 100644
--- a/src/index.js
+++ b/src/index.js
@@ -2,13 +2,16 @@ import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
+import 'tw-elements';
+import { BrowserRouter as Router} from 'react-router-dom';
+
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
-
+
-
+
);
// If you want to start measuring performance in your app, pass a function
diff --git a/src/output.css b/src/output.css
index 8e5c9ef..ccf49eb 100644
--- a/src/output.css
+++ b/src/output.css
@@ -41,7 +41,7 @@ html {
/* 3 */
tab-size: 4;
/* 3 */
- font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ font-family: Inter, sans-serif;
/* 4 */
-webkit-font-feature-settings: normal;
font-feature-settings: normal;
@@ -125,7 +125,7 @@ code,
kbd,
samp,
pre {
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-family: ui-monospace, monospace;
/* 1 */
font-size: 1em;
/* 2 */
@@ -558,3 +558,4300 @@ video {
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
+
+.container {
+ width: 100%;
+}
+
+@media (min-width: 640px) {
+ .container {
+ max-width: 640px;
+ }
+}
+
+@media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+}
+
+@media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
+ }
+}
+
+@media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
+ }
+}
+
+@media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
+ }
+}
+
+: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-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", Arial, "Noto Sans", "Liberation Sans", 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;
+}
+
+.form-control[type=file] {
+ overflow: hidden;
+}
+
+.form-control[type=file]:not(:disabled):not([readonly]) {
+ cursor: pointer;
+}
+
+.form-control:focus {
+ box-shadow: 0 0 0 1px #2563eb;
+}
+
+.form-control::-webkit-file-upload-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;
+ -webkit-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;
+ 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;
+}
+
+.form-control::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;
+}
+
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+ background-color: #dde0e3;
+}
+
+.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
+ background-color: #dde0e3;
+}
+
+.form-control::-webkit-file-upload-button {
+ padding: 0.375rem 0.75rem;
+ margin: -0.375rem -0.75rem;
+ -webkit-margin-end: 0.75rem;
+ margin-inline-end: 0.75rem;
+ color: #374151;
+ background-color: #f3f4f6;
+ pointer-events: none;
+ border-color: inherit;
+ border-style: solid;
+ border-width: 0;
+ border-inline-end-width: 1px;
+ border-radius: 0;
+ -webkit-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;
+ 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;
+}
+
+.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
+ background-color: #dde0e3;
+}
+
+.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 10l3 3l6-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;
+ -webkit-filter: none;
+ filter: none;
+ opacity: 0.5;
+}
+
+.form-switch .form-check-input {
+ margin-top: 0.1rem;
+ 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");
+ background-position: left center;
+ transition: background-position 0.15s ease-in-out;
+}
+
+.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='%23fff'/%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-floating > .form-control {
+ height: calc(3.5rem + 2px);
+ line-height: 1.25;
+ padding: 1rem 0.75rem;
+}
+
+.form-floating > .form-control::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.form-floating > .form-control::placeholder {
+ color: transparent;
+}
+
+.form-floating > .form-control:focus {
+ padding-top: 1.625rem;
+ padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:not(:placeholder-shown) {
+ padding-top: 1.625rem;
+ padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:-webkit-autofill {
+ padding-top: 1.625rem;
+ padding-bottom: 0.625rem;
+}
+
+.form-floating > .form-control:focus ~ label {
+ opacity: 0.65;
+ -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+ transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.form-floating > .form-control:not(:placeholder-shown) ~ label {
+ opacity: 0.65;
+ -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+ transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
+}
+
+.input-group > .form-control {
+ width: 1%;
+}
+
+.input-group > .form-control:focus {
+ z-index: 3;
+}
+
+.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.was-validated .form-control:valid {
+ 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.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: right calc(0.375em + 0.1875rem) center;
+ background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+
+.form-control.is-valid {
+ 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.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
+ background-repeat: no-repeat;
+ background-position: 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 {
+ border-color: #198754;
+ box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+
+.form-control.is-valid:focus {
+ border-color: #198754;
+ box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+
+.was-validated textarea.form-control:valid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+textarea.form-control.is-valid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+.was-validated .form-check-input:valid {
+ border-color: #198754;
+}
+
+.form-check-input.is-valid {
+ border-color: #198754;
+}
+
+.was-validated .form-check-input:valid:checked {
+ background-color: #198754;
+}
+
+.form-check-input.is-valid:checked {
+ background-color: #198754;
+}
+
+.was-validated .form-check-input:valid:focus {
+ box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+}
+
+.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 {
+ color: #198754;
+}
+
+.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:valid {
+ z-index: 1;
+}
+
+.input-group .form-control.is-valid {
+ z-index: 1;
+}
+
+.was-validated .input-group .form-control:valid:focus {
+ z-index: 3;
+}
+
+.input-group .form-control.is-valid:focus {
+ z-index: 3;
+}
+
+.is-invalid ~ .invalid-feedback {
+ display: block;
+}
+
+.is-invalid ~ .invalid-tooltip {
+ display: block;
+}
+
+.was-validated .form-control:invalid {
+ border-color: #dc3545;
+ padding-right: calc(1.5em + 0.75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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);
+}
+
+.form-control.is-invalid {
+ border-color: #dc3545;
+ padding-right: calc(1.5em + 0.75rem);
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' 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 {
+ border-color: #dc3545;
+ box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.form-control.is-invalid:focus {
+ border-color: #dc3545;
+ box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.was-validated textarea.form-control:invalid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+textarea.form-control.is-invalid {
+ padding-right: calc(1.5em + 0.75rem);
+ background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
+}
+
+.form-select.is-invalid {
+ border-color: #dc3545;
+}
+
+.form-select.is-invalid:not([multiple]):not([size]) {
+ 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 5l6 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);
+}
+
+.form-select.is-invalid: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 5l6 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);
+}
+
+.form-select.is-invalid:focus {
+ border-color: #dc3545;
+ box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.was-validated .form-check-input:invalid {
+ border-color: #dc3545;
+}
+
+.form-check-input.is-invalid {
+ border-color: #dc3545;
+}
+
+.was-validated .form-check-input:invalid:checked {
+ background-color: #dc3545;
+}
+
+.form-check-input.is-invalid:checked {
+ background-color: #dc3545;
+}
+
+.was-validated .form-check-input:invalid:focus {
+ box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+}
+
+.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 {
+ color: #dc3545;
+}
+
+.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:invalid {
+ z-index: 2;
+}
+
+.input-group .form-control.is-invalid {
+ z-index: 2;
+}
+
+.input-group .form-select.is-invalid {
+ z-index: 2;
+}
+
+.was-validated .input-group .form-control:invalid:focus {
+ z-index: 3;
+}
+
+.input-group .form-control.is-invalid:focus {
+ z-index: 3;
+}
+
+.input-group .form-select.is-invalid:focus {
+ z-index: 3;
+}
+
+.btn.active {
+ box-shadow: none;
+}
+
+.btn.active:focus {
+ box-shadow: none;
+}
+
+.fade {
+ transition: opacity 0.15s linear;
+}
+
+.fade:not(.show) {
+ opacity: 0;
+}
+
+.collapse:not(.show) {
+ display: none;
+}
+
+.collapsing {
+ height: 0;
+ overflow: hidden;
+ transition: height 0.35s ease;
+}
+
+.collapsing.collapse-horizontal {
+ width: 0;
+ height: auto;
+ transition: width 0.35s ease;
+}
+
+.dropdown-menu {
+ z-index: 1000;
+}
+
+.dropdown-item.active {
+ color: #1f2937;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ background-color: #0d6efd;
+}
+
+.dropdown-item:active {
+ color: #1f2937;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ background-color: #0d6efd;
+}
+
+.dropdown-item:disabled {
+ color: #adb5bd;
+ pointer-events: none;
+ background-color: transparent;
+}
+
+.dropdown-menu.show {
+ display: block;
+}
+
+.dropdown-menu-dark .dropdown-item.active {
+ color: #fff;
+ background-color: #0d6efd;
+}
+
+.dropdown-menu-dark .dropdown-item:active {
+ color: #fff;
+ background-color: #0d6efd;
+}
+
+.dropdown-menu-dark .dropdown-item.disabled {
+ color: #adb5bd;
+}
+
+.dropdown-menu-dark .dropdown-item:disabled {
+ color: #adb5bd;
+}
+
+.nav-tabs .nav-link {
+ color: #4b5563;
+}
+
+.nav-tabs .nav-link:hover {
+ isolation: isolate;
+}
+
+.nav-tabs .nav-link:focus {
+ isolation: isolate;
+}
+
+.nav-tabs .nav-link.disabled {
+ color: #9ca3af;
+ background-color: transparent;
+ border-color: transparent;
+}
+
+.nav-tabs .nav-link.active {
+ color: #2563eb;
+ border-color: #2563eb;
+}
+
+.nav-tabs .nav-item.show .nav-link {
+ color: #2563eb;
+ border-color: #2563eb;
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.nav-pills .nav-link {
+ background: #f3f4f6;
+ color: #4b5563;
+ box-shadow: none;
+}
+
+.nav-pills .nav-link.active {
+ background: #2563eb;
+ color: #fff;
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+}
+
+.nav-pills .show > .nav-link {
+ background: #2563eb;
+ color: #fff;
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
+}
+
+.nav-pills .disabled {
+ color: #9ca3af;
+ background-color: rgba(243, 244, 246, 0.5);
+}
+
+.nav-pills.menu-sidebar .nav-link {
+ background-color: transparent;
+ box-shadow: none;
+ padding: 0 5px;
+ border-radius: 0;
+}
+
+.nav-pills.menu-sidebar .nav-link.active {
+ color: #1266f1;
+ font-weight: 600;
+ border-left: 0.125rem solid #1266f1;
+}
+
+.nav-justified > .nav-link {
+ -ms-flex-basis: 0;
+ flex-basis: 0;
+}
+
+.nav-justified .nav-item {
+ -ms-flex-basis: 0;
+ flex-basis: 0;
+}
+
+.tab-content > .active {
+ display: block;
+}
+
+.navbar-expand .navbar-nav {
+ flex-direction: row;
+}
+
+.navbar-expand .navbar-nav .dropdown-menu {
+ position: absolute;
+}
+
+.navbar-expand .navbar-nav .nav-link {
+ padding-right: 0.5rem;
+ padding-left: 0.5rem;
+}
+
+.navbar-expand .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ -webkit-transform: none;
+ transform: none;
+}
+
+.navbar-light .navbar-nav .nav-link.disabled {
+ color: rgba(0, 0, 0, 0.3);
+}
+
+.navbar-light .navbar-nav .show > .nav-link {
+ color: rgba(0, 0, 0, 0.9);
+}
+
+.navbar-light .navbar-nav .nav-link.active {
+ color: rgba(0, 0, 0, 0.9);
+}
+
+.navbar-dark .navbar-nav .nav-link.disabled {
+ color: rgba(255, 255, 255, 0.25);
+}
+
+.navbar-dark .navbar-nav .show > .nav-link {
+ color: #fff;
+}
+
+.navbar-dark .navbar-nav .nav-link.active {
+ color: #fff;
+}
+
+.accordion-item:last-of-type .accordion-button.collapsed {
+ border-bottom-right-radius: calc(0.5rem - 1px);
+ border-bottom-left-radius: calc(0.5rem - 1px);
+}
+
+.btn-close.disabled {
+ pointer-events: none;
+ -webkit-user-select: none;
+ user-select: none;
+ opacity: 0.25;
+}
+
+.modal {
+ z-index: 1055;
+}
+
+.modal-dialog {
+ margin: 0.5rem;
+}
+
+.modal.fade .modal-dialog {
+ transition: -webkit-transform 0.3s ease-out;
+ transition: transform 0.3s ease-out;
+ transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;
+ -webkit-transform: translate(0, -50px);
+ transform: translate(0, -50px);
+}
+
+.modal.show .modal-dialog {
+ -webkit-transform: none;
+ transform: none;
+}
+
+.modal.modal-static .modal-dialog {
+ -webkit-transform: scale(1.02);
+ transform: scale(1.02);
+}
+
+.modal-dialog-scrollable .modal-body {
+ overflow-y: auto;
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1050;
+ width: 100vw;
+ height: 100vh;
+ background-color: #000;
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+}
+
+.modal-backdrop.show {
+ opacity: 0.5;
+}
+
+.modal-body {
+ flex: 1 1 auto;
+}
+
+.modal-fullscreen .modal-body {
+ overflow-y: auto;
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1080;
+ display: block;
+ margin: 0;
+ font-family: var(--bs-font-sans-serif);
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ -webkit-text-align: start;
+ text-align: start;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ -webkit-text-shadow: none;
+ text-shadow: none;
+ -webkit-text-transform: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: 0.875rem;
+ word-wrap: break-word;
+ opacity: 0;
+}
+
+.tooltip.show {
+ opacity: 1;
+}
+
+.bs-tooltip-top .tooltip-arrow {
+ bottom: 0;
+}
+
+.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {
+ bottom: 0;
+}
+
+.bs-tooltip-top .tooltip-arrow::before {
+ top: -1px;
+ border-width: 0.4rem 0.4rem 0;
+ border-top-color: #000;
+}
+
+.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {
+ top: -1px;
+ border-width: 0.4rem 0.4rem 0;
+ border-top-color: #000;
+}
+
+.bs-tooltip-end .tooltip-arrow {
+ left: 0;
+ width: 0.4rem;
+ height: 0.8rem;
+}
+
+.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {
+ left: 0;
+ width: 0.4rem;
+ height: 0.8rem;
+}
+
+.bs-tooltip-end .tooltip-arrow::before {
+ right: -1px;
+ border-width: 0.4rem 0.4rem 0.4rem 0;
+ border-right-color: #000;
+}
+
+.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {
+ right: -1px;
+ border-width: 0.4rem 0.4rem 0.4rem 0;
+ border-right-color: #000;
+}
+
+.bs-tooltip-bottom .tooltip-arrow {
+ top: 0;
+}
+
+.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {
+ top: 0;
+}
+
+.bs-tooltip-bottom .tooltip-arrow::before {
+ bottom: -1px;
+ border-width: 0 0.4rem 0.4rem;
+ border-bottom-color: #000;
+}
+
+.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {
+ bottom: -1px;
+ border-width: 0 0.4rem 0.4rem;
+ border-bottom-color: #000;
+}
+
+.bs-tooltip-start .tooltip-arrow {
+ right: 0;
+ width: 0.4rem;
+ height: 0.8rem;
+}
+
+.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {
+ right: 0;
+ width: 0.4rem;
+ height: 0.8rem;
+}
+
+.bs-tooltip-start .tooltip-arrow::before {
+ left: -1px;
+ border-width: 0.4rem 0 0.4rem 0.4rem;
+ border-left-color: #000;
+}
+
+.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {
+ left: -1px;
+ border-width: 0.4rem 0 0.4rem 0.4rem;
+ border-left-color: #000;
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ font-size: 14px;
+ padding: 6px 16px;
+ color: #fff;
+ -webkit-text-align: center;
+ text-align: center;
+ background-color: #6d6d6d;
+ border-radius: 0.25rem;
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1070;
+ display: block;
+ max-width: 276px;
+ font-family: var(--bs-font-sans-serif);
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1.5;
+ -webkit-text-align: start;
+ text-align: start;
+ -webkit-text-decoration: none;
+ text-decoration: none;
+ -webkit-text-shadow: none;
+ text-shadow: none;
+ -webkit-text-transform: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ white-space: normal;
+ line-break: auto;
+ font-size: 0.875rem;
+ word-wrap: break-word;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 0;
+ border-radius: 0.5rem;
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+}
+
+.bs-popover-top > .popover-arrow {
+ bottom: calc(-0.5rem - 1px);
+}
+
+.bs-popover-auto[data-popper-placement^=top] > .popover-arrow {
+ bottom: calc(-0.5rem - 1px);
+}
+
+.bs-popover-top > .popover-arrow::before {
+ bottom: 0;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {
+ bottom: 0;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-top > .popover-arrow::after {
+ bottom: 1px;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: #fff;
+}
+
+.bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {
+ bottom: 1px;
+ border-width: 0.5rem 0.5rem 0;
+ border-top-color: #fff;
+}
+
+.bs-popover-end > .popover-arrow {
+ left: calc(-0.5rem - 1px);
+ width: 0.5rem;
+ height: 1rem;
+}
+
+.bs-popover-auto[data-popper-placement^=right] > .popover-arrow {
+ left: calc(-0.5rem - 1px);
+ width: 0.5rem;
+ height: 1rem;
+}
+
+.bs-popover-end > .popover-arrow::before {
+ left: 0;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {
+ left: 0;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-end > .popover-arrow::after {
+ left: 1px;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: #fff;
+}
+
+.bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {
+ left: 1px;
+ border-width: 0.5rem 0.5rem 0.5rem 0;
+ border-right-color: #fff;
+}
+
+.bs-popover-bottom > .popover-arrow {
+ top: calc(-0.5rem - 1px);
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {
+ top: calc(-0.5rem - 1px);
+}
+
+.bs-popover-bottom > .popover-arrow::before {
+ top: 0;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {
+ top: 0;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-bottom > .popover-arrow::after {
+ top: 1px;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: #fff;
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {
+ top: 1px;
+ border-width: 0 0.5rem 0.5rem 0.5rem;
+ border-bottom-color: #fff;
+}
+
+.bs-popover-bottom .popover-header::before {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ display: block;
+ width: 1rem;
+ margin-left: -0.5rem;
+ content: "";
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ display: block;
+ width: 1rem;
+ margin-left: -0.5rem;
+ content: "";
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.bs-popover-start > .popover-arrow {
+ right: calc(-0.5rem - 1px);
+ width: 0.5rem;
+ height: 1rem;
+}
+
+.bs-popover-auto[data-popper-placement^=left] > .popover-arrow {
+ right: calc(-0.5rem - 1px);
+ width: 0.5rem;
+ height: 1rem;
+}
+
+.bs-popover-start > .popover-arrow::before {
+ right: 0;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {
+ right: 0;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: rgba(0, 0, 0, 0.25);
+}
+
+.bs-popover-start > .popover-arrow::after {
+ right: 1px;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: #fff;
+}
+
+.bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {
+ right: 1px;
+ border-width: 0.5rem 0 0.5rem 0.5rem;
+ border-left-color: #fff;
+}
+
+.popover-header {
+ padding: 0.5rem 1rem;
+ margin-bottom: 0;
+ font-size: 1rem;
+ background-color: #fff;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+ border-top-left-radius: 0.5rem;
+ border-top-right-radius: 0.5rem;
+ font-weight: 500;
+}
+
+.popover-header:empty {
+ display: none;
+}
+
+.popover-body {
+ padding: 1rem 1rem;
+ color: #212529;
+}
+
+.carousel.pointer-event {
+ touch-action: pan-y;
+}
+
+.carousel-item {
+ display: none;
+ margin-right: -100%;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ transition: -webkit-transform 0.6s ease-in-out;
+ transition: transform 0.6s ease-in-out;
+ transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
+}
+
+.carousel-item.active {
+ display: block;
+}
+
+.carousel-item-next {
+ display: block;
+}
+
+.carousel-item-prev {
+ display: block;
+}
+
+.carousel-item-next:not(.carousel-item-start) {
+ -webkit-transform: translateX(100%);
+ transform: translateX(100%);
+}
+
+.active.carousel-item-end {
+ -webkit-transform: translateX(100%);
+ transform: translateX(100%);
+}
+
+.carousel-item-prev:not(.carousel-item-end) {
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%);
+}
+
+.active.carousel-item-start {
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%);
+}
+
+.carousel-fade .carousel-item {
+ opacity: 0;
+ transition-property: opacity;
+ -webkit-transform: none;
+ transform: none;
+}
+
+.carousel-fade .carousel-item.active {
+ z-index: 1;
+ opacity: 1;
+}
+
+.carousel-fade .carousel-item-next.carousel-item-start {
+ z-index: 1;
+ opacity: 1;
+}
+
+.carousel-fade .carousel-item-prev.carousel-item-end {
+ z-index: 1;
+ opacity: 1;
+}
+
+.carousel-fade .active.carousel-item-start {
+ z-index: 0;
+ opacity: 0;
+ transition: opacity 0s 0.6s;
+}
+
+.carousel-fade .active.carousel-item-end {
+ z-index: 0;
+ opacity: 0;
+ transition: opacity 0s 0.6s;
+}
+
+.carousel-indicators {
+ z-index: 2;
+ margin-right: 15%;
+ 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;
+ -webkit-text-indent: -999px;
+ 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;
+}
+
+.carousel-indicators .active {
+ opacity: 1;
+}
+
+.carousel-dark .carousel-indicators [data-bs-target] {
+ background-color: #000;
+}
+
+.offcanvas {
+ z-index: 1045;
+}
+
+.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.show {
+ -webkit-transform: none;
+ transform: none;
+}
+
+.sticky-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+}
+
+.vr {
+ display: inline-block;
+ align-self: stretch;
+ width: 1px;
+ min-height: 1em;
+ background-color: currentColor;
+ opacity: 0.25;
+}
+
+.animation {
+ -webkit-animation-duration: 1s;
+ animation-duration: 1s;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+ padding: auto;
+}
+
+.fade-in {
+ -webkit-animation-name: _fade-in;
+ animation-name: _fade-in;
+}
+
+.fade-out {
+ -webkit-animation-name: _fade-out;
+ animation-name: _fade-out;
+}
+
+.animation.infinite {
+ -webkit-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+}
+
+.animation.delay-1s {
+ -webkit-animation-delay: 1s;
+ animation-delay: 1s;
+}
+
+.animation.delay-2s {
+ -webkit-animation-delay: 2s;
+ animation-delay: 2s;
+}
+
+.animation.delay-3s {
+ -webkit-animation-delay: 3s;
+ animation-delay: 3s;
+}
+
+.animation.delay-4s {
+ -webkit-animation-delay: 4s;
+ animation-delay: 4s;
+}
+
+.animation.delay-5s {
+ -webkit-animation-delay: 5s;
+ animation-delay: 5s;
+}
+
+.animation.fast {
+ -webkit-animation-duration: 800ms;
+ animation-duration: 800ms;
+}
+
+.animation.faster {
+ -webkit-animation-duration: 500ms;
+ animation-duration: 500ms;
+}
+
+.animation.slow {
+ -webkit-animation-duration: 2s;
+ animation-duration: 2s;
+}
+
+.animation.slower {
+ -webkit-animation-duration: 3s;
+ animation-duration: 3s;
+}
+
+.slide-in-left {
+ -webkit-animation-name: _slide-in-left;
+ animation-name: _slide-in-left;
+}
+
+.slide-in-right {
+ -webkit-animation-name: _slide-in-right;
+ animation-name: _slide-in-right;
+}
+
+.slide-out-left {
+ -webkit-animation-name: _slide-out-left;
+ animation-name: _slide-out-left;
+}
+
+.slide-out-right {
+ -webkit-animation-name: _slide-out-right;
+ animation-name: _slide-out-right;
+}
+
+.ripple-surface {
+ position: relative;
+ overflow: hidden;
+ display: inline-block;
+ vertical-align: bottom;
+}
+
+.ripple-surface-unbound {
+ overflow: visible;
+}
+
+.ripple-wave {
+ background-image: radial-gradient(circle, rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, transparent 70%);
+ border-radius: 50%;
+ opacity: 0.5;
+ pointer-events: none;
+ position: absolute;
+ touch-action: none;
+ -webkit-transform: scale(0);
+ transform: scale(0);
+ transition-property: opacity, -webkit-transform;
+ transition-property: transform, opacity;
+ transition-property: transform, opacity, -webkit-transform;
+ transition-timing-function: cubic-bezier(0, 0, 0.15, 1), cubic-bezier(0, 0, 0.15, 1);
+ z-index: 999;
+}
+
+.ripple-wave.active {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ opacity: 0;
+}
+
+.btn .ripple-wave {
+ background-image: radial-gradient(circle, rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+}
+
+.ripple-surface-primary .ripple-wave {
+ background-image: radial-gradient(circle, rgba(18, 102, 241, 0.2) 0, rgba(18, 102, 241, 0.3) 40%, rgba(18, 102, 241, 0.4) 50%, rgba(18, 102, 241, 0.5) 60%, rgba(18, 102, 241, 0) 70%);
+}
+
+.ripple-surface-secondary .ripple-wave {
+ background-image: radial-gradient(circle, rgba(178, 60, 253, 0.2) 0, rgba(178, 60, 253, 0.3) 40%, rgba(178, 60, 253, 0.4) 50%, rgba(178, 60, 253, 0.5) 60%, rgba(178, 60, 253, 0) 70%);
+}
+
+.ripple-surface-success .ripple-wave {
+ background-image: radial-gradient(circle, rgba(0, 183, 74, 0.2) 0, rgba(0, 183, 74, 0.3) 40%, rgba(0, 183, 74, 0.4) 50%, rgba(0, 183, 74, 0.5) 60%, rgba(0, 183, 74, 0) 70%);
+}
+
+.ripple-surface-info .ripple-wave {
+ background-image: radial-gradient(circle, rgba(57, 192, 237, 0.2) 0, rgba(57, 192, 237, 0.3) 40%, rgba(57, 192, 237, 0.4) 50%, rgba(57, 192, 237, 0.5) 60%, rgba(57, 192, 237, 0) 70%);
+}
+
+.ripple-surface-warning .ripple-wave {
+ background-image: radial-gradient(circle, rgba(255, 169, 0, 0.2) 0, rgba(255, 169, 0, 0.3) 40%, rgba(255, 169, 0, 0.4) 50%, rgba(255, 169, 0, 0.5) 60%, rgba(255, 169, 0, 0) 70%);
+}
+
+.ripple-surface-danger .ripple-wave {
+ background-image: radial-gradient(circle, rgba(249, 49, 84, 0.2) 0, rgba(249, 49, 84, 0.3) 40%, rgba(249, 49, 84, 0.4) 50%, rgba(249, 49, 84, 0.5) 60%, rgba(249, 49, 84, 0) 70%);
+}
+
+.ripple-surface-light .ripple-wave {
+ background-image: radial-gradient(circle, rgba(251, 251, 251, 0.2) 0, rgba(251, 251, 251, 0.3) 40%, rgba(251, 251, 251, 0.4) 50%, rgba(251, 251, 251, 0.5) 60%, rgba(251, 251, 251, 0) 70%);
+}
+
+.ripple-surface-dark .ripple-wave {
+ background-image: radial-gradient(circle, rgba(38, 38, 38, 0.2) 0, rgba(38, 38, 38, 0.3) 40%, rgba(38, 38, 38, 0.4) 50%, rgba(38, 38, 38, 0.5) 60%, rgba(38, 38, 38, 0) 70%);
+}
+
+.ripple-surface-white .ripple-wave {
+ background-image: radial-gradient(circle, rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+}
+
+.ripple-surface-black .ripple-wave {
+ background-image: radial-gradient(circle, rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, transparent 70%);
+}
+
+.datepicker-toggle-button {
+ position: absolute;
+ outline: none;
+ border: none;
+ background-color: transparent;
+ right: 10px;
+ top: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+}
+
+.datepicker-toggle-button:focus {
+ color: #2979ff;
+}
+
+.datepicker-toggle-button:hover {
+ color: #2979ff;
+}
+
+.datepicker-backdrop {
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.4);
+ z-index: 1065;
+}
+
+.datepicker-dropdown-container {
+ width: 328px;
+ height: 380px;
+ background-color: #fff;
+ border-radius: 0.5rem;
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+ z-index: 1066;
+}
+
+.datepicker-modal-container {
+ display: flex;
+ flex-direction: column;
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ width: 328px;
+ height: 512px;
+ background-color: #fff;
+ border-radius: 0.6rem 0.6rem 0.5rem 0.5rem;
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+ z-index: 1066;
+}
+
+.datepicker-header {
+ height: 120px;
+ padding-right: 24px;
+ padding-left: 24px;
+ background-color: #2979ff;
+ display: flex;
+ flex-direction: column;
+ border-radius: 0.5rem 0.5rem 0 0;
+}
+
+.datepicker-title {
+ height: 32px;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-end;
+}
+
+.datepicker-title-text {
+ font-size: 10px;
+ font-weight: 400;
+ -webkit-text-transform: uppercase;
+ text-transform: uppercase;
+ letter-spacing: 1.7px;
+ color: #fff;
+}
+
+.datepicker-date {
+ height: 72px;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-end;
+}
+
+.datepicker-date-text {
+ font-size: 34px;
+ font-weight: 400;
+ color: #fff;
+}
+
+.datepicker-main {
+ position: relative;
+ height: 100%;
+}
+
+.datepicker-date-controls {
+ padding: 10px 12px 0 12px;
+ display: flex;
+ justify-content: space-between;
+ color: rgba(0, 0, 0, 0.64);
+}
+
+.datepicker-view-change-button {
+ padding: 10px;
+ color: #666;
+ font-weight: 500;
+ font-size: 0.9rem;
+ border-radius: 10px;
+ box-shadow: none;
+ background-color: transparent;
+ margin: 0;
+ border: none;
+}
+
+.datepicker-view-change-button:hover {
+ background-color: #eee;
+}
+
+.datepicker-view-change-button:focus {
+ background-color: #eee;
+}
+
+.datepicker-view-change-button:after {
+ content: "";
+ display: inline-block;
+ width: 0;
+ height: 0;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-top-width: 5px;
+ border-top-style: solid;
+ margin: 0 0 0 5px;
+ vertical-align: middle;
+}
+
+.datepicker-arrow-controls {
+ margin-top: 10px;
+}
+
+.datepicker-previous-button {
+ position: relative;
+ padding: 0;
+ width: 40px;
+ height: 40px;
+ line-height: 40px;
+ border: none;
+ outline: none;
+ margin: 0;
+ color: rgba(0, 0, 0, 0.64);
+ background-color: transparent;
+ margin-right: 24px;
+}
+
+.datepicker-previous-button:hover {
+ background-color: #eee;
+ border-radius: 50%;
+}
+
+.datepicker-previous-button:focus {
+ background-color: #eee;
+ border-radius: 50%;
+}
+
+.datepicker-previous-button::after {
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ position: absolute;
+ content: "";
+ margin: 15.5px;
+ border: 0 solid currentColor;
+ border-top-width: 2px;
+ border-left-width: 2px;
+ -webkit-transform: translateX(2px) rotate(-45deg);
+ transform: translateX(2px) rotate(-45deg);
+}
+
+.datepicker-next-button {
+ position: relative;
+ padding: 0;
+ width: 40px;
+ height: 40px;
+ line-height: 40px;
+ border: none;
+ outline: none;
+ margin: 0;
+ color: rgba(0, 0, 0, 0.64);
+ background-color: transparent;
+}
+
+.datepicker-next-button:hover {
+ background-color: #eee;
+ border-radius: 50%;
+}
+
+.datepicker-next-button:focus {
+ background-color: #eee;
+ border-radius: 50%;
+}
+
+.datepicker-next-button::after {
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ position: absolute;
+ content: "";
+ margin: 15.5px;
+ border: 0 solid currentColor;
+ border-top-width: 2px;
+ border-right-width: 2px;
+ -webkit-transform: translateX(-2px) rotate(45deg);
+ transform: translateX(-2px) rotate(45deg);
+}
+
+.datepicker-view {
+ padding-left: 12px;
+ padding-right: 12px;
+ outline: none;
+}
+
+.datepicker-table {
+ margin-right: auto;
+ margin-left: auto;
+ width: 304px;
+}
+
+.datepicker-day-heading {
+ width: 40px;
+ height: 40px;
+ -webkit-text-align: center;
+ text-align: center;
+ font-size: 12px;
+ font-weight: 400;
+}
+
+.datepicker-cell {
+ -webkit-text-align: center;
+ text-align: center;
+}
+
+.datepicker-cell.disabled {
+ color: #ccc;
+ cursor: default;
+ pointer-events: none;
+}
+
+.datepicker-cell.disabled:hover {
+ cursor: default;
+}
+
+.datepicker-cell:hover {
+ cursor: pointer;
+}
+
+.datepicker-cell:not(.disabled):not(.selected):hover .datepicker-cell-content {
+ background-color: #d3d3d3;
+}
+
+.datepicker-cell.selected .datepicker-cell-content {
+ background-color: #2979ff;
+ color: #fff;
+}
+
+.datepicker-cell:not(.selected).focused .datepicker-cell-content {
+ background-color: #eee;
+}
+
+.datepicker-cell.focused .datepicker-cell-content.selected {
+ background-color: #2979ff;
+}
+
+.datepicker-cell.current .datepicker-cell-content {
+ border: 1px solid #000;
+}
+
+.datepicker-small-cell {
+ width: 40px;
+ height: 40px;
+}
+
+.datepicker-small-cell-content {
+ width: 36px;
+ height: 36px;
+ line-height: 36px;
+ border-radius: 50%;
+ font-size: 13px;
+}
+
+.datepicker-large-cell {
+ width: 76px;
+ height: 42px;
+}
+
+.datepicker-large-cell-content {
+ width: 72px;
+ height: 40px;
+ line-height: 40px;
+ padding: 1px 2px;
+ border-radius: 999px;
+}
+
+.datepicker-footer {
+ height: 56px;
+ display: flex;
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ justify-content: flex-end;
+ align-items: center;
+ padding-left: 12px;
+ padding-right: 12px;
+}
+
+.datepicker-footer-btn {
+ background-color: #fff;
+ color: #2979ff;
+ border: none;
+ cursor: pointer;
+ padding: 0 10px;
+ -webkit-text-transform: uppercase;
+ text-transform: uppercase;
+ font-size: 0.8rem;
+ font-weight: 500;
+ height: 40px;
+ line-height: 40px;
+ letter-spacing: 0.1rem;
+ border-radius: 10px;
+ margin-bottom: 10px;
+}
+
+.datepicker-footer-btn:hover {
+ background-color: #eee;
+}
+
+.datepicker-footer-btn:focus {
+ background-color: #eee;
+}
+
+.datepicker-clear-btn {
+ margin-right: auto;
+}
+
+.timepicker-wrapper {
+ touch-action: none;
+ z-index: 1065;
+ opacity: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.4);
+}
+
+.timepicker-elements {
+ min-width: 310px;
+ min-height: 325px;
+ background: #fff;
+ border-top-right-radius: 0.6rem;
+ border-top-left-radius: 0.6rem;
+}
+
+.timepicker-head {
+ background-color: #2979ff;
+ height: 100px;
+ border-top-right-radius: 0.5rem;
+ border-top-left-radius: 0.5rem;
+ padding: 10px 24px 10px 50px;
+}
+
+.timepicker-button {
+ font-size: 0.8rem;
+ min-width: 64px;
+ box-sizing: border-box;
+ font-weight: 500;
+ line-height: 40px;
+ border-radius: 10px;
+ letter-spacing: 0.1rem;
+ -webkit-text-transform: uppercase;
+ text-transform: uppercase;
+ color: #2979ff;
+ border: none;
+ background-color: transparent;
+ transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
+ outline: none;
+ padding: 0 10px;
+ height: 40px;
+ margin-bottom: 10px;
+}
+
+.timepicker-button:hover {
+ background-color: rgba(0, 0, 0, 0.08);
+}
+
+.timepicker-button:focus {
+ outline: none;
+ background-color: rgba(0, 0, 0, 0.08);
+}
+
+.timepicker-current {
+ font-size: 3.75rem;
+ font-weight: 300;
+ line-height: 1.2;
+ letter-spacing: -0.00833em;
+ color: #fff;
+ opacity: 0.54;
+ border: none;
+ background: transparent;
+ padding: 0;
+}
+
+.timepicker-current.active {
+ opacity: 1;
+}
+
+.timepicker-current-wrapper {
+ direction: ltr;
+}
+
+.timepicker-mode-wrapper {
+ margin-left: 20px;
+ font-size: 18px;
+ color: rgba(255, 255, 255, 0.54);
+}
+
+.timepicker-mode-wrapper.active {
+ opacity: 1;
+}
+
+.timepicker-clock-wrapper {
+ min-width: 310px;
+ max-width: 325px;
+ min-height: 305px;
+ overflow-x: hidden;
+ height: 100%;
+}
+
+.timepicker-clock {
+ position: relative;
+ border-radius: 100%;
+ width: 260px;
+ height: 260px;
+ cursor: default;
+ margin: 0 auto;
+ background-color: rgba(0, 0, 0, 0.07);
+}
+
+.timepicker-time-tips-minutes.active {
+ color: #fff;
+ background-color: #2979ff;
+ font-weight: 400;
+}
+
+.timepicker-time-tips-inner.active {
+ color: #fff;
+ background-color: #2979ff;
+ font-weight: 400;
+}
+
+.timepicker-time-tips-hours.active {
+ color: #fff;
+ background-color: #2979ff;
+ font-weight: 400;
+}
+
+.timepicker-time-tips-minutes.disabled {
+ color: #b3afaf;
+ pointer-events: none;
+ background-color: transparent;
+}
+
+.timepicker-time-tips-inner.disabled {
+ color: #b3afaf;
+ pointer-events: none;
+ background-color: transparent;
+}
+
+.timepicker-time-tips-hours.disabled {
+ color: #b3afaf;
+ pointer-events: none;
+ background-color: transparent;
+}
+
+.timepicker-dot {
+ font-weight: 300;
+ line-height: 1.2;
+ letter-spacing: -0.00833em;
+ color: #fff;
+ font-size: 3.75rem;
+ opacity: 0.54;
+ border: none;
+ background: transparent;
+ padding: 0;
+}
+
+.timepicker-middle-dot {
+ top: 50%;
+ left: 50%;
+ width: 6px;
+ height: 6px;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ border-radius: 50%;
+ background-color: #2979ff;
+}
+
+.timepicker-hand-pointer {
+ background-color: #2979ff;
+ bottom: 50%;
+ height: 40%;
+ left: calc(50% - 1px);
+ -webkit-transform-origin: center bottom 0;
+ transform-origin: center bottom 0;
+ width: 2px;
+}
+
+.timepicker-time-tips.active {
+ color: #fff;
+}
+
+.timepicker-circle {
+ top: -21px;
+ left: -15px;
+ width: 4px;
+ border: 14px solid #2979ff;
+ height: 4px;
+ box-sizing: content-box;
+ border-radius: 100%;
+}
+
+.timepicker-hour-mode {
+ padding: 0;
+ background-color: transparent;
+ border: none;
+ color: #fff;
+ opacity: 0.54;
+ cursor: pointer;
+}
+
+.timepicker-hour {
+ cursor: pointer;
+}
+
+.timepicker-minute {
+ cursor: pointer;
+}
+
+.timepicker-hour-mode:hover {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-hour-mode:focus {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-hour:hover {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-hour:focus {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-minute:hover {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-minute:focus {
+ background-color: rgba(0, 0, 0, 0.15);
+ outline: none;
+}
+
+.timepicker-hour-mode.active {
+ color: #fff;
+ opacity: 1;
+}
+
+.timepicker-hour.active {
+ color: #fff;
+ opacity: 1;
+}
+
+.timepicker-minute.active {
+ color: #fff;
+ opacity: 1;
+}
+
+.timepicker-footer {
+ border-bottom-left-radius: 0.5rem;
+ border-bottom-right-radius: 0.5rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+ height: 56px;
+ padding-left: 12px;
+ padding-right: 12px;
+ background-color: #fff;
+}
+
+.timepicker-container {
+ max-height: calc(100% - 64px);
+ overflow-y: auto;
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.07), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
+}
+
+.timepicker-icon-up.active {
+ opacity: 1;
+}
+
+.timepicker-icon-down.active {
+ opacity: 1;
+}
+
+.timepicker-toggle-button {
+ position: absolute;
+ outline: none;
+ border: none;
+ background-color: transparent;
+ right: 10px;
+ top: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ transition: all 0.3s ease;
+ cursor: pointer;
+}
+
+.timepicker-toggle-button:hover {
+ color: #2979ff;
+}
+
+.timepicker-toggle-button:focus {
+ color: #2979ff;
+}
+
+.timepicker-input:focus + .timepicker-toggle-button {
+ color: #2979ff;
+}
+
+.timepicker-input:focus + .timepicker-toggle-button i {
+ color: #2979ff;
+}
+
+.timepicker a.timepicker-toggle-button {
+ right: 1px;
+}
+
+.timepicker-toggle-button.timepicker-icon {
+ right: 1px;
+}
+
+.timepicker-modal .fade.show {
+ opacity: 1;
+}
+
+.stepper {
+ position: relative;
+ padding: 0;
+ margin: 0;
+ width: 100%;
+ list-style: none;
+ overflow: hidden;
+ transition: height 0.2s ease-in-out;
+}
+
+.stepper:not(.stepper-vertical) {
+ display: flex;
+ justify-content: space-between;
+}
+
+.stepper:not(.stepper-vertical) .stepper-content {
+ position: absolute;
+ width: 100%;
+ padding: 1rem;
+}
+
+.stepper:not(.stepper-vertical) .stepper-step {
+ flex: auto;
+ height: 4.5rem;
+}
+
+.stepper:not(.stepper-vertical) .stepper-step:first-child .stepper-head {
+ padding-left: 1.5rem;
+}
+
+.stepper:not(.stepper-vertical) .stepper-step:last-child .stepper-head {
+ padding-right: 1.5rem;
+}
+
+.stepper:not(.stepper-vertical) .stepper-step:not(:first-child) .stepper-head:before {
+ flex: 1;
+ height: 1px;
+ width: 100%;
+ margin-right: 0.5rem;
+ content: "";
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+.stepper:not(.stepper-vertical) .stepper-step:not(:last-child) .stepper-head:after {
+ flex: 1;
+ height: 1px;
+ width: 100%;
+ margin-left: 0.5rem;
+ content: "";
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+.stepper:not(.stepper-vertical) .stepper-head-icon {
+ margin: 1.5rem 0.5rem 1.5rem 0;
+}
+
+.stepper.stepper-mobile {
+ justify-content: center;
+ align-items: flex-end;
+}
+
+.stepper.stepper-mobile.stepper-progress-bar .stepper-head-icon {
+ display: none;
+}
+
+.stepper.stepper-mobile .stepper-step {
+ flex: unset;
+ height: -webkit-fit-content;
+ height: -moz-fit-content;
+ height: fit-content;
+ margin: 1rem 0 1rem 0;
+}
+
+.stepper.stepper-mobile .stepper-step:not(:last-child) .stepper-head:after {
+ margin-left: 0;
+}
+
+.stepper.stepper-mobile .stepper-step:not(:first-child) .stepper-head:before {
+ margin-right: 0;
+}
+
+.stepper.stepper-mobile .stepper-step:not(:last-child):not(:first-child) .stepper-head {
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
+}
+
+.stepper.stepper-mobile .stepper-head-icon {
+ font-size: 0;
+ margin: 0;
+ height: 0.5rem;
+ width: 0.5rem;
+ z-index: 1;
+}
+
+.stepper.stepper-mobile .stepper-head-text {
+ display: none;
+}
+
+.stepper.stepper-mobile .stepper-content {
+ top: 2.56rem;
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .form-control::-webkit-file-upload-button {
+ -webkit-transition: none;
+ transition: none;
+ }
+ .form-control::file-selector-button {
+ transition: none;
+ }
+
+ .form-control::-webkit-file-upload-button {
+ -webkit-transition: none;
+ transition: none;
+ }
+
+ .form-switch .form-check-input {
+ transition: none;
+ }
+
+ .form-range::-webkit-slider-thumb {
+ -webkit-transition: none;
+ transition: none;
+ }
+
+ .form-range::-moz-range-thumb {
+ -moz-transition: none;
+ transition: none;
+ }
+
+ .form-floating > label {
+ transition: none;
+ }
+
+ .fade {
+ transition: none;
+ }
+
+ .collapsing {
+ transition: none;
+ }
+
+ .collapsing.collapse-horizontal {
+ transition: none;
+ }
+
+ .accordion-button::after {
+ transition: none;
+ }
+
+ .modal.fade .modal-dialog {
+ transition: none;
+ }
+
+ .carousel-item {
+ transition: none;
+ }
+
+ .carousel-fade .active.carousel-item-start {
+ transition: none;
+ }
+
+ .carousel-fade .active.carousel-item-end {
+ transition: none;
+ }
+
+ .carousel-control-prev {
+ transition: none;
+ }
+
+ .carousel-control-next {
+ transition: none;
+ }
+
+ .carousel-indicators [data-bs-target] {
+ transition: none;
+ }
+
+ .spinner-border {
+ -webkit-animation-duration: 1.5s;
+ animation-duration: 1.5s;
+ }
+
+ .spinner-grow {
+ -webkit-animation-duration: 1.5s;
+ animation-duration: 1.5s;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-sm .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-sm .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-sm .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-sm .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-sm .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ -webkit-transform: none;
+ transform: none;
+ }
+
+ .navbar-expand-sm .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-sm .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-sm .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .modal-dialog {
+ max-width: 500px;
+ margin: 1.75rem auto;
+ }
+
+ .modal-dialog-scrollable {
+ height: calc(100% - 3.5rem);
+ }
+
+ .modal-dialog-centered {
+ min-height: calc(100% - 3.5rem);
+ }
+
+ .modal-sm {
+ max-width: 300px;
+ }
+
+ .sticky-sm-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-md .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-md .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-md .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-md .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-md .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ -webkit-transform: none;
+ transform: none;
+ }
+
+ .navbar-expand-md .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-md .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-md .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .sticky-md-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-lg .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-lg .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-lg .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-lg .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-lg .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ -webkit-transform: none;
+ transform: none;
+ }
+
+ .navbar-expand-lg .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-lg .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-lg .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .modal-lg {
+ max-width: 800px;
+ }
+
+ .modal-xl {
+ max-width: 800px;
+ }
+
+ .sticky-lg-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-xl .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-xl .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-xl .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-xl .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-xl .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ -webkit-transform: none;
+ transform: none;
+ }
+
+ .navbar-expand-xl .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-xl .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-xl .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .modal-xl {
+ max-width: 1140px;
+ }
+
+ .sticky-xl-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@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: 0.5rem;
+ padding-left: 0.5rem;
+ }
+
+ .navbar-expand-xxl .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-expand-xxl .navbar-collapse {
+ display: flex !important;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ }
+
+ .navbar-expand-xxl .navbar-toggler {
+ display: none;
+ }
+
+ .navbar-expand-xxl .offcanvas-header {
+ display: none;
+ }
+
+ .navbar-expand-xxl .offcanvas {
+ position: inherit;
+ bottom: 0;
+ z-index: 1000;
+ -ms-flex-grow: 1;
+ flex-grow: 1;
+ visibility: visible !important;
+ background-color: transparent;
+ border-right: 0;
+ border-left: 0;
+ transition: none;
+ -webkit-transform: none;
+ transform: none;
+ }
+
+ .navbar-expand-xxl .offcanvas-top {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-xxl .offcanvas-bottom {
+ height: auto;
+ border-top: 0;
+ border-bottom: 0;
+ }
+
+ .navbar-expand-xxl .offcanvas-body {
+ display: flex;
+ -ms-flex-grow: 0;
+ flex-grow: 0;
+ padding: 0;
+ overflow-y: visible;
+ }
+
+ .sticky-xxl-top {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 0;
+ z-index: 1020;
+ }
+}
+
+@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 {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-sm-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-sm-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@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 {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-md-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-md-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@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 {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-lg-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-lg-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@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 {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-xl-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-xl-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@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 {
+ border-radius: 0;
+ }
+
+ .modal-fullscreen-xxl-down .modal-body {
+ overflow-y: auto;
+ }
+
+ .modal-fullscreen-xxl-down .modal-footer {
+ border-radius: 0;
+ }
+}
+
+@media (prefers-reduced-motion) {
+ .animation {
+ transition: none !important;
+ -webkit-animation: unset !important;
+ animation: unset !important;
+ }
+}
+
+@media screen and (min-width: 320px) and (max-width: 820px) and (orientation: landscape) {
+ .datepicker-modal-container .datepicker-header {
+ height: 100%;
+ }
+
+ .datepicker-modal-container .datepicker-date {
+ margin-top: 100px;
+ }
+
+ .datepicker-modal-container .datepicker-day-cell {
+ width: 32x;
+ height: 32x;
+ }
+
+ .datepicker-modal-container {
+ flex-direction: row;
+ width: 475px;
+ height: 360px;
+ }
+
+ .datepicker-modal-container.datepicker-day-cell {
+ width: 36px;
+ height: 36px;
+ }
+}
+
+@media screen and (min-width: 320px) and (max-width: 825px) and (orientation: landscape) {
+ .timepicker-elements {
+ flex-direction: row !important;
+ border-bottom-left-radius: 0.5rem;
+ min-width: auto;
+ min-height: auto;
+ overflow-y: auto;
+ }
+
+ .timepicker-head {
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ padding: 10px;
+ padding-right: 10px !important;
+ height: auto;
+ min-height: 305px;
+ }
+
+ .timepicker-head-content {
+ flex-direction: column;
+ }
+
+ .timepicker-mode-wrapper {
+ justify-content: space-around !important;
+ flex-direction: row !important;
+ }
+
+ .timepicker-current {
+ font-size: 3rem;
+ font-weight: 400;
+ }
+
+ .timepicker-dot {
+ font-size: 3rem;
+ font-weight: 400;
+ }
+}
+
+@-webkit-keyframes _spinner-grow {
+ 0% {
+ -webkit-transform: scale(0);
+ transform: scale(0);
+ }
+
+ 50% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none;
+ }
+}
+
+@keyframes _spinner-grow {
+ 0% {
+ -webkit-transform: scale(0);
+ transform: scale(0);
+ }
+
+ 50% {
+ opacity: 1;
+ -webkit-transform: none;
+ transform: none;
+ }
+}
+
+@-webkit-keyframes _fade-in {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+@keyframes _fade-in {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+@-webkit-keyframes _fade-out {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+@keyframes _fade-out {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+@-webkit-keyframes _fade-in-down {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _fade-in-down {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@-webkit-keyframes _fade-in-left {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _fade-in-left {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@-webkit-keyframes _fade-in-right {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _fade-in-right {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@-webkit-keyframes _fade-in-up {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _fade-in-up {
+ from {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@-webkit-keyframes _fade-out-down {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@keyframes _fade-out-down {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@-webkit-keyframes _fade-out-left {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@keyframes _fade-out-left {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@-webkit-keyframes _fade-out-right {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@keyframes _fade-out-right {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@-webkit-keyframes _fade-out-up {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@keyframes _fade-out-up {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@-webkit-keyframes _slide-in-down {
+ from {
+ visibility: visible;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _slide-in-down {
+ from {
+ visibility: visible;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@-webkit-keyframes _slide-in-left {
+ from {
+ visibility: visible;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _slide-in-left {
+ from {
+ visibility: visible;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@-webkit-keyframes _slide-in-right {
+ from {
+ visibility: visible;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _slide-in-right {
+ from {
+ visibility: visible;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@-webkit-keyframes _slide-in-up {
+ from {
+ visibility: visible;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@keyframes _slide-in-up {
+ from {
+ visibility: visible;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+@-webkit-keyframes _slide-out-down {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@keyframes _slide-out-down {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@-webkit-keyframes _slide-out-left {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@keyframes _slide-out-left {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@-webkit-keyframes _slide-out-right {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@keyframes _slide-out-right {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@-webkit-keyframes _slide-out-up {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@keyframes _slide-out-up {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@-webkit-keyframes _slide-down {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@keyframes _slide-down {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+@-webkit-keyframes _slide-left {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@keyframes _slide-left {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+@-webkit-keyframes _slide-right {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@keyframes _slide-right {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+@-webkit-keyframes _slide-up {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@keyframes _slide-up {
+ from {
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ -webkit-transform: translate3d(0, -100%, 0);
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+@-webkit-keyframes _zoom-in {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+@keyframes _zoom-in {
+ from {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+@-webkit-keyframes _zoom-out {
+ from {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+@keyframes _zoom-out {
+ from {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
+ transform: scale3d(0.3, 0.3, 0.3);
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+@-webkit-keyframes _tada {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 10% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 30% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 70% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 40% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 60% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@keyframes _tada {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 10% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 20% {
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 30% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 70% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 90% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 40% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 60% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 80% {
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@-webkit-keyframes _pulse {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@keyframes _pulse {
+ from {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+
+ 50% {
+ -webkit-transform: scale3d(1.05, 1.05, 1.05);
+ transform: scale3d(1.05, 1.05, 1.05);
+ }
+
+ to {
+ -webkit-transform: scale3d(1, 1, 1);
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+@-webkit-keyframes _show-up-clock {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale(0.7);
+ transform: scale(0.7);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+@keyframes _show-up-clock {
+ 0% {
+ opacity: 0;
+ -webkit-transform: scale(0.7);
+ transform: scale(0.7);
+ }
+
+ to {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+}
+
+.visible {
+ visibility: visible;
+}
+
+.collapse {
+ visibility: collapse;
+}
+
+.static {
+ position: static;
+}
+
+.fixed {
+ position: fixed;
+}
+
+.absolute {
+ position: absolute;
+}
+
+.relative {
+ position: relative;
+}
+
+.sticky {
+ position: -webkit-sticky;
+ position: sticky;
+}
+
+.float-left {
+ float: left;
+}
+
+.m-0 {
+ margin: 0px;
+}
+
+.mx-1 {
+ margin-left: 0.25rem;
+ margin-right: 0.25rem;
+}
+
+.my-4 {
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+}
+
+.mx-4 {
+ margin-left: 1rem;
+ margin-right: 1rem;
+}
+
+.mb-12 {
+ margin-bottom: 3rem;
+}
+
+.mb-0 {
+ margin-bottom: 0px;
+}
+
+.mr-4 {
+ margin-right: 1rem;
+}
+
+.mb-6 {
+ margin-bottom: 1.5rem;
+}
+
+.mt-1 {
+ margin-top: 0.25rem;
+}
+
+.mr-2 {
+ margin-right: 0.5rem;
+}
+
+.mt-2 {
+ margin-top: 0.5rem;
+}
+
+.block {
+ display: block;
+}
+
+.inline-block {
+ display: inline-block;
+}
+
+.inline {
+ display: inline;
+}
+
+.flex {
+ display: flex;
+}
+
+.table {
+ display: table;
+}
+
+.hidden {
+ display: none;
+}
+
+.h-full {
+ height: 100%;
+}
+
+.h-screen {
+ height: 100vh;
+}
+
+.h-4 {
+ height: 1rem;
+}
+
+.w-full {
+ width: 100%;
+}
+
+.w-4 {
+ width: 1rem;
+}
+
+.grow-0 {
+ flex-grow: 0;
+}
+
+.basis-auto {
+ flex-basis: auto;
+}
+
+.transform {
+ -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.cursor-pointer {
+ cursor: pointer;
+}
+
+.resize {
+ resize: both;
+}
+
+.appearance-none {
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+.flex-row {
+ flex-direction: row;
+}
+
+.flex-col {
+ flex-direction: column;
+}
+
+.flex-wrap {
+ flex-wrap: wrap;
+}
+
+.items-center {
+ align-items: center;
+}
+
+.justify-center {
+ justify-content: center;
+}
+
+.justify-between {
+ justify-content: space-between;
+}
+
+.justify-around {
+ justify-content: space-around;
+}
+
+.justify-evenly {
+ justify-content: space-evenly;
+}
+
+.rounded-full {
+ border-radius: 9999px;
+}
+
+.rounded {
+ border-radius: 0.25rem;
+}
+
+.rounded-sm {
+ border-radius: 0.125rem;
+}
+
+.border {
+ border-width: 1px;
+}
+
+.border-solid {
+ border-style: solid;
+}
+
+.border-gray-300 {
+ --tw-border-opacity: 1;
+ border-color: rgb(209 213 219 / var(--tw-border-opacity));
+}
+
+.bg-blue-600 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(37 99 235 / var(--tw-bg-opacity));
+}
+
+.bg-white {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+}
+
+.bg-contain {
+ background-size: contain;
+}
+
+.bg-clip-padding {
+ background-clip: padding-box;
+}
+
+.bg-center {
+ background-position: center;
+}
+
+.bg-no-repeat {
+ background-repeat: no-repeat;
+}
+
+.p-3 {
+ padding: 0.75rem;
+}
+
+.px-6 {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+
+.px-4 {
+ padding-left: 1rem;
+ padding-right: 1rem;
+}
+
+.py-2 {
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+}
+
+.px-7 {
+ padding-left: 1.75rem;
+ padding-right: 1.75rem;
+}
+
+.py-3 {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+}
+
+.pt-1 {
+ padding-top: 0.25rem;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.align-top {
+ vertical-align: top;
+}
+
+.text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem;
+}
+
+.text-xs {
+ font-size: 0.75rem;
+ line-height: 1rem;
+}
+
+.text-xl {
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+}
+
+.text-sm {
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+}
+
+.font-medium {
+ font-weight: 500;
+}
+
+.font-semibold {
+ font-weight: 600;
+}
+
+.font-normal {
+ font-weight: 400;
+}
+
+.uppercase {
+ text-transform: uppercase;
+}
+
+.leading-tight {
+ line-height: 1.25;
+}
+
+.leading-snug {
+ line-height: 1.375;
+}
+
+.text-gray-800 {
+ --tw-text-opacity: 1;
+ color: rgb(31 41 55 / var(--tw-text-opacity));
+}
+
+.text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+}
+
+.text-gray-700 {
+ --tw-text-opacity: 1;
+ color: rgb(55 65 81 / var(--tw-text-opacity));
+}
+
+.text-red-600 {
+ --tw-text-opacity: 1;
+ color: rgb(220 38 38 / var(--tw-text-opacity));
+}
+
+.shadow-md {
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.outline {
+ outline-style: solid;
+}
+
+.blur {
+ --tw-blur: blur(8px);
+ -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.filter {
+ -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.transition {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, -webkit-transform, -webkit-filter, -webkit-backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-transform, -webkit-filter, -webkit-backdrop-filter;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+}
+
+.duration-150 {
+ transition-duration: 150ms;
+}
+
+.duration-200 {
+ transition-duration: 200ms;
+}
+
+.ease-in-out {
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.before\:mt-0\.5::before {
+ content: var(--tw-content);
+ margin-top: 0.125rem;
+}
+
+.before\:mt-0::before {
+ content: var(--tw-content);
+ margin-top: 0px;
+}
+
+.before\:flex-1::before {
+ content: var(--tw-content);
+ flex: 1 1 0%;
+}
+
+.before\:border-t::before {
+ content: var(--tw-content);
+ border-top-width: 1px;
+}
+
+.before\:border-gray-300::before {
+ content: var(--tw-content);
+ --tw-border-opacity: 1;
+ border-color: rgb(209 213 219 / var(--tw-border-opacity));
+}
+
+.after\:mt-0\.5::after {
+ content: var(--tw-content);
+ margin-top: 0.125rem;
+}
+
+.after\:mt-0::after {
+ content: var(--tw-content);
+ margin-top: 0px;
+}
+
+.after\:flex-1::after {
+ content: var(--tw-content);
+ flex: 1 1 0%;
+}
+
+.after\:border-t::after {
+ content: var(--tw-content);
+ border-top-width: 1px;
+}
+
+.after\:border-gray-300::after {
+ content: var(--tw-content);
+ --tw-border-opacity: 1;
+ border-color: rgb(209 213 219 / var(--tw-border-opacity));
+}
+
+.checked\:border-blue-600:checked {
+ --tw-border-opacity: 1;
+ border-color: rgb(37 99 235 / var(--tw-border-opacity));
+}
+
+.checked\:bg-blue-600:checked {
+ --tw-bg-opacity: 1;
+ background-color: rgb(37 99 235 / var(--tw-bg-opacity));
+}
+
+.hover\:bg-blue-700:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(29 78 216 / var(--tw-bg-opacity));
+}
+
+.hover\:text-red-700:hover {
+ --tw-text-opacity: 1;
+ color: rgb(185 28 28 / var(--tw-text-opacity));
+}
+
+.hover\:shadow-lg:hover {
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.focus\:border-blue-600:focus {
+ --tw-border-opacity: 1;
+ border-color: rgb(37 99 235 / var(--tw-border-opacity));
+}
+
+.focus\:bg-blue-700:focus {
+ --tw-bg-opacity: 1;
+ background-color: rgb(29 78 216 / var(--tw-bg-opacity));
+}
+
+.focus\:bg-white:focus {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+}
+
+.focus\:text-gray-700:focus {
+ --tw-text-opacity: 1;
+ color: rgb(55 65 81 / var(--tw-text-opacity));
+}
+
+.focus\:text-red-700:focus {
+ --tw-text-opacity: 1;
+ color: rgb(185 28 28 / var(--tw-text-opacity));
+}
+
+.focus\:shadow-lg:focus {
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.focus\:outline-none:focus {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+}
+
+.focus\:ring-0:focus {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.active\:bg-blue-800:active {
+ --tw-bg-opacity: 1;
+ background-color: rgb(30 64 175 / var(--tw-bg-opacity));
+}
+
+.active\:shadow-lg:active {
+ --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+@media (min-width: 768px) {
+ .md\:mb-0 {
+ margin-bottom: 0px;
+ }
+
+ .md\:w-9\/12 {
+ width: 75%;
+ }
+
+ .md\:w-8\/12 {
+ width: 66.666667%;
+ }
+
+ .md\:shrink-0 {
+ flex-shrink: 0;
+ }
+}
+
+@media (min-width: 1024px) {
+ .lg\:w-6\/12 {
+ width: 50%;
+ }
+
+ .lg\:w-5\/12 {
+ width: 41.666667%;
+ }
+
+ .lg\:justify-start {
+ justify-content: flex-start;
+ }
+
+ .lg\:justify-between {
+ justify-content: space-between;
+ }
+
+ .lg\:text-left {
+ text-align: left;
+ }
+}
+
+@media (min-width: 1280px) {
+ .xl\:ml-20 {
+ margin-left: 5rem;
+ }
+
+ .xl\:w-6\/12 {
+ width: 50%;
+ }
+
+ .xl\:w-5\/12 {
+ width: 41.666667%;
+ }
+
+ .xl\:justify-center {
+ justify-content: center;
+ }
+}
diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx
new file mode 100644
index 0000000..99a0735
--- /dev/null
+++ b/src/pages/Home.jsx
@@ -0,0 +1,17 @@
+import React from 'react'
+import { useDispatch } from 'react-redux'
+import { useNavigate } from 'react-router-dom'
+import { ToastContainer } from 'react-toastify'
+import { logOut } from '../auth/firebase'
+
+const Home = () => {
+ const dispatch = useDispatch()
+ const navigate = useNavigate()
+ return (
+
+
+
+ )
+}
+
+export default Home
diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx
new file mode 100644
index 0000000..867a13d
--- /dev/null
+++ b/src/pages/Login.jsx
@@ -0,0 +1,140 @@
+import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
+import React, { useState } from "react";
+import { useDispatch } from "react-redux";
+import { Link, useNavigate } from "react-router-dom";
+import { provider, signIn, signUpProvider } from "../auth/firebase";
+import { setUser } from "../features/authSlice";
+
+const Login = () => {
+ const [loginUser, setLoginUser] = useState({
+ username: "",
+ email: "",
+ password: "",
+ });
+ const dispatch = useDispatch()
+ const navigate = useNavigate()
+ const handleGoogle = () => {
+ signUpProvider(navigate,dispatch)
+ }
+ const handleClick = (e) => {
+ e.preventDefault();
+ signIn(loginUser.username,loginUser.email, loginUser.password, navigate,dispatch);
+ }
+
+ return (
+
+
+
+
+

+
+
+
+
+
Sign in with
+
+
+
+ {/* Name input */}
+
+
+ setLoginUser({ ...loginUser, username: e.target.value })
+ }
+ />
+
+ {/* Email input */}
+
+
+ setLoginUser({ ...loginUser, email: e.target.value })
+ }
+ />
+
+ {/* Password input */}
+
+
+ setLoginUser({ ...loginUser, password: e.target.value })
+ }
+ />
+
+
+
+
+
+ Don't have an account?
+
+ Register
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Login;
diff --git a/src/pages/Register.jsx b/src/pages/Register.jsx
new file mode 100644
index 0000000..2099b44
--- /dev/null
+++ b/src/pages/Register.jsx
@@ -0,0 +1,99 @@
+import React, {useState } from 'react'
+import { useDispatch, useSelector } from 'react-redux';
+
+import { Link, useNavigate } from 'react-router-dom';
+import { createUser } from '../auth/firebase';
+
+const Register = () => {
+ const navigate = useNavigate()
+ const dispatch = useDispatch()
+ const [registerUser, setRegisterUser] = useState({
+ username: "",
+ email: "",
+ password: "",
+ });
+ const handleRegister =(e)=>{
+ e.preventDefault()
+ const displayName = registerUser.username
+ const email = registerUser.email
+ const password = registerUser.password
+ createUser(email, password, navigate, displayName);
+ console.log(email,password,displayName)
+ }
+
+ return (
+
+
+
+
+
+

+
+
+ {/* Name input */}
+
+
+ setRegisterUser({ ...registerUser, username: e.target.value })
+ }
+ />
+
+ {/* Email input */}
+
+
+ setRegisterUser({ ...registerUser, email: e.target.value })
+ }
+ />
+
+ {/* Password input */}
+
+
+ setRegisterUser({ ...registerUser, password: e.target.value })
+ }
+ />
+
+
+
+
+ Login
+
+
+
+
+
+
+
+
+ )
+}
+
+export default Register
diff --git a/src/router/AppRouter.jsx b/src/router/AppRouter.jsx
new file mode 100644
index 0000000..d0f840a
--- /dev/null
+++ b/src/router/AppRouter.jsx
@@ -0,0 +1,29 @@
+import React, { useEffect, useState } from 'react'
+import { useDispatch, useSelector } from 'react-redux'
+import { Route, Routes } from 'react-router-dom'
+import Home from '../pages/Home'
+import Login from '../pages/Login'
+import Register from '../pages/Register'
+import { userObserver } from '../auth/firebase'
+
+const AppRouter = () => {
+ const currentUser = useSelector((state)=>state.user)
+ const dispatch = useDispatch()
+
+ useEffect(() => {
+ userObserver(dispatch,currentUser)
+ }, [])
+ return (
+ <>
+
+ } />
+ } />
+ }/>
+
+
+
+ >
+ )
+}
+
+export default AppRouter
diff --git a/src/router/PrivateRouter.jsx b/src/router/PrivateRouter.jsx
new file mode 100644
index 0000000..e69de29
diff --git a/tailwind.config.js b/tailwind.config.js
index 593a6cb..990f83c 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,8 +1,7 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
- content: ["./src/**/*.{html,js}"],
- theme: {
- extend: {},
- },
- plugins: [],
+ content: ['./src/**/*.{html,js,jsx}', './node_modules/tw-elements/dist/js/**/*.js'],
+ plugins: [
+ require('tw-elements/dist/plugin')
+ ]
}